Search code examples
x++dynamics-ax7

insert fixed freight charges to sales order lines in x++ Dynamics 365 fin & ops


I am new in X++ development, i want to insert freight charges against sales order lines instead of sales order header. I have used SalesOrderLineChargeEntity but it is not saving record instead it is throwing error.

private void addCharges()
{
    SalesOrderLineChargeV2Entity chargeEntity;

    boolean isNew;
    str saleschargecode = 'Freight';
    str saleschargecodedesc = 'Freight Charges';

    if(saleschargecode != '')
    {
        select forupdate chargeEntity  where chargeEntity.SalesOrderNumber=='22676' && chargeEntity.SalesChargeCode == saleschargecode && chargeEntity.ChargeLineNumber == 1;

        if(!chargeEntity)
        {
            isNew = true;
            chargeEntity.clear();
        }
        chargeEntity.ChargeCategory = MarkupCategory::Fixed;
        chargeEntity.SalesChargeCode = saleschargecode;
        chargeEntity.ChargeDescription=saleschargecodedesc;
        chargeEntity.ChargeAccountingCurrencyCode = _ecomIntSalesOrderImportStaging.currency_id;
        chargeEntity.ChargePercentage=0;
        chargeEntity.ExternalChargeAmount=0;
        chargeEntity.FixedChargeAmount= 230;
        chargeEntity.ChargeLineNumber=1;


        chargeEntity.SalesOrderNumber='22676';

        chargeEntity.SalesTaxGroupCode='AvaTax';
        chargeEntity.WillInvoiceProcessingKeepCharge=NoYes::No;
        chargeEntity.IsIntercompanyCharge = NoYes::No;

        if(isNew)
        chargeEntity.insert();
        else
        chargeEntity.update();
    }
}

This is code which i use for insert sales line freight charge but it is throwing error as mention into picture. enter image description here

Need help.

Thanks, Sandy


Solution

  • I am able to resolve issue by assigning InventoryLotId of salesline to which i want to show freight charges, i did below code changes :

    select firstonly salesOrderLine
                    where salesOrderLine.SalesOrderNumber == '22676';
    chargeEntity.SalesOrderLineInventoryLotId = salesOrderLine.InventoryLotId;