Thursday, April 17, 2025

Log level errors during full build and sync

 


If you’re encountering errors related to standard objects, try searching the error in ChatGPT. It can help identify the configuration key that needs to be enabled.

System Administration>setup>License configuration.

To enable the configuration key, system should be in maintenance mode.

Reference Link :

https://community.dynamics.com/forums/thread/details/?threadid=ae25b9ff-9379-ee11-8179-00224827e012


Wednesday, April 16, 2025

Decoding API from ZIP to D365f&o

My requirement is to retrieve invoice journal information from the ZIP application into D365 Finance & Operations.

In ZIP, the information is stored in JSON format. In the code, I’m accessing the ZIP API using the API key provided by the client. I decode the JSON response from the API and store the information into custom tables in D365.

From these custom tables, I will then create the invoice journals.

.......

using System.Net;

using System.Net.Security;

using System.IO.Path;

using Newtonsoft.Json.Linq.JObject;

using System.Collections;

using Newtonsoft.Json;

using Newtonsoft.Json.Linq;

public class PROZIPVendorInvoiceIntegrationService extends SysOperationServiceBase

{

    PROZIPVendorInvoiceStagingTable         VendorInvoiceStagingTable,VendorInvoiceStagingTableUpd;

    PROZIPVendorInvoiceLineStagingTable     VendorInvoiceLineStagingTable;

    public str getZIPRecords(str Url, str method)

    {

        System.Net.HttpWebRequest   request;

        System.Net.WebResponse      response;

        System.IO.Stream            responseStream, requestStream;

        System.IO.StreamReader      streamReader;

        System.Text.Encoding        utf8;

        System.Byte[]               bytes;

        System.Exception            ex;

        Notes                       token, requestJson, responseJson, errorMessage;

        URL                         endpointURL;

        SysInfoLogEnumerator        infoLogEnum;

        SysInfologMessageStruct     infoMessageStruct;

        System.Net.WebHeaderCollection  headers;

        VendParameters  vendparameters = VendParameters::find();


     

        //str                         getStatusResponse;

        System.Net.WebException       webException;

 

        try

        {

            System.Net.WebHeaderCollection httpHeader = new System.Net.WebHeaderCollection();

            //endpointURL = _Url;//"https://api.ziphq.com/vendors?include_attributes=true";//this.get_EndpointURL(); // Getting API URL

            endpointURL = "https://api.ziphq.com/invoices?include_attributes=true";//this.get_EndpointURL(); // Getting API URL

            new InteropPermission(InteropKind::ClrInterop).assert();

            request = System.Net.WebRequest::Create(endpointURL);

            utf8 = System.Text.Encoding::get_UTF8();


            headers = new System.Net.WebHeaderCollection();

            headers.Add(strFmt('Zip-Api-Key:%1',vendparameters.PROZIPKey));

           // headers.Add('accept:application/json');

            request.set_Headers(headers);

            request.set_Method(_method);

            request.set_ContentType('application/json');

            request.set_Accept('application/json');


            response = request.GetResponse();

            responseStream = response.GetResponseStream();

            streamReader = new System.IO.StreamReader(responseStream);

            responseJson = streamReader.ReadToEnd();


            info(strFmt('Success API Response is %1', responseJson));

            

            //this.readStatusResponse(responseJson);


            //getStatusResponse = new Amir_SuccessStatusResponse();

            //getStatusResponse = FormJsonSerializer::deserializeObject(classNum(Amir_SuccessStatusResponse), responseJson);

           

         

        }

        catch(webException)

        {

           // Amir_ErrorStatusResponse errorStatusResponse = new Amir_ErrorStatusResponse();

            // Handle WebException for error response

            if (webException.get_Response() != null)

            {

                System.Net.HttpWebResponse httpWebResponse;

                Notes responseString;


                // Get error response stream

                httpWebResponse = webException.get_Response() as System.Net.HttpWebResponse;

                responseStream = httpWebResponse.GetResponseStream();

                streamReader = new System.IO.StreamReader(responseStream);

                responseString = streamReader.ReadToEnd();


                // Log the error response body (usually in JSON format)

                error(strFmt("Error Response (JSON): %1", responseString));


           

                //errorStatusResponse = FormJsonSerializer::deserializeObject(classNum(Amir_ErrorStatusResponse), responseString);

           

           

                 

            }

        }

        return responseJson;

    }


    public void processOperation()

