Back to Collection Items
        IncludeFile "CkStringBuilder.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkXml.pb"
Procedure ChilkatExample()
    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.
    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf
    success.i
    ; Use this online tool to generate code from sample XML: Generate Code to Create XML
    ; The following XML is sent in the request body.
    ; <?xml version="1.0" encoding="utf-8"?>
    ; <invoice-header>
    ;     <invoice-number>POSTMAN Collection - 1</invoice-number>
    ;     <document-type>Invoice</document-type>
    ;     <supplier>
    ;         <id type="integer">292</id>
    ;     </supplier>
    ;     <invoice-lines type="array">
    ;         <invoice-line>
    ;             <id type="integer">3056</id>
    ;             <line-num type="integer">1</line-num>
    ;             <quantity type="decimal">5.0</quantity>
    ;             <type>InvoiceQuantityLine</type>
    ;         </invoice-line>
    ;     </invoice-lines>
    ; </invoice-header>
    ; 
    xml.i = CkXml::ckCreate()
    If xml.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf
    CkXml::setCkTag(xml, "invoice-header")
    CkXml::ckUpdateChildContent(xml,"invoice-number","POSTMAN Collection - 1")
    CkXml::ckUpdateChildContent(xml,"document-type","Invoice")
    CkXml::ckUpdateAttrAt(xml,"supplier|id",1,"type","integer")
    CkXml::ckUpdateChildContentInt(xml,"supplier|id",292)
    CkXml::ckUpdateAttrAt(xml,"invoice-lines",1,"type","array")
    CkXml::ckUpdateAttrAt(xml,"invoice-lines|invoice-line|id",1,"type","integer")
    CkXml::ckUpdateChildContentInt(xml,"invoice-lines|invoice-line|id",3056)
    CkXml::ckUpdateAttrAt(xml,"invoice-lines|invoice-line|line-num",1,"type","integer")
    CkXml::ckUpdateChildContentInt(xml,"invoice-lines|invoice-line|line-num",1)
    CkXml::ckUpdateAttrAt(xml,"invoice-lines|invoice-line|quantity",1,"type","decimal")
    CkXml::ckUpdateChildContent(xml,"invoice-lines|invoice-line|quantity","5.0")
    CkXml::ckUpdateChildContent(xml,"invoice-lines|invoice-line|type","InvoiceQuantityLine")
    ; Adds the "Authorization: Bearer <access_token>" header.
    CkHttp::setCkAuthToken(http, "<access_token>")
    sbRequestBody.i = CkStringBuilder::ckCreate()
    If sbRequestBody.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf
    CkXml::ckGetXmlSb(xml,sbRequestBody)
    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf
    success = CkHttp::ckHttpSb(http,"PUT","https://domain.com/invoices/:id?return_object=limited",sbRequestBody,"utf-8","application/xml",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkXml::ckDispose(xml)
        CkStringBuilder::ckDispose(sbRequestBody)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf
    Debug Str(CkHttpResponse::ckStatusCode(resp))
    Debug CkHttpResponse::ckBodyStr(resp)
    CkHttp::ckDispose(http)
    CkXml::ckDispose(xml)
    CkStringBuilder::ckDispose(sbRequestBody)
    CkHttpResponse::ckDispose(resp)
    ProcedureReturn
EndProcedure
        Curl Command
        curl -X PUT
	-H "Authorization: Bearer <access_token>"
	-d '<invoice-header>
    <invoice-number>POSTMAN Collection - 1</invoice-number>
    <document-type>Invoice</document-type>
    <supplier>
        <id type="integer">292</id>
    </supplier>
    <invoice-lines type="array">
        <invoice-line>
            <id type="integer">3056</id>
            <line-num type="integer">1</line-num>
            <quantity type="decimal">5.0</quantity>
            <type>InvoiceQuantityLine</type>
        </invoice-line>
    </invoice-lines>
</invoice-header>'
https://domain.com/invoices/:id?return_object=limited
        Postman Collection Item JSON
        {
  "name": "Add/update a invoice line",
  "protocolProfileBehavior": {
    "disabledSystemHeaders": {}
  },
  "request": {
    "method": "PUT",
    "header": [
    ],
    "body": {
      "mode": "raw",
      "raw": "<invoice-header>\r\n    <invoice-number>POSTMAN Collection - 1</invoice-number>\r\n    <document-type>Invoice</document-type>\r\n    <supplier>\r\n        <id type=\"integer\">292</id>\r\n    </supplier>\r\n    <invoice-lines type=\"array\">\r\n        <invoice-line>\r\n            <id type=\"integer\">3056</id>\r\n            <line-num type=\"integer\">1</line-num>\r\n            <quantity type=\"decimal\">5.0</quantity>\r\n            <type>InvoiceQuantityLine</type>\r\n        </invoice-line>\r\n    </invoice-lines>\r\n</invoice-header>",
      "options": {
        "raw": {
          "language": "xml"
        }
      }
    },
    "url": {
      "raw": "{{URL}}/invoices/:id?return_object=limited",
      "host": [
        "{{URL}}"
      ],
      "path": [
        "invoices",
        ":id"
      ],
      "query": [
        {
          "key": "return_object",
          "value": "limited"
        }
      ],
      "variable": [
        {
          "key": "id",
          "value": "1308"
        }
      ]
    },
    "description": "Updates are not restricted to Approved invoices. So be cautious of the document status before updating.\n\nUse the PUT call to add invoice lines.  Line Num is not sufficient to update an existing line. Include the line ID to update an existing line. If Line ID is not included in the payload, a new line will be created with duplicate line number."
  },
  "response": [
  ]
}