internal:proship:velocity:ils-event

This is an old revision of the document!


Velocity PSS function to send request to ILS:

Sub Ils_RunEvent(IlsEvent)
	Dim IlsRq
	Dim IlsEvXPath
	
	Select Case IlsEvent
		Case "StartClient"
			Set IlsRq = Sys
			IlsEvXPath = "/SYSTEM/ILS"
		Case Else
			Set IlsRq = Shipment
			IlsEvXPath = "/SHIPMENT/ILS"
	End Select

	IlsRq.DeleteElement IlsEvXPath
	IlsRq.E(IlsEvXPath & "/EVENT") = IlsEvent
	
	DMsgBox "Request" & vbLF & IlsRq.Xml
	Dim ilsRsTxt 
	ilsRsTxt = TcpSend(Machine.ServerName, 3298, IlsRq.Xml & Chr(3), 30)
	If Right(ilsRsTxt, 1) = Chr(3) Then
		ilsRsTxt = Left(ilsRsTxt, Len(ilsRsTxt) - 1)
	End If

	DMsgBox "Response" & vbLF & ilsRsTxt
	Dim IlsRs
	Set IlsRs = CreateProcReq()
	IlsRs.Xml = ilsRsTxt
	'Debug_XML IlsRs.xml
	
	DMsgBox IlsRs.E(IlsEvXPath & "/STATUS")
	If (CInt("0" & IlsRs.E(IlsEvXPath & "/STATUS")) > 0) Then
		IlsRs.DeleteElement IlsEvXPath
		Select Case IlsEvent
			Case "StartClient"
				'Sys.Xml = IlsRs.Xml
			Case Else
				Shipment.Xml = IlsRs.Xml
		End Select
	End If
End Sub

Call the function like this within Velocity events:

Function PreShipShipment()
	Ils_RunEvent "PRESHIP"
End Function