    {

        VendParameters      vendParmeters = VendParameters::find();

        str response = this.getZIPRecords(strFmt('%1?include_attributes=true', vendParmeters.PROZIPVendorInvoiceURL), 'GET');

        if (response != null)

        {

            this.readStatusResponse(response);

        }


    }


    /*Public static void Main(Args _args)

    {

        PROZIPVendorIntegrationService PROZIPVendorIntegrationService = new PROZIPVendorIntegrationService();

        VendParameters      vendParmeters = VendParameters::find();

        str response = PROZIPVendorIntegrationService.getZIPRecords(strFmt('%1?include_attributes=true', vendParmeters.PROZIPVendorURL), 'GET');

        if (response != null)

        {

            PROZIPVendorIntegrationService.readStatusResponse(response);

        }


    }*/


    boolean readStatusResponse(str _response)

    {

        

        boolean     ret;

        

        Newtonsoft.Json.Linq.JObject jObject;

        jObject = Newtonsoft.Json.Linq.JObject::Parse(_response);

        RecordInsertList    insertList = new RecordInsertList(tableNum(PROZIPVendorInvoiceStagingTable));

        

        //jToken = jObject.get_Item('data');

        //jObject = Newtonsoft.Json.Linq.JObject::Parse(jToken.ToString());

        Newtonsoft.Json.Linq.JArray jarray = jObject.get_Item('list');

        int countnum = jarray.Count;

        int rowCount;

        IEnumerator enumerator = jArray.GetEnumerator();

        //ttsbegin;

        while (enumerator.MoveNext())

        {

            rowCount++;

           

            try

            {

                //if (rowCount == 43)

                //{

                    //Header payload

                    ttsbegin;

                    JToken token            = enumerator.Current;

                    str ID                  = token.get_Item('id').ToString();

                    str type                = token.get_Item('type').ToString();

                    str description         = token.get_item('description').tostring();

                    str invoice_number      = token.get_Item('invoice_number').ToString();

                    str tax_amount          = token.get_Item('tax_amount').ToString();

                    str currency            = token.get_Item('currency').ToString();

                    str created_at          = token.get_Item('created_at').ToString();

                    str amount              = token.get_Item('amount').ToString();

                    str invoice_date        = token.get_Item('invoice_date').ToString();

                    str source              = token.get_Item('source').ToString();

                    str due_date            = token.get_Item('due_date').ToString();

                    str shipping_amount     = token.get_Item('shipping_amount').ToString();

                    str misc_amount         = token.get_Item('misc_amount').ToString();

                    str status              = token.get_Item('status').ToString();;

                

                    Newtonsoft.Json.Linq.JObject departmentsObject = token.get_Item('department') as Newtonsoft.Json.Linq.JObject;

                    str departments, name ,type2;

                    if (departmentsObject)

                    {

                        type2 = departmentsObject.get_item('type').ToString();

                        if(type2 == 'department')

                        {

                            departments = departmentsObject.get_item('name').ToString();

                        }

                    }


                    Newtonsoft.Json.Linq.JObject vendorObject = token.get_Item('vendor') as Newtonsoft.Json.Linq.JObject;

                    str vendName ;

                    str vendAccount;

                    if(vendorObject)

                    {

                        vendName = vendorObject.get_item('name').ToString();


                        Newtonsoft.Json.Linq.JArray vendorAccountloc = vendorObject.get_Item('external_data') as Newtonsoft.Json.Linq.JArray;

                        System.Collections.IEnumerator attrEnumerator = vendorAccountloc.GetEnumerator();


                        while (attrEnumerator.MoveNext())

                        {

                            Newtonsoft.Json.Linq.JObject vendorObjectId = attrEnumerator.get_Current() as Newtonsoft.Json.Linq.JObject;

                  

                            vendAccount = vendorObjectId.get_item('id').ToString();

                        }


                    }


                    select firstonly VendorInvoiceStagingTable

                    where VendorInvoiceStagingTable.ID == ID;

                    if (!VendorInvoiceStagingTable)

                    {

                        VendorInvoiceStagingTable.clear();

                        VendorInvoiceStagingTable.ID                = ID;

                        VendorInvoiceStagingTable.ProcessingStatus  = PROProcessingStatus::Unprocessed;

                        VendorInvoiceStagingTable.VendAccount       = vendAccount;

                        VendorInvoiceStagingTable.VendName          = vendName;

                        VendorInvoiceStagingTable.Status            = status;

                        VendorInvoiceStagingTable.insert();

                    }

                    else if(VendorInvoiceStagingTable.ProcessingStatus != PROProcessingStatus::Processed)

                    {

                        ttsbegin;

                        VendorInvoiceStagingTable.selectForUpdate(true);

                        VendorInvoiceStagingTable.ID                = ID;

                        VendorInvoiceStagingTable.type              = type;

                        if(pmfTableHasChanged(VendorInvoiceStagingTable))

                        {

                            VendorInvoiceStagingTable.ProcessingStatus  = PROProcessingStatus::Unprocessed;

                        }

                        VendorInvoiceStagingTable.ProcessingRemarks = "";

                        VendorInvoiceStagingTable.VendAccount       = vendAccount;

                        VendorInvoiceStagingTable.VendName          = vendName;

                        VendorInvoiceStagingTable.update();

                        ttscommit;

                    }

                    //Lines payload

                    Newtonsoft.Json.Linq.JArray         attributeArray = token.get_Item('line_items') as Newtonsoft.Json.Linq.JArray;

                    System.Collections.IEnumerator      attrEnumerator = attributeArray.GetEnumerator();


                    while (attrEnumerator.MoveNext())

                    {

                        Newtonsoft.Json.Linq.JObject attrObject = attrEnumerator.get_Current() as Newtonsoft.Json.Linq.JObject;

                  

                        str idloc                   = attrObject.get_Item('id').ToString();

                        str typeloc                 = attrObject.get_Item('type').ToString();

                        str quantity                = attrObject.get_Item('quantity').ToString();

                        str end_date                = attrObject.get_Item('end_date').ToString();

                        str secondary_line_type     = attrObject.get_Item('secondary_line_type').ToString();

                        str amortization_end_date   = attrObject.get_Item('amortization_end_date').ToString();

                        str currencyloc             = attrObject.get_Item('currency').ToString();

                        str amortization_start_date = attrObject.get_Item('amortization_start_date').ToString();

                        str total                   = attrObject.get_Item('total').ToString();

                        str end_date_iso            = attrObject.get_Item('end_date_iso').ToString();

                        str rate                    = attrObject.get_Item('rate').ToString();

                        str line_type               = attrObject.get_Item('line_type').ToString();

                        str descriptionloc          = attrObject.get_Item('description').ToString();

                        str start_date_iso          = attrObject.get_Item('start_date_iso').ToString();

                        str start_date              = attrObject.get_Item('start_date').ToString();

                  

                        //Newtonsoft.Json.Linq.JObject departmentsObjectloc = attrObject.get_Item('department') as Newtonsoft.Json.Linq.JObject;

                        //str departmentsloc, nameloc ,type2loc;

                        //if (departmentsObjectloc)

                        //{

                        //    type2loc = departmentsObjectloc.get_item('type').ToString();

                        //    if(type2loc == 'department')

                        //    departmentsloc = departmentsObjectloc.get_item('name').ToString();

                        //}


                        str expense_category  = attrObject.get_Item('expense_category').ToString();

                        str location = attrObject.get_Item('location').ToString();

                        str gl_code = attrObject.get_Item('gl_code').ToString();


                        Newtonsoft.Json.Linq.JArray     procArray = attrObject.get_Item('attributes') as Newtonsoft.Json.Linq.JArray;

                        System.Collections.IEnumerator  procEnumerator = procArray.GetEnumerator();

                        str procConfigid,procData,taxConfigid,taxData;

                        str nameloc,countryname;

                   

                        while(procEnumerator.moveNext())

                        {

                            Newtonsoft.Json.Linq.JObject  procObject = procEnumerator.get_Current() as Newtonsoft.Json.Linq.JObject;


                            str  procName  = procObject.get_Item('name').ToString();

                       

                            if(procname == "Procurement Categories")

                            {

                                procConfigid = procObject.get_Item('config_id').ToString();

                                procData  = procObject.get_Item('data').ToString();

                            }


                            if(procName == "Standard tax code")

                            {

                                taxConfigid = procObject.get_Item('config_id').ToString();

                                taxData  = procObject.get_Item('data').ToString();

                            }

                        

                            if (procName == 'department')

                            {

                                Newtonsoft.Json.Linq.JObject  departData = procObject.get_Item('data');

                                nameloc = departData.get_item('name').ToString();

                            }

                            if (procName == 'Country')

                            {

                              //  Newtonsoft.Json.Linq.JObject  countryData = procObject.get_Item('data');

                              countryname = procObject.get_item('data').ToString();

                            }

                        }

                        select firstonly VendorInvoiceLineStagingTable

                        where VendorInvoiceLineStagingTable.LineItemID == idloc;


                        if(!VendorInvoiceLineStagingTable)

                        {

                            VendorInvoiceLineStagingTable.ID                    =   ID;

                            VendorInvoiceLineStagingTable.LineItemID            = idloc;

                            VendorInvoiceLineStagingTable.insert();

                        }

                        else

                        {

                            ttsbegin;

                            VendorInvoiceLineStagingTable.selectForUpdate(true);

                            VendorInvoiceLineStagingTable.ID                    =   ID;

                            VendorInvoiceLineStagingTable.LineItemID            =   idloc;

                            VendorInvoiceLineStagingTable.update();

                            ttscommit;

                        }

                    }

                    Info(strFmt('%1,%2,%3, %4', ID, currency, type, Amount));

                    ttscommit;

               // }

            }

            catch

            {

                continue;

            }

        }

        insertList.insertDatabase();

        //info(strFmt("Row count %1", rowCount));

        //ttscommit;

        return ret;

    }

}

