Does anyone have a working example of writing data from Factory Track back to CSI (cloud)? I've followed the shipment tracking example in the "Infor Factory Track CSI Extensibility Guide" (publication date January 13, 2023), but I can't seem to make things work. I looked in the old forums and found references to needing to reference ICERPLayer and have done so.
What I've tried:
- Add a CSI table "ue_ShipmentTracking"
- Created a CSI IDO "ue_SLShipmentTracking"
- Created method: "AddTrackingNumber" usinmg the example on page 18 (note that there is an inconsistency between the parameter names shown in steps 7 and 8 (e.g., co_num vs. CoNum) I used CoNum, CoLine, and TrackNum.
4. Created an IDO Extension Class Assembly, "ue_AddTrackingNumber"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Mongoose.IDO;
using Mongoose.IDO.Protocol;
using System.Data;
namespace AddTrackingNumber
{
[IDOExtensionClass("ue_SLShipmentTracking")]
class AddTrackingNumberUpdate : ExtensionClassBase
{
/// <summary>
/// Set context for base and calling the preloadcollection event for current ido.
/// </summary>
/// <param name="context">current ido context</param>
public override void SetContext(IIDOExtensionClassContext context)
{
base.SetContext(context);
}
public AddTrackingNumberUpdate()
{
try
{
if (this.Context != null)
{
SetContext(this.Context);
}
}
catch (Exception)
{
}
}
[IDOMethod(MethodFlags.None, "Infobar")]
public int AddTrackingNumber(string CoNum, string CoLine, string TrackNum)
{
int returnvalue = 0;
try
{
UpdateCollectionRequestData request = new UpdateCollectionRequestData();
UpdateCollectionResponseData response;
IDOUpdateItem customerItem = new IDOUpdateItem();
//NOTE: Change name of IDO if "Access As" was appended to your IDO name
request.IDOName = "ue_SLShipmentTracking";
request.RefreshAfterUpdate = true;
customerItem.Action = UpdateAction.Insert;
customerItem.Properties.Add("co_num", CoNum);
customerItem.Properties.Add("co_line", Convert.ToInt32(CoLine));
customerItem.Properties.Add("Datetime", DateTime.Now);
customerItem.Properties.Add("track_num", TrackNum);
request.Items.Add(customerItem);
response = this.Context.Commands.UpdateCollection(request);
}
catch (Exception ex)
{
returnvalue = 16;
}
return returnvalue;
}
}
}
5. Created an IDO Extension Class Assembly in FT, "ue_ICTrackUpdate" referencing ICERPLayer, System.Data.dll, ICTrackUpdate.dll (also tried ue_ICTrackUpdate.dll)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Mongoose.IDO;
using Mongoose.IDO.Protocol;
using System.Data;
using ICERPLayer;
namespace ICTrackUpdate
{
public class ERPTrackUpdate : ICERPLayer.ErpInteractionBase
{
public int AddTransNum(string CoNum, string CoLine, string TransNum)
{
string error = "";
int returnvalue = 32;
//NOTE: Change name of IDO {ue_SLShipmentTracking} if "Access As" was appended to your IDO name
DataTable table = this.ExecuteERPUpdateRequest("ue_SLShipmentTracking", "AddTrackingNumber", out error, CoNum, CoLine, TransNum);
//returnvalue = table.Rows.Count;
if (table.Rows.Count > 0) {
TransNum = table.Rows[0]["TrackNum"].ToString();
try {
returnvalue = Convert.ToInt16(table.Rows[0]["ReturnValue"].ToString());
if (returnvalue != 0) {
returnvalue = 16;
}
} catch (Exception) {
}
}
return returnvalue;
}
}
}
6. Created a Factory Track IDO, "ue_ICSLShipmentTracking" with the primary (and only table as "AccessAs" with IDO assembly name: "ue_ICTrackUpdate" Ext Class Name: "ERPTrackUpdate", Ext Class Namespace: "ICTrackUpdate"
7. Created a form to test with the method call:
ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR C(CoNumEdit), VAR C(CoLineEdit), VAR C(TrackNumEdit)) )
8. Refreshed Farm Metadata
Here is the response I get in the log:
=============================================
WinStudio Log Message (2025-02-20 09:55:27):
=============================================
1
15:55:22.308: IntComp: Found C(), parms TrackNumEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR ~LIT~(1Z6845555555555)) )
15:55:22.308: EventHandler (PostToERP): About to execute, raw response ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR C(CoNumEdit), VAR C(CoLineEdit), VAR C(TrackNumEdit)) ), interpreted response ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR ~LIT~(1Z6845555555555)) )
15:55:22.308: IntComp: Found C(), parms CoNumEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR C(CoLineEdit), VAR C(TrackNumEdit)) )
15:55:22.308: IntComp: Found C(), parms CoLineEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR C(TrackNumEdit)) )
15:55:22.308: IntComp: Found C(), parms TrackNumEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR ~LIT~(1Z6845555555555)) )
15:55:22.308: EventHandler (PostToERP): About to execute method(parms) ue_ICSLShipmentTracking.AddTransNum(VAR C(CoNumEdit), VAR C(CoLineEdit), VAR C(TrackNumEdit))
15:55:22.308: Methods (AddTransNum): Uninterpreted Spec ue_ICSLShipmentTracking.AddTransNum(VAR C(CoNumEdit), VAR C(CoLineEdit), VAR C(TrackNumEdit)), Server: ue_ICSLShipmentTracking Parms: VAR C(CoNumEdit), VAR C(CoLineEdit), VAR C(TrackNumEdit)
15:55:22.308: IntComp: Found C(), parms CoNumEdit, value now VAR ~LIT~(100)
15:55:22.308: Methods ((parm info)): Before call, type VAR, value 100, ref target Component CoNumEdit, string value
15:55:22.308: IntComp: Found C(), parms CoLineEdit, value now VAR ~LIT~(1)
15:55:22.308: Methods ((parm info)): Before call, type VAR, value 1, ref target Component CoLineEdit, string value
15:55:22.308: IntComp: Found C(), parms TrackNumEdit, value now VAR ~LIT~(1Z6845555555555)
15:55:22.308: Methods ((parm info)): Before call, type VAR, value 1Z6845555555555, ref target Component TrackNumEdit, string value
15:55:22.827: Methods (AddTransNum): Result 16d, msg
15:55:22.827: EventHandler (PostToERP): Method execution returned code 16d, msg
15:55:22.827: IntComp: Found C(), parms CoNumEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR C(CoLineEdit), VAR C(TrackNumEdit)) )
15:55:22.827: IntComp: Found C(), parms CoLineEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR C(TrackNumEdit)) )
15:55:22.827: IntComp: Found C(), parms TrackNumEdit, value now ue_ICSLShipmentTracking.AddTransNum( PARMS(VAR ~LIT~(100), VAR ~LIT~(1), VAR ~LIT~(1Z6845555555555)) )
15:55:22.827: EventHandler (PostToERP): Execution complete, rc 16
15:55:22.827: FormEvent (ue_MethodTest): Event name PostToERP, result 16, num handlers for event 1, num executed 1, default handler ignored False, IDO collection
I then saw chapter 5 "Extensions using new Factory Track 7 architecture without reviews" which seems to have a different communication method using FTSLERPLayer as the IDO Assembly Name.
Any help is appreciated.