locked
Using Node.js and Dynamics API - Can anyone assist in helping to add line items to an already existing quote? RRS feed

  • Question

  • // Using Node.js and Dynamics API - Can anyone assist in helping to add line items to an already existing quote?  

    // My sample code below, with explanation of errors:

    const uuid = require('uuid/v1'); // npm package for creating guids

    let finalQuote = {};
    // this is the quoteid of the quote that I want to update
    finalQuote.quoteid = "5081f070-c35c-11e7-aaf7-bd237d22a9d2"; 
    finalQuote.name = "UPDATED NAME";
    finalQuote["customerid_account@odata.bind"] = "/accounts(475b158c-541c-e511-80d3-3863bb347ba8)";

    // everything above WORKS FINE, but when I try to add quotedetails (aka quote line items), I get errors

    finalQuote.quote_details = [ 
        { 
            quotedetailid: uuid(),
            // the productid that I would like to add to this quote is 06283b55-c913-e711-8118-c4346baccb84
            "productid@odata.bind": "/products(06283b55-c913-e711-8118-c4346baccb84)",
            quantity: 3,
            baseamount: 4.00,
            priceperunit: 4.00,
            extendedamount: 12.00
        }
    ];

    /* The above sample, gives the error "Deep update of navigation properties is not allowed."  I have tried a number of alternative methods (using finalQuote["quote_details@odata.bind"], for instance), but none of them are working. So rather than listing all of them, I would like to simply ask:

    1.) What is the proper way to add a line item to a quote (please provide a code example)?

    2.) I need to make sure that the productid of the item added is associated with an already existing product (product '06283b55-c913-e711-8118-c4346baccb84').

    Tuesday, November 7, 2017 9:13 PM

Answers

  • I figured out a way to do this, but I am still wondering if there is an easier, more practical method.  For now, I will be creating a separate POST request for each line item, and the line item property "quoteid@odata.bind" will associate the newly-created quotedetail with the guid of the quote assigned.  POST to orgUrl + '/api/data/v8.2/quotedetails'.  Anyway, below is the body (lineItem) of the request.


    const uuid = require('uuid/v1'); // npm package for creating guids

    let lineItem = {
       quotedetailid: uuid(),
       // this is the productid of the product you want associated with this lineItem
       "productid@odata.bind": "/products(06283b55-c913-e711-8118-c4346baccb84)",
       // unit of measurement id is required - or else you get error: The unit id is missing
       "uomid@odata.bind": "/uoms(f5765d3c-de7f-4781-b19b-189571b5115c)", 
       quantity: 25,
       baseamount: 50,
       priceperunit: 50,
       description: 'Description here. blah blue blee blah',
       extendedamount: 1250,
       // this is the quoteid of the quote to attach this lineItem to
       "quoteid@odata.bind": '/quotes(5081f070-c35c-11e7-aaf7-bd237d22a9d2)',
    };



    Any and all suggestions for easier/more practical methods are greatly appreciated.  Thank you!!!
    Wednesday, November 8, 2017 11:50 PM