Pass field value from SalesTable to CustTrans in AX 2012 & D365FO



Pass field value from SalesTable to CustTrans in AX 2012 & D365FO


AX 2012 

Following are the steps to pass the value from Sales Table to custtrans.

1) Create a new field (If not already existing)

2) Create the parm method for that field on CustVoucher class

3) Assign value to this parm method in SalesInvoiceJournalPost.postCustVend() method by using the salesTable buffer

4) Add the code for assigning the variable value(or the parm method value) in CustVoucher.initCustVendTrans() method

And now post an invoice and go to custTrans table to check the field value.

Source AX-2012

D365FO

Add the field in SalesTable 
Add the field in CustTrans
Create Extension class of SalesInvoiceJournalPost
Override postCustVend method using coc 

[ExtensionOf(classStr(SalesInvoiceJournalPost))]
final class SLD_SalesInvoiceJournalPost_Extension
{
    /// <summary>
    ///   Performs the customer related postings.
    /// </summary>
    protected void postCustVend()
    {
        CustTrans                   custTrans;
        Name                        ecomMethodOfPayment = this.salesTable.SLDTenderTypeName;        // getting E-Com method of payment from Sales order

        next postCustVend();

        // getting the customer transaction
        custTrans                   = CustTrans::findByVoucher(this.custInvoiceJour.LedgerVoucher);
        custTrans.selectForUpdate(true);

        // updating the customer transaction
        ttsbegin;
        custTrans.SLDTenderTypeName = ecomMethodOfPayment;
        custTrans.update();
        ttscommit;
    }
}

Please feel free to contact me if you are facing any issue during implementation of this blog.


Support Faryal's Cusine


Settle Clearing Entries (Postdated Check) Status



Settle Clearing Entries (Postdated Check) Status



Recently I face the issue that after posting of payment journal status of a post-dated check was not changed from Open to Post. I have lots of R&D in this but no luck,

So I write a batch job where will change the status of custVendPosted check for me.






    LedgerJournalTable _ledgerJournalTable;
    LedgerJournalTrans _ledgerJournalTrans;
    CustVendPDCRegister custPDC;
    Counter             _counter=0;

    while select forUpdate custPDC
            where custPDC.PDCStatus==PostDatedCheckStatus::Open
            && custPDC.MaturityDate > systemDateGet()
          exists join _ledgerJournalTrans
            where custPDC.LedgerJournalTrans==_ledgerJournalTrans.RecId
          exists join _ledgerJournalTable
            where _ledgerJournalTrans.JournalNum==_ledgerJournalTable.JournalNum
            && _ledgerJournalTable.Posted==NoYes::Yes
    {
               _counter++;
               custPDC.PDCStatus=PostDatedCheckStatus::Posted;
               ttsBegin;
               custPDC.update();
               ttsCommit;

    }
        info(strFmt("Total Number %1 of records updated on %2.",_counter,today()));


Support Faryal's Cusine


Virtual Fields Vs Computed Fields

  Virtual Field: A virtual field in D365FO is a field that doesn't have a direct representation in the database. It's a field that y...