Friday, November 20, 2015

Create Intercompany Inbound load for outbound loads

The following code gives an idea on how to create inbound load for outbound load. I added this method in the WHSShipConfirm.shipConfirmAllLoads() method. This is not the full code, but tells how I take the outbound load, create an inbound load in the other company and then use the whsInventTransSumDim table to get the sales line and create lines for that.

public void InterCompanyLoadCreate(WHSLoadTable outboundLoadTable)
{
    WHSLoadTable        loadTableInterCompany;

   if (CustTable::find(OutBoundLoadTable.AccountNum).interCompanyTradingRelationActive())
    {
        changeCompany(CustTable::find(OutBoundLoadTable.AccountNum).interCompanyTradingPartnerCompanyID())
        {
        loadTableInterCompany.setLoadId();
        loadTableInterCompany.LoadDirection = WHSLoadDirection::Inbound;
        loadTableInterCompany.initFromLoadTemplateId(OutBoundLoadTable.LoadTemplateId);
        loadTableInterCompany.LoadPaysFreight = NoYes::No;
        loadTableInterCompany.InterCompanyCompanyId = OutBoundLoadTable.dataAreaId; //field created
        loadTableInterCompany.InterCompanyLoadID = OutBoundLoadTable.LoadId;//field created
        loadTableInterCompany.InterCompanyOrder = NoYes::Yes;//field created

        loadTableInterCompany.assignOriginInfo(AddRemove::Add);
        loadTableInterCompany.insert();
       }
    }

    if (loadTableInterCompany)
    {
        
    while select whsloadLine
                where whsloadLine.LoadId == OutBoundLoadTable.LoadId

    {
        select salesLine
            where salesLine.InventTransId == whsloadLine.InventTransId;

        select crossCompany WHSInventTransSumDim
            where WHSInventTransSumDim.InventTransId == salesLine.InterCompanyInventTransId;


        if (WHSInventTransSumDim)
        {
            changeCompany(loadTableInterCompany.dataAreaID)
                    this.parmLoadPlanningWorkbenchServerForm().createTmpLoadLinesPurchLines(false,WHSInventTransSumDim,counter);
            ++counter;
        }
    }
    changeCompany(loadTableInterCompany.dataAreaId)
    {
        this.parmLoadPlanningWorkbenchServerForm().addLoadLines(loadTableInterCompany);
    }
//add code to delete the created inbound load if no lines are created
   }
}

Thursday, November 5, 2015

Compile code at runtime in AX

The following will work if your code is saved in your table as a field and you are compiling the code at run time from the form that uses that field.

void clicked()
{
    XppCompiler xppCompiler = new XppCompiler();
    super();

    YourTable.write();
    if (!xppCompiler.compile(YourTable.displayExpressionAll()))
        error (xppCompiler.errorText());
    else
        info ("@SYS55301");

}