Loading...
Searching...
No Matches
SalesforceRestClient Module

# SalesforceRestClient Introduction

The SalesforceRestClient module provides an API for calling REST services with Salesforce.com.

To use this module, use `"%requires SalesforceRestClient"` in your code.

All the public symbols in the module are defined in the SalesforceRestClient namespace.

The main classes are:

- SalesforceRestClient: this class provides the REST client API for communuication with Salesforce.com; it also automates authentication and authorization to the target Connected App
- SalesforceRestConnection: provides a REST connection object to a Salesforce.com server (based on the ConnectionProvider module)

Example:
  #!/usr/bin/env qore
  %new-style
  %strict-args
  %require-types
  %enable-all-warnings
  %requires SalesforceRestClient
  hash opts = (
  "client_id": ENV.SALESFORCE_CONSUMER_KEY,
  "client_secret": ENV.SALESFORCE_CONSUMER_SECRET,
  "username": ENV.SALESFORCE_USER,
  "password": ENV.SALESFORCE_PASS,
  );
  SalesforceRestClient rest(opts);
  hash ans = rest.get("sobjects");
  printf("%N\n", ans.body);

The composite API can be used to work with multiple objects at once as in the following example:

Example:
  list<string> sub create_accounts(list account_list) {
  # get list of account numbers for return value
  list<string> account_numbers = map $1.AccountNumber, account_list;
  # add reference IDs for composite REST call
  account_list = map $1 + ("attributes": ("type": "Account", "referenceId": $#.toString())), account_list;
  # create accounts
  hash<auto> info;
  on_error printf("ERROR info: %N", info);
  # maximum 200 accounts can be created; if any errors occur, an exception is thrown
  rc.post("composite/tree/Account", ("records": account_list), \info);
  log(LL_INFO, "created accounts: %y", account_numbers);
  return account_numbers;
  }

Requests can also be made with the Salesforce.com Bulk REST API; the following example shows how a list of accounts can be deleted:

Example:
  #!/usr/bin/env qore
  %new-style
  %strict-args
  %require-types
  %enable-all-warnings
  %requires SalesforceRestClient
  %requires json
  hash<auto> opts = {
  "client_id": ENV.SALESFORCE_CONSUMER_KEY,
  "client_secret": ENV.SALESFORCE_CONSUMER_SECRET,
  "username": ENV.SALESFORCE_USER,
  "password": ENV.SALESFORCE_PASS,
  };
  SalesforceRestClient rest(opts);
  # get list of Account IDs to delete with the REST API with an SOQL query
  list<hash<auto>> al = map ("Id": $1.Id), rc.get("query?q=select Id, Name from Account where Name like 'Account %%'").body.records;
  # create job with the Bulk REST API
  hash<auto> h = rc.bulkJobCreate(BulkJobDelete, "Account", BulkJobJson).jobInfo;
  printf("created job %y\n", h.id);
  # create JSON data
  string data = make_json(al);
  # add batch to job with the Bulk REST API
  rc.bulkJobAddBatch(h.id, data, BulkJobJson, \info);
  # close job with the Bulk REST API
  rc.bulkJobClose(h.id);

See also
  `"sfrest"` in the bin directory for a user-friendly command-line interface to Salesforce.com REST API functionality and a more detailed example of code using this module.

# Release Notes

## SalesforceRestClient v1.5.1

- added support for `username` and `password` connection options for better security handling

## SalesforceRestClient v1.5

- implemented support for a data provider scheme cache and rich option information for connections (issue 4025)

## SalesforceRestClient v1.4

- removed the `SalesforceRestConnection::getConstructorInfo()` and `SalesforceRestConnection::getConstructorInfoImpl()` methods (issue 3696)
- added support for the data provider API

## SalesforceRestClient v1.3

- all connection clases have unified constructor

## SalesforceRestClient v1.2

- added the `SalesforceRestConnection::getConstructorInfo()` method to allow connections to be created dynamically, potentially in another process from a network call (removed in SalesforceRestClient 1.4) (issue 2628)

## SalesforceRestClient v1.1.1

- fixed a bug handling default options including timeouts in SalesforceRestConnection (issue 3321)

## SalesforceRestClient v1.1

- added the SalesforceRestConnection class to support the ConnectionProvider module
- updated for complex types

## SalesforceRestClient v1.0

- the initial version of the SalesforceRestClient module