Objective-C
Objective-C
Xero Create New Accounts
Demonstrates how to create a new account in Xero.Chilkat Objective-C Downloads
#import <CkoRest.h>
#import <CkoStringBuilder.h>
#import <CkoHashtable.h>
#import <CkoXml.h>
#import <NSString.h>
BOOL success = NO;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
CkoRest *rest = [[CkoRest alloc] init];
// 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.
CkoStringBuilder *sbAccounts = [[CkoStringBuilder alloc] init];
success = [sbAccounts LoadFile: @"qa_cache/xero_accounts_by_code.xml" charset: @"utf-8"];
if (!success) {
NSLog(@"%@",@"failed to load xero_accounts_by_code.xml");
return;
}
CkoHashtable *htAccounts = [[CkoHashtable alloc] init];
[htAccounts AddFromXmlSb: sbAccounts];
// --------------------------------------------------------------
// Build the request XML to create a Xero sales account.
// Find an unused Code...
int code = 600;
while ([htAccounts ContainsIntKey: [NSNumber numberWithInt: code]] == YES) {
code = code + 1;
}
CkoXml *xml = [[CkoXml alloc] init];
xml.Tag = @"Account";
[xml NewChildInt2: @"Code" value: [NSNumber numberWithInt: code]];
[xml NewChild2: @"Name" content: @"Sales - clearance lines"];
[xml NewChild2: @"Type" content: @"SALES"];
xml.EmitCompact = YES;
// 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"?>
xml.EmitXmlDecl = NO;
[rest AddQueryParam: @"xml" value: [xml GetXml]];
rest.VerboseLogging = YES;
NSString *responseXml = [rest FullRequestFormUrlEncoded: @"PUT" uriPath: @"/api.xro/2.0/Accounts"];
if (rest.LastMethodSuccess == NO) {
NSLog(@"%@",rest.LastErrorText);
return;
}
// A 200 response is expected for actual success.
if ([rest.ResponseStatusCode intValue] != 200) {
NSLog(@"%@",responseXml);
return;
}
// Examine the XML response
NSLog(@"%@",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:
[xml LoadXml: responseXml];
NSLog(@"%@%@",@"AccountID: ",[xml GetChildContent: @"Accounts|Account|AccountID"]);
NSLog(@"%@%@",@"TaxType: ",[xml GetChildContent: @"Accounts|Account|TaxType"]);
// ..