Search code examples
microsoft-dynamicsdynamics-gpdynamics-gp-api

How to change UnitPrice via Dynamics GP API


I would like to change UnitPrice when create an order via Dynamics GP API,

So I run next code:

// Create a sales order object
        var salesOrder = new SalesOrder();

        // Create a sales document type key for the sales order
        var salesOrderType = new SalesDocumentTypeKey();
        salesOrderType.Type = SalesDocumentType.Order;

        // Populate the document type key of the sales order object
        salesOrder.DocumentTypeKey = salesOrderType;

        // Create a customer key
        var customerKey = new CustomerKey();
        customerKey.Id = customerSummary[0].Key.Id;

        // Set the customer key property of the sales order object
        salesOrder.CustomerKey = customerKey;

        // Create a batch key
        var batchKey = new BatchKey();
        batchKey.Id = "01-INBOUND";

        // Set the batch key property of the sales order object
        salesOrder.BatchKey = batchKey;

        // Create a sales order line to specify the ordered item
        var salesOrderLine = new SalesOrderLine();

        // Create an item key
        var orderedItem = new ItemKey();
        orderedItem.Id = "AA1111";

        // Set the item key property of the sales order line object
        salesOrderLine.ItemKey = orderedItem;

        // Create a sales order quantity object
        var orderedAmount = new Quantity();
        orderedAmount.Value = 1;

        // Set the quantity of the sales order line object
        salesOrderLine.Quantity = orderedAmount;


        // THIS DOESN'T WORK
        salesOrderLine.UnitPrice = new MoneyAmount { Value = 1.11m, Currency = "USD"  };

        // Discount works ok
        // salesOrderLine.Discount = new MoneyPercentChoice { Item = new MoneyAmount { Value = 1.25m } };

        // Create an array of sales order lines
        // Initialize the array with sales order line object
        SalesOrderLine[] orders = { salesOrderLine };

        // Add the sales order line array to the sales order
        salesOrder.Lines = orders;

        // Get the create policy for the sales order object
        var salesOrderCreatePolicy = dynamicsGP.GetPolicyByOperation("CreateSalesOrder", context);

        // Create the sales order
        dynamicsGP.CreateSalesOrder(salesOrder, context, salesOrderCreatePolicy);

But line to change UnitPrice doesn't work.

        salesOrderLine.UnitPrice = new MoneyAmount { Value = 1.11m, Currency = "USD"  };

What I'm doing wrong? Appreciate any help.

Thank you!


Solution

  • Found solution:

    In Dynamics GP Web Service Policy Configuration for Update Sales Invoice Policy, you need to update the “Calculate Unit Price Behavior” to “Do Not Calculate”.

    Also, make Sure that you have selected the right Company and assigned proper roles for the policy. The role should not be Default.

    Source: https://www.cloudfronts.com/dynamics-gp-sales-invoice-unit-price-always-0/