PSV.psi: ILS code that handles incoming requests from PSS Ils_RunEvent:

    internal class PSV : VelocityEvents
    {
        public PSV() : base(IlsConfiguration.Logger) { }

        public override string StartClient(ref CpiXml SysClient)
        {
            LogInfo(String.Format("{0}.{1}() started.", this.GetType().Name, MethodBase.GetCurrentMethod().Name));

            return "";
        }

        public override void LoadShipment(ref CpiXml Shipment)
        {
            LogInfo(String.Format("{0}.{1}() started.", this.GetType().Name, MethodBase.GetCurrentMethod().Name));
            LogDebug(Shipment.Xml);

            try
            {
                var shipRef = Shipment["/SHIPMENT/COMMON/SHIPPER_REFERENCE"];

                try
                {
                    var JOrder = dolibarr.GetOrder(shipRef);

                    Shipment["/SHIPMENT/COMMON/ORDER_ID"] = JOrder.Value<string>("id");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_COMPANY"] = JOrder["shipto"].Value<string>("shipto_name");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_COUNTRY"] = JOrder["shipto"].Value<string>("shipto_country");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_ADDRESS1"] = JOrder["shipto"].Value<string>("shipto_address1");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_CITY"] = JOrder["shipto"].Value<string>("shipto_city");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_STATE"] = JOrder["shipto"].Value<string>("shipto_state");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_POSTALCODE"] = JOrder["shipto"].Value<string>("shipto_zip");
                    Shipment["/SHIPMENT/COMMON/CONSIGNEE_REFERENCE"] = JOrder["shipto"].Value<string>("shipto_code");

                    Shipment["/SHIPMENT/COMMON/SHIPVIA"] = JOrder.Value<string>("shipvia");

                    Shipment["/SHIPMENT/ILS/STATUS"] = "1";
                }
                catch (Exception ex)
                {
                    LogError(ex.ToString());
                    Shipment["/SHIPMENT/ERROR"] = "Unable to load order";
                }
            }
            catch (Exception ex)
            {
                LogError("Exception " + ex.Message);
                Shipment["/SHIPMENT/ERROR"] = ex.Message;
            }

        End_LoadShipment:
            LogInfo(String.Format("{0}.{1}() done.", this.GetType().Name, MethodBase.GetCurrentMethod().Name));
            LogDebug(Shipment.Xml);
        }

        public override string PostShip(ref CpiXml Shipment)
        {
            LogInfo(String.Format("{0}.{1}() started.", this.GetType().Name, MethodBase.GetCurrentMethod().Name));
            LogDebug(Shipment.Xml);

                        var custId = Shipment["/SHIPMENT/COMMON/SHIPPER_REFERENCE"];

            using (OdbcConnection db = new OdbcConnection("dsn=proship"))
            {
                db.Open();

                using (OdbcCommand queryCmd = new OdbcCommand(null, db))
                {
                    queryCmd.CommandText =
                        "INSERT INTO ps_shipments " +
                        "(shipper, shipdate, track_no, shipper_reference, consignee_reference, service, terms, " +
                        "`return`, base_charge, total_charge, operator, sort_code, st_company, st_contact, " +
                        "st_address1, st_address2, st_city, st_state, st_zip, st_country, st_phone, processed_on) " +
                        "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW());";

                    queryCmd.Parameters.AddWithValue("@shipper", Shipment["/SHIPMENT/COMMON/SHIPPER"]);
                    queryCmd.Parameters.AddWithValue("@shipdate", DateTime.Parse(Shipment["/SHIPMENT/COMMON/SHIPDATE"]));
                    queryCmd.Parameters.AddWithValue("@track_no", Shipment["/SHIPMENT/PACKAGE[1]/TRACKING_NUMBER"]);
                    queryCmd.Parameters.AddWithValue("@shipper_reference", Shipment["/SHIPMENT/COMMON/SHIPPER_REFERENCE"]);
                    queryCmd.Parameters.AddWithValue("@consignee_reference", Shipment["/SHIPMENT/COMMON/CONSIGNEE_REFERENCE"]);
                    queryCmd.Parameters.AddWithValue("@service", Shipment["/SHIPMENT/SERVICE"]);
                    queryCmd.Parameters.AddWithValue("@terms", Shipment["/SHIPMENT/COMMON/TERMS"]);
                    queryCmd.Parameters.AddWithValue("@return", int.Parse("0" + Shipment["/SHIPMENT/COMMON/RETURN_DELIVERY_METHOD"]));
                    queryCmd.Parameters.AddWithValue("@base_charge", decimal.Parse("0" + Shipment["/SHIPMENT/COMMON/BASE"]).ToString("N2"));
                    queryCmd.Parameters.AddWithValue("@total_charge", decimal.Parse("0" + Shipment["/SHIPMENT/COMMON/TOTAL"]).ToString("N2"));
                    queryCmd.Parameters.AddWithValue("@operator", Shipment["/SHIPMENT/COMMON/MISC/OPERATOR"]);
                    queryCmd.Parameters.AddWithValue("@sort_code", Shipment["/SHIPMENT/COMMON/MISC/SORTS/SORT/SORT_CODE"]);
                    queryCmd.Parameters.AddWithValue("@st_company", Shipment["/SHIPMENT/COMMON/CONSIGNEE_COMPANY"]);
                    queryCmd.Parameters.AddWithValue("@st_contact", Shipment["/SHIPMENT/COMMON/CONSIGNEE_CONTACT"]);
                    queryCmd.Parameters.AddWithValue("@st_address1", Shipment["/SHIPMENT/COMMON/CONSIGNEE_ADDRESS1"]);
                    queryCmd.Parameters.AddWithValue("@st_address2", Shipment["/SHIPMENT/COMMON/CONSIGNEE_ADDRESS2"]);
                    queryCmd.Parameters.AddWithValue("@st_city", Shipment["/SHIPMENT/COMMON/CONSIGNEE_CITY"]);
                    queryCmd.Parameters.AddWithValue("@st_state", Shipment["/SHIPMENT/COMMON/CONSIGNEE_STATE"]);
                    queryCmd.Parameters.AddWithValue("@st_zip", Shipment["/SHIPMENT/COMMON/CONSIGNEE_POSTALCODE"]);
                    queryCmd.Parameters.AddWithValue("@st_country", Shipment["/SHIPMENT/COMMON/CONSIGNEE_COUNTRY"]);
                    queryCmd.Parameters.AddWithValue("@st_phone", Shipment["/SHIPMENT/COMMON/CONSIGNEE_PHONE"]);
                    LogDebug(queryCmd.CommandText.ToString());

                    LogDebug(String.Format("{0} row(s) affected.", queryCmd.ExecuteNonQuery()));
                }
            }

            var shippedNote = String.Format("Date: {0}\nTracking #: {1}\nCharge: {2}", DateTime.Now.ToString(), Shipment["/SHIPMENT/PACKAGE/TRACKING_NUMBER"], Shipment["/SHIPMENT/COMMON/TOTAL"]);
            dolibarr.UpdateNote(Shipment["/SHIPMENT/COMMON/ORDER_ID"], shippedNote);

        End_PostShip:
            LogInfo(String.Format("{0}.{1}() done.", this.GetType().Name, MethodBase.GetCurrentMethod().Name));
            LogDebug(Shipment.Xml);
            return base.PostShip(ref Shipment);
        }
}
  • internal/proship/velocity/ils-event.1784036722.txt.gz
  • Last modified: 2026/07/14 09:45
  • by lseadmin