Salesforce.com interface to directly access Salesforce.com
Dependencies: HTTPClient-SSL MbedJSONValue
Dependents: df-2014-salesforce-hrm-k64f
Fork of SalesforceInterface by
SalesforceInterface Class Reference
Salesforce Interface SalesforceInterface provides a simple C++ API into the REST-based Salesforce.com APIs. More...
#include <SalesforceInterface.h>
Public Member Functions | |
SalesforceInterface (HTTPClient *http, RawSerial *pc=NULL) | |
Default constructor. | |
SalesforceInterface (HTTPClient *http, Logger *logger=NULL) | |
Alternative constructor. | |
virtual | ~SalesforceInterface () |
Default destructor. | |
void | setCredentials (char *username, char *password, char *client_id, char *client_secret) |
Establish salesforce.com credentials. | |
char * | getSalesforceToken (bool fetch=true) |
Get our salesforce.com token. | |
void | resetSalesforceToken () |
Force the interface to re-acquire the OAUTH token and salesforce token. | |
void | setSalesforceAPIVersion (int version) |
Set our salesforce.com API version. | |
void | setSalesforceAPIVersion (char *version) |
Set our salesforce.com API version. | |
char * | getSalesforceAPIVersion () |
Get our salesforce.com API version. | |
char * | query (char *query_str, char *output_buffer, int output_buffer_length) |
Salesforce.com API SOQL QUERY method to invoke ad-hoc SOQL queries into salesforce.com. | |
MbedJSONValue | createRecord (char *object_name, MbedJSONValue &record) |
Salesforce.com API record creation method to create a new record within a salesforce.com object. | |
MbedJSONValue | readRecord (char *object_name, char *record_id, char *record_value=NULL) |
Salesforce.com API record read method to read a record within a salesforce.com object. | |
bool | updateRecord (char *object_name, char *record_id, MbedJSONValue &record) |
Salesforce.com API record update method to update a record within a salesforce.com object. | |
bool | upsertRecord (char *object_name, char *external_id_field_name, char *external_id_field_value, MbedJSONValue &record) |
Salesforce.com API record upsert (update/insert) method to update a record within a salesforce.com object for External IDs. | |
bool | deleteRecord (char *object_name, char *record_id) |
Salesforce.com API record delete method to delete a record within a salesforce.com object. | |
int | httpResponseCode () |
Salesforce.com API invocation HTTP response code to aid in debugging error conditions. | |
MbedJSONValue | getLastError () |
Retrieve the last executed update, upsert, or delete response error detail. |
Detailed Description
Salesforce Interface SalesforceInterface provides a simple C++ API into the REST-based Salesforce.com APIs.
Example Project: http://mbed.org/users/ansond/code/df-2014-salesforce-testharness-k64f/
#include "Definitions.h" // definitions including platform specifics... #include "Logger.h" // include salesforce.com credentials #include "sf_creds.h" // our Serial port #include "BufferedSerial.h" BufferedSerial pc(USBTX, USBRX); // Ethernet #include "EthernetInterface.h" EthernetInterface ethernet; // HTTP #include "HTTPClient.h" HTTPClient http; // Salesforce.com Interface #include "SalesforceInterface.h" // test case persistence char *object_name = NULL; char *account_name = NULL; char *updated_account_name = NULL; char *external_id_field_name = NULL; char *external_id_field_value = NULL; DEFINE_SML_BUFFER(record_id); // *************** Test Cases ************************ void Test_getSalesforceToken(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nGetting Salesforce Token..."); logger->turnLEDPurple(); // get the salesforce token char *id = sf->getSalesforceToken(); if (id != NULL && strlen(id) > 0) logger->log("Saleforce token: %s",id); else logger->log("Unable to get Saleforce token"); logger->turnLEDGreen(); } void Test_query(Logger *logger,SalesforceInterface *sf,char *query_str) { logger->log("\r\n\r\nExecuting test query: %s",query_str); logger->turnLEDPurple(); if (query_str != NULL && strlen(query_str) > 0) { ALLOC_BUFFER(response); char *answer = sf->query(query_str,response,MAX_BUFFER_LENGTH); if (answer != NULL) logger->log("query result: %s",answer); else logger->log("query - NULL result"); } else { logger->log("Unable to perform query as we do not have our salesforce token"); } logger->turnLEDGreen(); } void Test_create(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting create()"); logger->turnLEDPurple(); // create a new record MbedJSONValue new_record; new_record["name"] = account_name; // DEBUG logger->log("Create: new record: %s",new_record.serialize().c_str()); // create... MbedJSONValue response = sf->createRecord(object_name,new_record); // display the result char *result = (char *)response.serialize().c_str(); if (result != NULL && strlen(result) > 0 && strcmp(result,"null") != 0) { // save off the token if we succeeded logger->log("Create: result: %s",result); logger->log("Create: http_code=%d",sf->httpResponseCode()); RESET_SML_BUFFER(record_id); strcpy(record_id,(char *)response["id"].get<std::string>().c_str()); } else { // failure logger->log("Create: FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_read(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting read()"); logger->turnLEDPurple(); // DEBUG logger->log("Read: reading: %s from %s",record_id,object_name); // read... MbedJSONValue response = sf->readRecord(object_name,record_id); // display the result char *result = (char *)response.serialize().c_str(); if (result != NULL && strlen(result) > 0 && strcmp(result,"null") != 0) { // save off the token if we succeeded logger->log("Read: result: %s",result); logger->log("Read: http_code=%d",sf->httpResponseCode()); } else { // failure logger->log("Read: FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_create_external_id(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting create(ExternalID)"); logger->turnLEDPurple(); // create a new record MbedJSONValue new_record; new_record[external_id_field_name] = external_id_field_value; // DEBUG logger->log("create(ExternalID): new record: %s",new_record.serialize().c_str()); // create... MbedJSONValue response = sf->createRecord(object_name,new_record); // display the result char *result = (char *)response.serialize().c_str(); if (result != NULL && strlen(result) > 0 && strcmp(result,"null") != 0) { // save off the token if we succeeded logger->log("create(ExternalID): result: %s",result); logger->log("create(ExternalID): http_code=%d",sf->httpResponseCode()); RESET_SML_BUFFER(record_id); strcpy(record_id,(char *)response["id"].get<std::string>().c_str()); } else { // failure logger->log("create(ExternalID): FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_read_by_external_id_and_value(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting read(externalID)..."); logger->turnLEDPurple(); // DEBUG logger->log("read(externalID): reading: %s from %s with value %s",object_name,external_id_field_name,external_id_field_value); // read (external ID)... MbedJSONValue response = sf->readRecord(object_name,external_id_field_name,external_id_field_value); // display the result char *result = (char *)response.serialize().c_str(); if (result != NULL && strlen(result) > 0 && strcmp(result,"null") != 0) { // save off the token if we succeeded logger->log("read(externalID): result: %s",result); logger->log("read(externalID): http_code=%d",sf->httpResponseCode()); } else { // failure logger->log("read(externalID): FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_update(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting update()"); logger->turnLEDPurple(); // update am existing record - assume "name" is the proper key for the record you wish to update... MbedJSONValue changed_record; changed_record["name"] = updated_account_name; // DEBUG logger->log("Update: updated record: %s",changed_record.serialize().c_str()); // update... bool updated = sf->updateRecord(object_name,record_id,changed_record); // display the result if (updated) { // SUCCESS logger->log("Update: successful! http_code=%d",sf->httpResponseCode()); } else { // failure logger->log("Update: FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_upsert_external_id(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting upsert(ExternalID)"); logger->turnLEDPurple(); // update am existing record - assume "name" is the proper key for the record you wish to update... MbedJSONValue changed_record; changed_record["name"] = updated_account_name; // DEBUG logger->log("upsert(ExternalID): upserted record: %s",changed_record.serialize().c_str()); // Upsert... bool updated = sf->upsertRecord(object_name,external_id_field_name,external_id_field_value,changed_record); // display the result if (updated) { // SUCCESS logger->log("upsert(ExternalID): successful! http_code=%d",sf->httpResponseCode()); } else { // failure logger->log("upsert(ExternalID): FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_delete(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nExecuting delete()"); logger->turnLEDPurple(); // DEBUG logger->log("Delete: deleting: %s from %s",record_id,object_name); // delete... bool deleted = sf->deleteRecord(object_name,record_id); // display the result if (deleted) { // SUCCESS logger->log("Delete: successful! http_code=%d",sf->httpResponseCode()); } else { // failure logger->log("Delete: FAILED http_code=%d",sf->httpResponseCode()); } logger->turnLEDGreen(); } void Test_reset_auth(Logger *logger,SalesforceInterface *sf) { logger->log("\r\n\r\nForcing API to reset OAUTH token and Salesforce Token..."); logger->turnLEDPurple(); sf->resetSalesforceToken(); logger->turnLEDGreen(); } // *************** Test Cases ************************ // Main Task... void mainTask(void const *v) { // create our object instances Logger logger(&pc,NULL); SalesforceInterface *sf = NULL; // announce logger.log("\r\n\r\nARM Salesforce Interface Testharness v%s",APP_VERSION); logger.turnLEDBlue(); // initialize Ethernet logger.log("Initializing Ethernet..."); ethernet.init(); // get a DHCP address and bring the network interface up logger.log("Getting IP Address..."); logger.turnLEDOrange(); if (ethernet.connect() == 0) { // log our IP address (DHCP) logger.log("IP Address: %s",ethernet.getIPAddress()); // allocate the Salesforce.com interface logger.log("Allocating Saleforce.com interface..."); sf = new SalesforceInterface(&http,&logger); // set our Salesforce.com credentials sf->setCredentials(username,password,client_id,client_secret); // *************** BEGIN TEST CASES ***************** // configuration for the test cases object_name = "Account"; // use the account object account_name = "ARM"; // add this record (name) updated_account_name = "ARM Holdings"; // update the existing record's name to this external_id_field_name = "Device__c"; // External ID field name external_id_field_value = "ABC123"; // External ID field value RESET_SML_BUFFER(record_id); // buffer for the record's token // Perform a Create Test_create(&logger,sf); // Perform a Read Test_read(&logger,sf); // Perform a Query Test_query(&logger,sf,"SELECT Id,Name FROM Account LIMIT 5"); // Perform an Update Test_update(&logger,sf); // Perform a second Read to visually confirm the update above... Test_read(&logger,sf); // Perform a Create (External ID) Test_create_external_id(&logger,sf); // Perform an Upsert Test_upsert_external_id(&logger,sf); // Perform a read of the external ID'ed specified by a given value Test_read_by_external_id_and_value(&logger,sf); // force the API to re-acquire the OAUTH token and Salesforce Token Test_reset_auth(&logger,sf); // Perform a Read (should re-acquire the OAUTH token and Salesforce Token) Test_read(&logger,sf); // Perform a Delete Test_delete(&logger,sf); // reset the record token buffer // RESET_SML_BUFFER(record_id); // Perform a Read - should error out Test_read(&logger,sf); // reset the record token buffer RESET_SML_BUFFER(record_id); // *************** BEGIN TEST CASES ***************** // entering main loop logger.log("All tests complete...\r\nExiting..."); logger.turnLEDBlue(); exit(0); } else { logger.log("No Network... Exiting..."); logger.turnLEDRed(); exit(1); } } // main entry int main() { Thread workerTask(mainTask, NULL, osPriorityNormal, STACK_SIZE); while (true) { Thread::wait(10*WAIT_TIME_MS); } }
Definition at line 450 of file SalesforceInterface.h.
Constructor & Destructor Documentation
SalesforceInterface | ( | HTTPClient * | http, |
RawSerial * | pc = NULL |
||
) |
Default constructor.
- Parameters:
-
http HTTPClient instance pc optional RawSerial for debugging output. If NULL, there will be no debugging output
Definition at line 51 of file SalesforceInterface.cpp.
SalesforceInterface | ( | HTTPClient * | http, |
Logger * | logger = NULL |
||
) |
Alternative constructor.
- Parameters:
-
http HTTPClient instance logger optional Logger instance (See Logger for more info). If NULL, there will be no debugging output
Definition at line 63 of file SalesforceInterface.cpp.
~SalesforceInterface | ( | ) | [virtual] |
Default destructor.
Definition at line 87 of file SalesforceInterface.cpp.
Member Function Documentation
MbedJSONValue createRecord | ( | char * | object_name, |
MbedJSONValue & | record | ||
) |
Salesforce.com API record creation method to create a new record within a salesforce.com object.
- Parameters:
-
object_name name of the salesforce.com object to create the record in (i.e. "Account") record MbedJSONValue json structure that the new record will be comprised with
- Returns:
- MbedJSONValue structure with the results of the creation operation in JSON format
Definition at line 319 of file SalesforceInterface.cpp.
bool deleteRecord | ( | char * | object_name, |
char * | record_id | ||
) |
Salesforce.com API record delete method to delete a record within a salesforce.com object.
- Parameters:
-
object_name name of the salesforce.com object to delete the record in (i.e. "Account") record_id salesforce.com id of the record instance to delete
- Returns:
- true - success, false - failure
Definition at line 349 of file SalesforceInterface.cpp.
MbedJSONValue getLastError | ( | ) |
Retrieve the last executed update, upsert, or delete response error detail.
- Returns:
- http response code from last update, upsert, or delete operation
Definition at line 355 of file SalesforceInterface.cpp.
char * getSalesforceAPIVersion | ( | ) |
Get our salesforce.com API version.
- Returns:
- string containing our salesforce.com API version or NULL if in error
Definition at line 123 of file SalesforceInterface.cpp.
char * getSalesforceToken | ( | bool | fetch = true ) |
Get our salesforce.com token.
- Parameters:
-
fetch boolean that will direct the interface to fetch the token if not already done (default = true)
- Returns:
- our salesforce token in JSON format or NULL if in error
Definition at line 262 of file SalesforceInterface.cpp.
int httpResponseCode | ( | ) |
Salesforce.com API invocation HTTP response code to aid in debugging error conditions.
- Returns:
- http response code
Definition at line 120 of file SalesforceInterface.cpp.
char * query | ( | char * | query_str, |
char * | output_buffer, | ||
int | output_buffer_length | ||
) |
Salesforce.com API SOQL QUERY method to invoke ad-hoc SOQL queries into salesforce.com.
- Parameters:
-
query_str character string with the SOQL query to invoke output_buffer allocated result buffer to use output_buffer_length allocated result buffer length
- Returns:
- result of the SOQL query in JSON format or NULL if in error
Definition at line 281 of file SalesforceInterface.cpp.
MbedJSONValue readRecord | ( | char * | object_name, |
char * | record_id, | ||
char * | record_value = NULL |
||
) |
Salesforce.com API record read method to read a record within a salesforce.com object.
- Parameters:
-
object_name name of the salesforce.com object to read the record in (i.e. "Account") record_id salesforce.com id of the record instance to read record_value salesforce.com id value of the record instance to read (for external ID usage - default is NULL for non-external IDs)
- Returns:
- MbedJSONValue structure with the results of the read operation in JSON format
Definition at line 328 of file SalesforceInterface.cpp.
void resetSalesforceToken | ( | ) |
Force the interface to re-acquire the OAUTH token and salesforce token.
Definition at line 169 of file SalesforceInterface.cpp.
void setCredentials | ( | char * | username, |
char * | password, | ||
char * | client_id, | ||
char * | client_secret | ||
) |
Establish salesforce.com credentials.
- Parameters:
-
username salesforce.com account user name password salesforce.com account password. The password must be of the form [password][security token] client_id salesforce.com connected application "customer key" value client_secret salesforce.com connected application client secret value
Definition at line 92 of file SalesforceInterface.cpp.
void setSalesforceAPIVersion | ( | char * | version ) |
Set our salesforce.com API version.
- Parameters:
-
version string value (format "X.Y")
Definition at line 122 of file SalesforceInterface.cpp.
void setSalesforceAPIVersion | ( | int | version ) |
Set our salesforce.com API version.
- Parameters:
-
version integer value (positive)
Definition at line 121 of file SalesforceInterface.cpp.
bool updateRecord | ( | char * | object_name, |
char * | record_id, | ||
MbedJSONValue & | record | ||
) |
Salesforce.com API record update method to update a record within a salesforce.com object.
- Parameters:
-
object_name name of the salesforce.com object to update the record in (i.e. "Account") record_id salesforce.com id of the record instance to read record MbedJSONValue instance with updated data for the record
- Returns:
- true - success, false - failure
Definition at line 337 of file SalesforceInterface.cpp.
bool upsertRecord | ( | char * | object_name, |
char * | external_id_field_name, | ||
char * | external_id_field_value, | ||
MbedJSONValue & | record | ||
) |
Salesforce.com API record upsert (update/insert) method to update a record within a salesforce.com object for External IDs.
- Parameters:
-
object_name name of the salesforce.com External object to upsert the record in (i.e. "FooBar_c") external_id_field_name salesforce.com id of the External record instance to upsert external_id_field_value salesforce.com id value of the External record instance to upsert record MbedJSONValue instance with updated data for the record
- Returns:
- true - success, false - failure
Definition at line 343 of file SalesforceInterface.cpp.
Generated on Fri Jul 15 2022 19:47:27 by 1.7.2