Sales order Holds

Sales orders in D365 can have holds, stopping their further processing. He is the data diagram over the tables.


A select statement would look like this, showing all sales orders that have a certain hold code.


        SalesTable salesTable;
        MCRHoldCodeTrans holdCodeTrans;
        MCRHoldCodeTable holdCodeTable;

         
while select SalesId, 
                from salesTable                
                join MCRHoldCode, InventRefId
                    from holdCodeTrans                   
                    where   holdCodeTrans.InventRefId == salesTable.SalesId
//Needs setup parameter
                    &&      holdCodeTrans.MCRHoldCode == 'RX Item'
            
        {
            info(strFmt('%1 %2 %3 %4'
, salesTable.SalesId
, holdCodeTrans.MCRHoldCode));
        }


A more complex view including Retail Attributes on sales order lines, which was the actual task.


        SalesTable salesTable;
        SalesLine salesLine;
        MCRHoldCodeTrans holdCodeTrans;
        MCRHoldCodeTable holdCodeTable;

        RetailSalesTableInstanceValue instanceValue;
        EcoResAttribute attribute;
        EcoResAttributeValue attributeValue;
        EcoResTextValue     textValue;


while select salesId, ItemID, LineNum
    from salesLine           
            join SalesId 
                from salesTable
                where salesTable.SalesId == salesLine.SalesId
                join MCRHoldCode, InventRefId
                    from holdCodeTrans                   
                    where   holdCodeTrans.InventRefId == salesTable.SalesId
//Needs setup parameter
                    &&      holdCodeTrans.MCRHoldCode == 'RX Item'
            join SalesId, RecID
                from instanceValue
                where   instanceValue.SalesId == salesLine.SalesId
                &&      instanceValue.HeaderOrLineNum == 1 //0 is header, 1 is line
                join    InstanceValue, Value, Attribute 
                    from attributeValue
                    where attributeValue.InstanceValue == instanceValue.RecId
                    join textValue
                        where textValue.RecId == attributeValue.Value
                    join RecId, Name
                        from    attribute
                        where   attribute.RecId == attributeValue.Attribute
//Needs setup parameter
                        &&      attribute.Name == 'EncryptedKey'
        {
            i++;
         
            info(strFmt('%1 %2 %3 %4 %5 %6 %7'
, i
, salesLine.SalesId
, salesLine.ItemId
, salesLine.LineNum
, textValue.TextValue
, attribute.Name
, holdCodeTrans.MCRHoldCode));
        }

Comments

Popular posts from this blog

Call a simple Logic app from X++

SysOperationFramework with use of Query

Retail Attributes on sales lines