Wednesday, 17 April 2019

Creating movement journal through AIF in D365

class BW_MovementJournalService
{
    [
        SysEntryPointAttribute(true),
        AifCollectionTypeAttribute('_movementJournalContractList',Types::Class,classStr(BW_MovementJournalContract)),
        AifCollectionTypeAttribute('return',Types::String)
    ]
    public str createJournal(List     _movementJournalContractList)
    {
        InventJournalTable              inventJournalTable;
        InventJournalTrans              inventJournalTrans;
        InventJournalNameId             inventJournalName;
        InventDim                       inventDim;
        JournalCheckPost                journalCheckPost;
        Name                            msg;
        BW_MovementJournalContract      movementJournalContract;
        ListEnumerator                  listEnumerator  = _movementJournalContractList.getEnumerator();

        try
        {
            ttsBegin;
            if (!_movementJournalContractList.empty())
            {
                inventJournalTable.clear();
                inventJournalName =  InventJournalName::standardJournalName(InventJournalType::Transfer);
                inventJournalTable.initFromInventJournalName(InventJournalName::find(inventJournalName ));
                inventJournalTable.insert();

                while (listEnumerator.moveNext())
                {
                    movementJournalContract = listEnumerator.current();

                    inventJournalTrans.clear();
                    inventJournalTrans.initFromInventJournalTable(inventJournalTable);
                    inventJournalTrans.TransDate    =   systemDateGet();
                    inventJournalTrans.ItemId       =   movementJournalContract.parmItemId();
                    inventJournalTrans.initFromInventTable(InventTable::find(movementJournalContract.parmItemId()));
                    inventJournalTrans.Qty          =   movementJournalContract.parmQty();
                    inventDim.InventSiteId          =   movementJournalContract.parmInventSiteId();
                    inventDim.InventLocationId      =   movementJournalContract.parmInventLocationId();
                    //inventDim.wMSLocationId = 'BULK-001';
                    inventJournalTrans.InventDimId  =   inventDim::findOrCreate(inventDim).inventDimId;
                    inventJournalTrans.insert();
                }
                msg = strFmt("Movement journal %1 is created", inventJournalTable.JournalId);
                //The below code posts the journal
                //journalCheckPost = InventJournalCheckPost::newPostJournal(inventJournalTable);
                //journalCheckPost.run();
            }
            else
            {
                throw error('Error:Empty contract');
            }
            ttsCommit;
        }
        catch
        {
            msg = infolog.text(infologLine());
            infolog.clear();
        }
        return msg;
    }

}

  • add this service class to service object (add method in service operations which is required)
  • add service object to service Group (auto deploy should be yes in group property)

Sample URL :
https://devaos.cloudax.dynamics.com/soap/services/[ServiceGroupName]?wsdl

Note : We don't find any In bound ports in D365 environment like AX2012

No comments:

Post a Comment