Tcl
Tcl
Xero Create New Accounts
Demonstrates how to create a new account in Xero.Note: Requires Chilkat v9.5.0.64 or greater.
Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# Note: Requires Chilkat v9.5.0.64 or greater.
# This requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set rest [new_CkRest]
# Before sending REST API calls, the REST object needs to be
# initialized for OAuth1.
# See Xero 2-Legged OAuth1 Setup for sample code.
# Assuming the REST object's OAuth1 authenticator is setup, and the initial
# connection was made, we may now send REST HTTP requests..
# --------------------------------------------------------------
# To add certain accounts, we need a unique Code that hasn't yet been used.
# Chilkat provided an example to download and save the Accounts data.
# We can load this data into a hashtable to help us find an unused Code.
# See Hash Xero Account Codes to see how this file was created.
set sbAccounts [new_CkStringBuilder]
set success [CkStringBuilder_LoadFile $sbAccounts "qa_cache/xero_accounts_by_code.xml" "utf-8"]
if {!$success} then {
puts "failed to load xero_accounts_by_code.xml"
delete_CkRest $rest
delete_CkStringBuilder $sbAccounts
exit
}
set htAccounts [new_CkHashtable]
CkHashtable_AddFromXmlSb $htAccounts $sbAccounts
# --------------------------------------------------------------
# Build the request XML to create a Xero sales account.
# Find an unused Code...
set code 600
while {[CkHashtable_ContainsIntKey $htAccounts $code] == 1} {
set code [expr $code + 1]
}
set xml [new_CkXml]
CkXml_put_Tag $xml "Account"
CkXml_NewChildInt2 $xml "Code" $code
CkXml_NewChild2 $xml "Name" "Sales - clearance lines"
CkXml_NewChild2 $xml "Type" "SALES"
CkXml_put_EmitCompact $xml 1
# Do not emit the XML declarator. Xero does not accept the XML if it
# has the initial line: <?xml version="1.0" encoding="utf-8"?>
CkXml_put_EmitXmlDecl $xml 0
CkRest_AddQueryParam $rest "xml" [CkXml_getXml $xml]
CkRest_put_VerboseLogging $rest 1
set responseXml [CkRest_fullRequestFormUrlEncoded $rest "PUT" "/api.xro/2.0/Accounts"]
if {[CkRest_get_LastMethodSuccess $rest] != 1} then {
puts [CkRest_lastErrorText $rest]
delete_CkRest $rest
delete_CkStringBuilder $sbAccounts
delete_CkHashtable $htAccounts
delete_CkXml $xml
exit
}
# A 200 response is expected for actual success.
if {[CkRest_get_ResponseStatusCode $rest] != 200} then {
puts "$responseXml"
delete_CkRest $rest
delete_CkStringBuilder $sbAccounts
delete_CkHashtable $htAccounts
delete_CkXml $xml
exit
}
# Examine the XML response
puts "$responseXml"
# A successful XML response is as follows:
# <Response xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
# <Id>dac71f1b-7afb-49a7-8a57-719b91f2088e</Id>
# <Status>OK</Status>
# <ProviderName>ChilkatPrivate</ProviderName>
# <DateTimeUTC>2016-11-10T23:53:43.487791Z</DateTimeUTC>
# <Accounts>
# <Account>
# <AccountID>cb8c94cf-57d4-41ee-b866-4c27632fe838</AccountID>
# <Code>601</Code>
# <Name>Sales - clearance lines</Name>
# <Status>ACTIVE</Status>
# <Type>SALES</Type>
# <TaxType>OUTPUT</TaxType>
# <Class>REVENUE</Class>
# <EnablePaymentsToAccount>false</EnablePaymentsToAccount>
# <ShowInExpenseClaims>false</ShowInExpenseClaims>
# <ReportingCode>REV</ReportingCode>
# <ReportingCodeName>Revenue</ReportingCodeName>
# <UpdatedDateUTC>2016-11-10T23:53:43.94</UpdatedDateUTC>
# </Account>
# </Accounts>
# </Response>
# To access the information:
CkXml_LoadXml $xml $responseXml
puts "AccountID: [CkXml_getChildContent $xml Accounts|Account|AccountID]"
puts "TaxType: [CkXml_getChildContent $xml Accounts|Account|TaxType]"
# ..
delete_CkRest $rest
delete_CkStringBuilder $sbAccounts
delete_CkHashtable $htAccounts
delete_CkXml $xml