Search code examples
axaptadynamics-ax-2009

Create a new record in form LedgerJournalTransCustPaym through x++ code


I need to create a reord in LedgerJournalTrans through x++ code.

While debugging I found out that the class LedgerJournalEngine_CustPayment is used to initiate the form as

LedgerJournalEngine_CustPayment  = new LedgerJournalEngine_CustPayment(element)

and later

LedgerJournalEngine.initValue(LedgerJournalTrans);

also after assiging the accountNum the methods executed at the modified() method of datasource field LedgerJournalTrans:AccountNum are element.accountNumModifiedPost(); etc.

While trying to achieve the same through code I am not able to initiate the class LedgerJournalEngine_CustPayment and also the other methods in the form LedgerJournalTransCustPaym that system does.

Pls Help.. Joyce


Solution

  • LedgerJournalEngine* classes are mostly used by the forms to do work and execute code before/after events and datasource actions. What you're trying to do, it would probably just make more sense to complete all of the necessary ledgerJournalTrans fields, then do a .insert(). Here is some code I wrote that will do what you want though using the engine some:

    static void Job81(Args _args)
    {
        LedgerJournalEngine_CustPayment ledgerJournalEngine;
        LedgerJournalTable              ledgerJournalTable;
        LedgerJournalTrans              ledgerJournalTrans;
        NumberSeq                       numberSeq;
        Voucher                         voucher;
        ;
    
        // This just selects the header you are inserting into
        select firstonly ledgerJournalTable where ledgerJournalTable.JournalNum == 'GB 0056226';
    
        if (!ledgerJournalTable)
            throw error ("Unable to find journal table record");
    
    
        ledgerJournalTrans.initValue();
    
        numberSeq = NumberSeq::newGetNumFromCode(ledgerJournalTable.VoucherSeries);
    
        if (numberSeq)
        {
            ledgerJournalTrans.Voucher      = numberSeq.num();
            voucher                         = ledgerJournalTrans.Voucher;
        }
    
        ledgerJournalTrans.JournalNum       = ledgerJournalTable.JournalNum;
        ledgerJournalTrans.TransDate        = SystemDateGet();
        ledgerJournalTrans.AccountType      = LedgerjournalACType::Cust;
        ledgerJournalTrans.AccountNum       = '100003';
    
        ledgerJournalEngine = LedgerJournalEngine::construct(LedgerJournalType::CustPayment);
        ledgerJournalEngine.newJournalActive(ledgerJournalTable);
        ledgerJournalEngine.accountModified(ledgerJournalTrans);
        ledgerJournalTrans.AmountCurCredit  = 10;
        ledgerJournalTrans.OffsetAccountType    = ledgerJournalTable.OffsetAccountType;
        ledgerJournalTrans.OffsetAccount        = ledgerJournalTable.OffsetAccount;
        ledgerJournalTrans.CurrencyCode         = CompanyInfo::standardCurrency();
        ledgerJournalEngine.currencyModified(ledgerJournalTrans);
        ledgerJournalTrans.insert();
    
        if (numberSeq   && ledgerJournalTrans.Voucher   == voucher)
        {
            numberSeq.used();
        }
        else
        {
            if (numberSeq)
                numberSeq.abort();
        }
    
        info("Done");
    }