Wednesday 19 December 2012

Create and Post Trade agreement using X++ , AX 2012

Hi , below job will create Trade agreement in AX 2012.


static void idbExecutePricPriceDiscJourSvcJob(Args _args)
{
    // PricePrice Vars
    PricePriceDiscJournalService            PriceDiscSvc;
    PricePriceDiscJournal                   PriceDiscJour;
    PricePriceDiscJournal_PriceDiscAdmTrans PriceDiscJourAdmTrans;
    PricePriceDiscJournal_InventDim         PriceDiscJourDim;
   
    // keys return from create process
    AifEntityKeyList                        keys;
 
    PriceDiscSvc = PricePriceDiscJournalService::construct();
    PriceDiscJour = new PricePriceDiscJournal();
    PriceDiscJourAdmTrans = PriceDiscJour.createPriceDiscAdmTrans().addNew();
    PriceDiscJourDim = PriceDiscJourAdmTrans.createInventDim().addNew();

    // Set PriceDiscJourDim
    PriceDiscJourDim.parminventDimId("your dim id");

    // Set PriceDiscJourAdmTrans
   // PriceDiscJourAdmTrans.parmInventDim().add(PriceDiscJourDim);
    PriceDiscJourAdmTrans.parmItemRelation(InventTable::findByProduct( your product).ItemId);
    PriceDiscJourAdmTrans.parmItemCode(TableGroupAll::Table);
    PriceDiscJourAdmTrans.parmAmount(100.00);
    PriceDiscJourAdmTrans.parmFromDate(today());
    PriceDiscJourAdmTrans.parmAccountCode(TableGroupAll::All);
    PriceDiscJourAdmTrans.parmrelation(PriceType::PriceSales);
    PriceDiscJourAdmTrans.parmCurrency("USD");
   

    // Post PriceDiscJour
    keys = PriceDiscSvc.create(PriceDiscJour);
        }
    }
}



How ever , this will only create trade agreement .
If you want to post automatically, then you neeed to modify the "priceDiscAdmCheckPost" method of class


public void priceDiscAdmCheckPost()
{
    PriceDiscAdmCheckPost   priceDiscAdmCheckPost = new PriceDiscAdmCheckPost(false);//To make sure posting is happen

    if (initNoErrorsInInfolog == infolog.num(Exception::Error))
    {
        priceDiscAdmCheckPost.initJournalNum(priceDiscAdmTable.JournalNum);
        priceDiscAdmCheckPost.run();
    }
}


5 comments:

  1. Thanks for the post. But if you don't clear the infolog, it doesn't post.

    infolog.clear(); jourPost.initJournalNum(priceDiscAdmTrans.JournalNum);
    jourPost.run();

    ReplyDelete
  2. How do you get the journal number just created with this code?

    ReplyDelete
  3. I missed this part of the code to be able to post it from the job.

        // Post PriceDiscJour
        keys = PriceDiscSvc.create(PriceDiscJour);
    journalNum = keys.getEntityKey(1).parmKeyDataMap().lookup(fieldnum(PriceDiscAdmTrans, JournalNum));

    info(strFmt("%1", journalNum));
        priceDiscAdmCheckPost = new PriceDiscAdmCheckPost(false);//To make sure posting is happen
        priceDiscAdmCheckPost.initJournalNum(journalNum);
        priceDiscAdmCheckPost.run();

    ReplyDelete
  4. Thanks this below code is saved a lot time
    journalNum = keys.getEntityKey(1).parmKeyDataMap().lookup(fieldnum(PriceDiscAdmTrans, JournalNum));

    ReplyDelete