Sunday, 28 April 2019

Returning List in AIF Custom services

[
        SysEntryPointAttribute(true),
        AifCollectionTypeAttribute('return',Types::Class,classStr(BW_JournalDetailsContract))
    ]
    public List getJournalDetails(JournalId     _journalId)
    {
        InventJournalTable              inventJournalTable, inventJournalTableUpdate;
        InventJournalTrans              inventJournalTrans;
        List                            detailsList  =   new List(Types::Class);
        str                             valueCentre, subValueCentre, unitCode;
        String50                         msg;
     
        if (_journalId)
        {
            while select inventJournalTable
                join  inventJournalTrans
                where inventJournalTable.JournalId  ==  _journalId
                && inventJournalTrans.JournalId ==  inventJournalTable.JournalId
            {
                if(inventJournalTable.Posted    ==  NoYes::Yes)
                {
                    BW_JournalDetailsContract       journalDetailsContract  = new   BW_JournalDetailsContract();
                    valueCentre                     =   this.getValueCentre(inventJournalTrans.DefaultDimension);
                    subValueCentre                  =   this.getSubValueCentre(inventJournalTrans.DefaultDimension);
                    unitCode                        =   this.getUnitCode(inventJournalTrans.DefaultDimension);
                    msg                             =   strFmt("%1 Journal is Posted", _journalId);

                    journalDetailsContract.parmItemId(inventJournalTrans.ItemId);
                    journalDetailsContract.parmQty(inventJournalTrans.Qty);
                    journalDetailsContract.parmUser(inventJournalTable.PostedUserId);
                    journalDetailsContract.parmTransDateTime(inventJournalTable.PostedDateTime);
                    journalDetailsContract.parmvalueCentre(valueCentre);
                    journalDetailsContract.parmSubValueCentre(subValueCentre);
                    journalDetailsContract.parmunitCode(unitCode);
                    journalDetailsContract.parmMessage(msg);
                    detailsList.addEnd(journalDetailsContract);
                }
                else
                {
                    BW_JournalDetailsContract       journalDetailsContract  = new   BW_JournalDetailsContract();
                    msg = strFmt("%1 Journal is not posted", _journalId);
                    journalDetailsContract.parmMessage(msg);
                    detailsList.addEnd(msg);
                }
            }
        }
        else
        {
            BW_JournalDetailsContract       journalDetailsContract  = new   BW_JournalDetailsContract();
            msg = strFmt("%1 Journal is not available in database", _journalId);
            journalDetailsContract.parmMessage(msg);
            detailsList.addEnd(msg);
        }
        return detailsList;
    }

Wednesday, 17 April 2019

To test service class with multiple list of contract parameters in D365

class BW_TestMovementJournalService
{     
    public static void main(Args _args)
    {
        BW_MovementJournalService       service     =    new BW_MovementJournalService();
        BW_MovementJournalContract      contract    =    new BW_MovementJournalContract();
        str                             msg;
        List                            listValue   = new List(types::Class);     

        contract.parmItemId('022');
        contract.parmQty(10);
        contract.parmInventSiteId('01');

        listValue.addEnd(contract);
        msg =   service.createJournal(listValue);
        info(msg);
    }

}

Comment method decoration (attributes) while testing service class.




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