------------------------------

Payload ;

        "list": [ {

            "id": "067f50d7-d50a-7695-8000-ebbcb3813dff",

            "type": "invoice",

            "due_date": 1744070400,

            "description": "TEST",

            "shipping_amount": "0.00",

            "invoice_number": "TEST12345",

            "currency": "GBP",

            "created_at": 1744113021,

            "source": null,

            "amount": "60000.00",

            "tax_amount": "10000.00",

            "invoice_date": "2025-04-08",

            "misc_amount": "0.00",

            "vendor": {

                "id": "067bdfc4-0175-7d63-8000-3b42f209646c",

                "type": "vendor",

                "name": "Demo Vendor",

                "external_data": []

            },

            "subsidiary": {

                "id": "0673684d-ff3b-768d-8000-27ba51fb8a12",

                "type": "subsidiary",

                "name": "Trainline.com Ltd"

            },

            "department": {

                "id": "0673684b-c28e-78c3-8000-d27a49198bd2",

                "type": "department",

                "name": "607 Product"

            },

            "location": null,

            "posting_period": null,

            "line_items": [

                {

                    "id": "067f50f5-2934-7c27-8000-fcf78aa2def5",

                    "type": "line_item",

                    "description": "TEST",

                    "amortization_start_date": null,

                    "currency": "USD",

                    "start_date_iso": null,

                    "amortization_end_date": null,

                    "total": "60000",

                    "quantity": "1",

                    "end_date_iso": null,

                    "secondary_line_type": null,

                    "rate": "50000",

                    "end_date": null,

                    "start_date": null,

                    "line_type": 0,

                    "item_account": null,

                    "department": {

                        "id": "0673684b-c28e-78c3-8000-d27a49198bd2",

                        "type": "department",

                        "name": "607 Product"

                    },

                    "matched_purchase_order_line_item": null,

                    "expense_category": null,

                    "location": null,

                    "gl_code": null,

                    "amortization_schedule": {

                        "start_date": null,

                        "end_date": null,

                        "name": null

                    },

                    "attributes": [

                        {

                            "id": "067f50f5-2b20-767a-8000-f5f0371250ac",

                            "config_id": "067d9ce9-91a5-77ad-8000-323089dcc532",

                            "name": "Unit price",

                            "data": "50000",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b21-7fc4-8000-177614b60e17",

                            "config_id": "067d9ce9-860d-7844-8000-a4ee87420651",

                            "name": "Department",

                            "data": {

                                "id": "0673684b-c28e-78c3-8000-d27a49198bd2",

                                "type": "department",

                                "display_name": "607 Product",

                                "name": "607 Product"

                            },

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b23-74c7-8000-35b5ab94c21b",

                            "config_id": "067d9ce9-9018-7848-8000-55627a0fe891",

                            "name": "Line description",

                            "data": "TEST",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b24-7861-8000-da384410126b",

                            "config_id": "067d9ce9-7f40-7978-8000-246020c9fcdb",

                            "name": "Total price",

                            "data": "60000",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b25-7be5-8000-fb9239115cb8",

                            "config_id": "067d9ce9-91a9-7ff0-8000-662f279f4ae5",

                            "name": "Total tax amount",

                            "data": "10000",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b26-7e41-8000-d5a7879a9a77",

                            "config_id": "067d9ce9-a7ef-76a5-8000-0ec3dd2b2599",

                            "name": "Standard tax amount",

                            "data": "10000",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b28-70e1-8000-c9404ff8e8c5",

                            "config_id": "067d9ce9-a7f3-7e28-8000-4b212118e441",

                            "name": "Withholding tax amount",

                            "data": null,

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b29-731a-8000-a03da8d04799",

                            "config_id": "067d9ce9-901f-7d84-8000-a24ceee266ad",

                            "name": "Line type",

                            "data": 0,

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b2a-7834-8000-e81059efc876",

                            "config_id": "067d9ce9-9029-7ba8-8000-10474fa073ab",

                            "name": "Quantity",

                            "data": "1",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2b2b-7b10-8000-3a1cd5003646",

                            "config_id": "067d9ce9-8623-72cf-8000-4991cb4be98c",

                            "name": "Category",

                            "data": null,

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-2c89-7563-8000-7cde80bfdd63",

                            "config_id": "067d9ce9-8627-760e-8000-78257d9dee11",

                            "name": "Account",

                            "data": null,

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-3073-75aa-8000-cfac10f0aaad",

                            "config_id": "067d9ce9-85fc-7fdd-8000-d68e25960133",

                            "name": "Currency",

                            "data": "USD",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f5-3075-7602-8000-78b348f53e4a",

                            "config_id": "067ea7a0-98c6-7343-8000-f0040adaa93b",

                            "name": "Procurement Categories",

                            "data": "0003 - Maint/support software system costs",

                            "integration_data": {

                                "id": "067d14e7-a1fc-785c-8000-fd18784793c1",

                                "type": "lookup_option",

                                "key": "0003",

                                "name": "0003 - Maint/support software system costs"

                            }

                        },

                        {

                            "id": "067f50f5-971d-7a5f-8000-7991435a23aa",

                            "config_id": "067dafa9-006e-7c87-8000-d50222032c1f",

                            "name": "Country",

                            "data": "UK",

                            "integration_data": {

                                "id": "067b369f-7b24-7118-8000-41bcacfd7d84",

                                "type": "lookup_option",

                                "key": null,

                                "name": "UK"

                            }

                        },

                        {

                            "id": "067f50f8-35a0-745a-8000-944821ad7ce3",

                            "config_id": "067e52ad-c1e4-7096-8000-e71d9a609bb1",

                            "name": "Standard Tax Code (Temp)",

                            "data": "UK-STD",

                            "integration_data": {

                                "id": "067eee01-44ee-7f2b-8000-00fdaaba807e",

                                "type": "lookup_option",

                                "key": null,

                                "name": "UK-STD"

                            }

                        },

                        {

                            "id": "067f50f8-d619-7b82-8000-24a4b9295680",

                            "config_id": "067d9ce9-a7f8-7473-8000-0b0ec0423e12",

                            "name": "Standard tax code",

                            "data": "UK-STD*UK Standard 20% (qjl) - 20%",

                            "integration_data": null

                        },

                        {

                            "id": "067f50f8-d61b-7377-8000-8b35865c0c5d",

                            "config_id": "067d9ce9-a7fb-73e2-8000-723a9e5fe4c6",

                            "name": "Withholding tax code",

                            "data": null,

                            "integration_data": null

                        }

                    ]

                }

            ],

            "payment_terms": null,

            "external_id": null,

            "approved_at": 1744113590,

            "attributes": [

                {

                    "id": "067f50d7-d65f-7d79-8000-359c75a2191a",

                    "config_id": "067d9ce9-b34b-7334-8000-be9d9da13fd6",

                    "name": "Invoice Upload Source",

                    "data": 2,

                    "integration_data": null

                },

                {

                    "id": "067f50d7-d8da-7c2a-8000-629cef08782a",

                    "config_id": "067d9ce9-85fb-7723-8000-0ae5f957d3d7",

                    "name": "Currency",

                    "data": "GBP",

                    "integration_data": null

                },

                {

                    "id": "067f50d8-3ed2-7e7c-8000-ea6afd7a1307",

                    "config_id": "067d9ce9-900e-790e-8000-1e2554f3facd",

                    "name": "Vendor",

                    "data": "067bdfc4-0175-7d63-8000-3b42f209646c",

                    "integration_data": null

                },

                {

                    "id": "067f50d8-4393-7711-8000-e55c76069af4",

                    "config_id": "067d9ce9-8609-7dfc-8000-0fade80e750f",

                    "name": "Department",

                    "data": {

                        "id": "0673684b-c28e-78c3-8000-d27a49198bd2",

                        "type": "department",

                        "display_name": "607 Product",

                        "name": "607 Product"

                    },

                    "integration_data": null

                },

                {

                    "id": "067f50da-569e-7577-8000-92cfe6bbcfe9",

                    "config_id": "067d9ce9-b34e-776e-8000-cff1d1e3a2c3",

                    "name": "Invoice number",

                    "data": "TEST12345",

                    "integration_data": null

                },

                {

                    "id": "067f50da-7f22-7f3e-8000-71a8538ce561",

                    "config_id": "067d9ce9-b351-7930-8000-d5766b1047e9",

                    "name": "Invoice date",

                    "data": "2025-04-08 00:00:00",

                    "integration_data": null

                },

                {

                    "id": "067f50da-7f24-77ee-8000-d475a3971fc4",

                    "config_id": "067d9ce9-b357-7968-8000-f264790e6461",

                    "name": "Posting date",

                    "data": "2025-04-08 00:00:00",

                    "integration_data": null

                },

                {

                    "id": "067f50da-e14d-738c-8000-f18d2fe7b1b9",

                    "config_id": "067d9ce9-b354-799a-8000-17f886e2358b",

                    "name": "Due date",

                    "data": "2025-04-08 00:00:00",

                    "integration_data": null

                },

                {

                    "id": "067f50db-7540-7312-8000-f2cc070f2b0b",

                    "config_id": "067d9ce9-b40a-7242-8000-81d10e25eb86",

                    "name": "Pre-tax total",

                    "data": "50000",

                    "integration_data": null

                },

                {

                    "id": "067f50db-7541-7c04-8000-8eb44ab5410f",

                    "config_id": "067d9ce9-7f3a-7c98-8000-df3b05ec5689",

                    "name": "Total amount",

                    "data": "60000",

                    "integration_data": null

                },

                {

                    "id": "067f50db-f555-7c32-8000-99a50bb1a3ee",

                    "config_id": "067d9ce9-b4ad-796c-8000-0aea11da8f0e",

                    "name": "Standard tax amount",

                    "data": "10000",

                    "integration_data": null

                },

                {

                    "id": "067f50db-f557-749c-8000-7577ea801d62",

                    "config_id": "067d9ce9-b410-76c6-8000-58f36c59ea4e",

                    "name": "Tax amount",

                    "data": "10000",

                    "integration_data": null

                },

                {

                    "id": "067f50dc-2eb7-78a6-8000-724d67b8de72",

                    "config_id": "067d9ce9-9015-7a6e-8000-faada2dd2f4e",

                    "name": "Description",

                    "data": "TEST",

                    "integration_data": null

                },

                {

                    "id": "067f50dc-5216-7c18-8000-fa95065b31d1",

                    "config_id": "067d9ce9-861a-7781-8000-3794c6a91d1d",

                    "name": "Subsidiary",

                    "data": {

                        "id": "0673684d-ff3b-768d-8000-27ba51fb8a12",

                        "type": "subsidiary",

                        "display_name": "Trainline.com Ltd",

                        "name": "Trainline.com Ltd"

                    },

                    "integration_data": null

                },

                {

                    "id": "067f50fa-8e1b-716a-8000-c8d6aca8ddd5",

                    "config_id": "067d9ce9-9008-7a47-8000-0f463db5de94",

                    "name": "Requester",

                    "data": {

                        "id": "0673f688-e4d0-78e1-8000-5b8bef8b4a5c",

                        "type": "user",

                        "email": "david.allamby+sbx@thetrainline.com",

                        "employee_number": null,

                        "last_name": "Allamby",

                        "first_name": "David"

                    },

                    "integration_data": null

                }

            ],

            "purchase_orders": [],

            "payment_method": {

                "id": "067eef5b-e59e-7e7a-8000-fc19f911643f",

                "external_data": []

            },

            "payouts": [],

            "updated_at": 1744113591,

            "applied_vendor_credits": [],

            "status": "APPROVED"

}].

Sunday, April 6, 2025

Code to check whether any field has changed or not in d365f&o x++

 

PmfTableHasChanged this method is used to check wheather any field in a table has changed.

If any field value is changed in VendorStagingTable, this if condition satisfies and updates the status as unprocessed

if(pmfTableHasChanged(VendorStagingTable))

{

    VendorStagingTable.PROProcessingStatus = PROProcessingStatus::Unprocessed;

}

Thursday, April 3, 2025

Create ledgerdimesion from OrderAccount in D365f&o x++

LedgerDynamicAccountHelper::getDynamicAccountFromAccountNumber(VendorInvoiceStagingTable.VendAccount,LedgerJournalACType::Vend);