Back to Collection Items
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
DECLARE @iTmp0 int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
DECLARE @http int
-- Use "Chilkat_9_5_0.Http" for versions of Chilkat < 10.0.0
EXEC @hr = sp_OACreate 'Chilkat.Http', @http OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @success int
-- 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>
--
DECLARE @xml int
-- Use "Chilkat_9_5_0.Xml" for versions of Chilkat < 10.0.0
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
EXEC sp_OASetProperty @xml, 'Tag', 'invoice-header'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'invoice-number', 'POSTMAN Collection - 1'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'document-type', 'Invoice'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'supplier|id', 1, 'type', 'integer'
EXEC sp_OAMethod @xml, 'UpdateChildContentInt', NULL, 'supplier|id', 292
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'invoice-lines', 1, 'type', 'array'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'invoice-lines|invoice-line|id', 1, 'type', 'integer'
EXEC sp_OAMethod @xml, 'UpdateChildContentInt', NULL, 'invoice-lines|invoice-line|id', 3056
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'invoice-lines|invoice-line|line-num', 1, 'type', 'integer'
EXEC sp_OAMethod @xml, 'UpdateChildContentInt', NULL, 'invoice-lines|invoice-line|line-num', 1
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'invoice-lines|invoice-line|quantity', 1, 'type', 'decimal'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'invoice-lines|invoice-line|quantity', '5.0'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'invoice-lines|invoice-line|type', 'InvoiceQuantityLine'
-- Adds the "Authorization: Bearer <access_token>" header.
EXEC sp_OASetProperty @http, 'AuthToken', '<access_token>'
DECLARE @sbRequestBody int
-- Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0
EXEC @hr = sp_OACreate 'Chilkat.StringBuilder', @sbRequestBody OUT
EXEC sp_OAMethod @xml, 'GetXmlSb', @success OUT, @sbRequestBody
DECLARE @resp int
EXEC sp_OAMethod @http, 'PTextSb', @resp OUT, 'PUT', 'https://domain.com/invoices/:id?return_object=limited', @sbRequestBody, 'utf-8', 'application/xml', 0, 0
EXEC sp_OAGetProperty @http, 'LastMethodSuccess', @iTmp0 OUT
IF @iTmp0 = 0
BEGIN
EXEC sp_OAGetProperty @http, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @sbRequestBody
RETURN
END
EXEC sp_OAGetProperty @resp, 'StatusCode', @iTmp0 OUT
PRINT @iTmp0
EXEC sp_OAGetProperty @resp, 'BodyStr', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @resp
EXEC @hr = sp_OADestroy @http
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @sbRequestBody
END
GO
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": [
]
}