(SOLVED) Dynamics AX 2009 – Receive Purchase Order Line using x++ & .Net Business Connector

17. January 2010

We needed to expose a WCF service so that our logistics vendors could execute a purchase order
line receipt. There were a lot of results returned from a google & yahoo search but a good portion
of them weren’t very specific. After hours of trial and error I came up with the x++ code below
that includes a serial number update through the Inventory Dimension.
public static void receivePurchLine(PackingSlipId _packSlipId, PurchId _purchId,
                                  Qty _qty, ItemId _itemId, LineNum _lineNum, str _inventLocation)
{
    PurchFormLetter purchFormLetter;
    ParmId parmId;
    PurchParmTable purchParmTable;
    PurchParmLine purchParmLine;
    PurchTable purchTable;
    PurchLine purchLine;
    InventDim currentInventDim;
    InventDim updatedInventDim;
    ;

    purchTable = PurchTable::find(_purchId);
    purchFormLetter = PurchFormLetter::construct(DocumentStatus::PackingSlip);
    purchFormLetter.createParmUpdate();
    purchFormLetter.createParmTable(purchParmTable, purchTable);
    purchParmTable.Num = _packSlipId;
    purchParmTable.insert();
    while select purchLine
        where purchLine.PurchId == purchTable.PurchId
    {
        purchParmLine.InitFromPurchLine(purchLine);
        purchParmLine.ParmId = purchParmTable.ParmId;
        purchParmLine.TableRefId = purchParmTable.TableRefId;
        if (purchLine.ItemId == _itemId && purchLine.LineNum == _lineNum)
        {
            currentInventDim = InventDim::find(purchLine.InventDimId);
            if (currentInventDim.RecId)
            {
                updatedInventDim = 
InventDim::findOrCreateOwnCondDispSiteLocation(currentInventDim.configId, currentInventDim.InventSizeId, currentInventDim.InventColorId, currentInventDim.InventSiteId, _inventLocation); if (!updatedInventDim.RecId) { throw error('Unable to find or create destination inventory dimension'); } } purchParmLine.ReceiveNow = _qty; purchParmLine.RemainAfter = purchLine.QtyOrdered - _qty; purchParmLine.InventDimId = updatedInventDim.inventDimId; } else { purchParmLine.ReceiveNow = 0; purchParmLine.RemainAfter = purchLine.QtyOrdered; } purchParmLine.setQty(DocumentStatus::PackingSlip, false, true); purchParmLine.setLineAmount(); purchParmLine.insert(); } purchFormLetter.proforma (false); // proforma ? purchFormLetter.printFormLetter(false); // print ? purchFormLetter.specQty (PurchUpdate::All); // what to update? purchFormLetter.transDate (today()); // update date purchFormLetter.run(); }

 

Microsoft Axapta 2009 , ,

Axapta Business Connector To Import Address and Performance

3. August 2009

So, importing addresses the correct way, according to professionals we have talked to, is to import by using the DirParty and PartyId values to do the inserts. Let me tell you this is DOG slow and performance is horrible. If you bypass and just use the AddrTableId from say the CustTable performance is a huge improvement.

I don’t know what Microsoft (or it’s previous developers were thinking) but the DirParty and DirPartyRelationships need some SERIOUS improvement in performance or just get rid of them all together.

Imports using the Business Connector for any other data other than Addresses FLY!

Microsoft Axapta 2009 , ,