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);
}
}