Salesforce to QuickBooks Online Integration via Apex

[dipi_table_of_content heading_tags=”off|on|on|on|on|on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/dipi_table_of_content]

Overview of Integration

If you’re running businesses using Salesforce and QuickBooks Online, you might want to integrate the two systems. The guide below will help you integrate Salesforce with QuickBooks, enabling you to create or read QuickBooks customers and invoices with ease.

To integrate QuickBooks with Salesforce, you’ll need admin access to QuickBooks Online (this will work for all versions of QuickBooks Online) and admin access to Salesforce (Enterprise Edition or higher, or a Dev/Sandbox org for testing). You’ll also need some experience with Apex code. If you lack experience with Apex, you may want to consider using a no-code integration with Zapier or use Breadwinner’s no-code integration between Salesforce and QuickBooks.

Remote Site Settings

When making an Apex callout to an external website, it is important to register the target website within the Remote Site Settings page. This is because Salesforce has strict limitations on calls to unregistered network addresses, and not registering the target site will result in the callout failing.

Please follow the steps below to create two remote site settings in Salesforce before making calls to QuickBooks Endpoints:

  1. Go to Setup.
  2. In the Quick Find search bar, type “Remote Site.”
  3. Click on “Remote Site Settings.”
  4. Create the following two remote site settings, each serving a specific purpose.
    1. For authentication and obtaining the Access Token,
      URL: https://oauth.platform.intuit.com
    2. For retrieving the Data from QuickBooks,
      If connecting to a QuickBooks Online Sandbox: https://sandbox-quickbooks.api.intuit.com (make sure you fully log into to your Sandbox environment as a user, as final setup of the Sandbox environment is performed upon the first login)
      If connecting to a QuickBooks Online Production environment: https://quickbooks.api.intuit.com

 

Connecting to QuickBooks Online using OAuth 2.0

Create App

Upon logging into https://developer.intuit.com/, navigate to “Dashboard” and create a new App.

To create the App, click on the button “Create an app” –> Select QuickBooks Online and Payments –> Name your App “My App” –> select the scopes required –> click on “Create app.”

QBO Create App

 

 

 

 

 

Select QuickBooks Online And Payments

 

 

 

 

 

QBO App Name and Scope

Create a Custom Object in Salesforce

To ensure we can utilize tokens such as Client ID, Client Secret, Access Token, and Refresh Token in future requests or callouts to QuickBooks Online, it’s necessary to store them in Salesforce. This involves creating a Custom Object with the following details:

Custom Object

  • Label: QuickBooks Details
  • API Name: QuickBooks_Details__c

Custom Fields

Label API Name Data Type
Access Token Access_Token__c Long Text Area(4096)
Access Token Expiry Access_Token_Expiry__c Number(18, 0)
Client Id Client_Id__c Text(255)
Client Secret Client_Secret__c Text(255)
RealmId RealmId__c Text(255)
Refresh Token Refresh_Token__c Long Text Area(512)
Refresh Token Expiry Refresh_Token_Expiry__c Number(18, 0)

Note: Ideally, the preference would be to utilize Custom Settings for storing Tokens rather than Custom Objects. However, we have opted to use Custom Object due to the limitation of a maximum Access Token length of 4096 characters from QuickBooks, and Custom Settings cannotn handle fields of that length.

Get Client Tokens

After creating the App, go to Development Settings in the dashboard and navigate to Keys & Credentials to obtain the “Client ID” and “Client Secret”.

Your unique ID and Secret will be similar to the example below. Please note that your ID and Secret will differ from the values provided.

Client Id: ABsFR*******************************************gjLX
Client Secret: PRJP********************************************pA2To

Add Redirect URI

To connect Salesforce to QuickBooks, QuickBooks will send a code and realmId as a URL Parameter to a specific web address that we provide in the Redirect URI. The code is then used to get Access Tokens.

To do this, we need to create a VF page called “qboOauthRedirect” (the code will be added in later sections).
Once this page is created, we must add the URL “https://<your-domain>/apex/qboOAuthRedirect” as a Redirect URI in QuickBooks for the App created earlier.

QBO Redirect Url

Authorize QuickBooks Online and Obtain Tokens

In Salesforce, create a new record in the previously created object. Save the Client ID and Client Secret obtained earlier and integrate the provided code by developing the corresponding VF Page and Apex Class.

[et_pb_dmb_code_snippet title=”qboOauthRedirect.vfp” code=”PGFwZXg6cGFnZSBjb250cm9sbGVyPSJxYm9PQXV0aEhhbmRsZXJDbGFzcyIgYWN0aW9uPSJ7IWdldE9BdXRoVG9rZW5zfSIgPgogICAgPGFwZXg6Zm9ybT4KICAgICAgICA8YXBleDpwYWdlTWVzc2FnZSByZW5kZXJlZD0ieyFpc0F1dGhvcml6YXRpb25TdWNjZXNzfSIgc3VtbWFyeT0iQXV0aG9yaXphdGlvbiBpcyBTdWNjZXNmdWxsIiBzZXZlcml0eT0iY29uZmlybSIgc3RyZW5ndGg9IjMiLz4KICAgICAgICA8YXBleDpvdXRwdXRQYW5lbCByZW5kZXJlZD0ieyFzaG93T0F1dGhCdXR0b259Ij4KICAgICAgICAgICAgPGFwZXg6Y29tbWFuZEJ1dHRvbiB2YWx1ZT0iQXV0aG9yaXplIFF1aWNrQm9va3MgT25saW5lIiBvbmNsaWNrPSJ3aW5kb3cub3BlbigneyFidXR0b25Vcmx9JywgJ19ibGFuayAnKTt3aW5kb3cuY2xvc2UoKTsiLz4KICAgICAgICA8L2FwZXg6b3V0cHV0UGFuZWw+CiAgICA8L2FwZXg6Zm9ybT4KPC9hcGV4OnBhZ2U+” admin_label=”OAuth VF Page Code Snippet” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet][et_pb_dmb_code_snippet title=”qboOAuthHandlerClass.cls” code=”cHVibGljIGNsYXNzIHFib09BdXRoSGFuZGxlckNsYXNzIHsKICAgIAogICAgcHVibGljIFN0cmluZyBidXR0b25Vcmwge2dldDsgcHJpdmF0ZSBzZXQ7fQogICAgcHVibGljIGJvb2xlYW4gc2hvd09BdXRoQnV0dG9uIHtnZXQ7IHByaXZhdGUgc2V0O30KICAgIHB1YmxpYyBib29sZWFuIGlzQXV0aG9yaXphdGlvblN1Y2Nlc3Mge2dldDsgcHJpdmF0ZSBzZXQ7fQogICAgcHVibGljIFN0cmluZyBjb2RlOwogICAgcHVibGljIFN0cmluZyByZWFsbUlkOwogICAgUXVpY2tCb29rc19EZXRhaWxzX19jIHFiUmVjOwogICAgRklOQUwgU3RyaW5nIHJlZGlyZWN0X3VyaSA9ICdodHRwczovL3BlcnNvYW5sMy1kZXYtZWQtLWMuZGV2ZWxvcC52Zi5mb3JjZS5jb20vYXBleC9xYm9PQXV0aFJlZGlyZWN0JzsgLy8gUmVwbGFjZSB0aGlzIHdpdGggeW91ciBPcmcgYmFzZWQgRG9tYWluIGFuZCBWaXN1YWxmb3JjZSBQYWdlIG5hbWUKICAgIEZJTkFMIFN0cmluZyBiYXNlX3VybCA9ICdodHRwczovL2FwcGNlbnRlci5pbnR1aXQuY29tL2Nvbm5lY3Qvb2F1dGgyP3Jlc3BvbnNlX3R5cGU9Y29kZSZzY29wZT1jb20uaW50dWl0LnF1aWNrYm9va3MuYWNjb3VudGluZyZzdGF0ZT10ZXN0U3RhdGVTZWN1cml0eSc7CiAgICAKICAgIHB1YmxpYyBxYm9PQXV0aEhhbmRsZXJDbGFzcygpewogICAgICAgIHNob3dPQXV0aEJ1dHRvbiA9IGZhbHNlOwogICAgICAgIGlzQXV0aG9yaXphdGlvblN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICBxYlJlYyA9IFtTRUxFQ1QgSWQsIENsaWVudF9JZF9fYywgQ2xpZW50X1NlY3JldF9fYyBGUk9NIFF1aWNrQm9va3NfRGV0YWlsc19fYyBMSU1JVCAxXTsKICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHVybFBhcmFtcyA9IEFwZXhQYWdlcy5jdXJyZW50UGFnZSgpLmdldFBhcmFtZXRlcnMoKTsKICAgICAgICBpZih1cmxQYXJhbXMuY29udGFpbnNLZXkoJ2NvZGUnKSl7CiAgICAgICAgICAgIGNvZGUgPSB1cmxQYXJhbXMuZ2V0KCdjb2RlJyk7CiAgICAgICAgICAgIHJlYWxtSWQgPSB1cmxQYXJhbXMuZ2V0KCdyZWFsbUlkJyk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHNob3dPQXV0aEJ1dHRvbiA9IHRydWU7CiAgICAgICAgICAgIGJ1dHRvblVybCA9IGJhc2VfdXJsICsgJyZjbGllbnRfaWQ9JytxYlJlYy5DbGllbnRfSWRfX2MgKyAnJnJlZGlyZWN0X3VyaT0nK3JlZGlyZWN0X3VyaTsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHB1YmxpYyBwYWdlUmVmZXJlbmNlIGdldE9BdXRoVG9rZW5zKCl7CiAgICAgICAgaWYoU3RyaW5nLmlzTm90QmxhbmsoY29kZSkgJiYgU3RyaW5nLmlzTm90QmxhbmsocmVhbG1JZCkpewogICAgICAgICAgICBCbG9iIGhlYWRlclZhbHVlID0gQmxvYi52YWx1ZU9mKHFiUmVjLkNsaWVudF9JZF9fYyArICc6JyArIHFiUmVjLkNsaWVudF9TZWNyZXRfX2MpOwogICAgICAgICAgICBTdHJpbmcgYXV0aG9yaXphdGlvbkhlYWRlciA9ICdCYXNpYyAnICsgRW5jb2RpbmdVdGlsLmJhc2U2NEVuY29kZShoZWFkZXJWYWx1ZSk7CiAgICAgICAgICAgIFN0cmluZyBwYXlsb2FkID0gJ2dyYW50X3R5cGU9YXV0aG9yaXphdGlvbl9jb2RlJmNvZGU9Jytjb2RlKycmcmVkaXJlY3RfdXJpPScrcmVkaXJlY3RfdXJpOwogICAgICAgICAgICAKICAgICAgICAgICAgaHR0cFJlcXVlc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCk7CiAgICAgICAgICAgIHJlcS5zZXRFbmRwb2ludCgnaHR0cHM6Ly9vYXV0aC5wbGF0Zm9ybS5pbnR1aXQuY29tL29hdXRoMi92MS90b2tlbnMvYmVhcmVyJyk7CiAgICAgICAgICAgIHJlcS5zZXRNZXRob2QoJ1BPU1QnKTsKICAgICAgICAgICAgcmVxLnNldEhlYWRlcignQXV0aG9yaXphdGlvbicsIGF1dGhvcml6YXRpb25IZWFkZXIpOwogICAgICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7CiAgICAgICAgICAgIHJlcS5zZXRIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7CiAgICAgICAgICAgIHJlcS5zZXRCb2R5KHBheWxvYWQpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXEgOjo6ICcrcmVxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIEh0dHAgaHR0cCA9IG5ldyBIdHRwKCk7CiAgICAgICAgICAgIEhUVFBSZXNwb25zZSByZXMgPSBodHRwLnNlbmQocmVxKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmKHJlcy5nZXRTdGF0dXNDb2RlKCkgPT0gMjAwICYmIHJlcy5nZXRCb2R5KCkgIT0gTlVMTCl7CiAgICAgICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VCb2R5ID0gcmVzLmdldEJvZHkoKTsKICAgICAgICAgICAgICAgIGlzQXV0aG9yaXphdGlvblN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgICAgdXBkYXRlVG9rZW5zaW5TYWxlc2ZvcmNlKHJlc3BvbnNlQm9keSwgcmVhbG1JZCwgcWJSZWMuSWQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB1cGRhdGVUb2tlbnNpblNhbGVzZm9yY2UoU3RyaW5nIHJlc3BvbnNlQm9keSwgU3RyaW5nIHJlYWxtSWQsIElkIHFiUmVjSWQpewogICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gcmVzcE1hcCA9IChNYXA8U3RyaW5nLCBPYmplY3Q+KUpTT04uZGVzZXJpYWxpemVVbnR5cGVkKHJlc3BvbnNlQm9keSk7CiAgICAgICAgUXVpY2tCb29rc19EZXRhaWxzX19jIHFiUmVjID0gbmV3IFF1aWNrQm9va3NfRGV0YWlsc19fYyhJZCA9IHFiUmVjSWQpOwogICAgICAgIGlmKHJlc3BNYXAuY29udGFpbnNLZXkoJ2FjY2Vzc190b2tlbicpKSBxYlJlYy5BY2Nlc3NfVG9rZW5fX2MgPSBTdHJpbmcudmFsdWVPZihyZXNwTWFwLmdldCgnYWNjZXNzX3Rva2VuJykpOwogICAgICAgIGlmKHJlc3BNYXAuY29udGFpbnNLZXkoJ3JlZnJlc2hfdG9rZW4nKSkgcWJSZWMuUmVmcmVzaF9Ub2tlbl9fYyAgICA9IFN0cmluZy52YWx1ZU9mKHJlc3BNYXAuZ2V0KCdyZWZyZXNoX3Rva2VuJykpOwogICAgICAgIGlmKHJlc3BNYXAuY29udGFpbnNLZXkoJ2V4cGlyZXNfaW4nKSkgcWJSZWMuQWNjZXNzX1Rva2VuX0V4cGlyeV9fYyAgPSBJbnRlZ2VyLnZhbHVlT2YocmVzcE1hcC5nZXQoJ2V4cGlyZXNfaW4nKSk7CiAgICAgICAgaWYocmVzcE1hcC5jb250YWluc0tleSgneF9yZWZyZXNoX3Rva2VuX2V4cGlyZXNfaW4nKSkgcWJSZWMuUmVmcmVzaF9Ub2tlbl9FeHBpcnlfX2MgID0gSW50ZWdlci52YWx1ZU9mKHJlc3BNYXAuZ2V0KCd4X3JlZnJlc2hfdG9rZW5fZXhwaXJlc19pbicpKTsKICAgICAgICBpZihTdHJpbmcuaXNOb3RCbGFuayhyZWFsbUlkKSkgcWJSZWMuUmVhbG1JZF9fYyA9IHJlYWxtSWQ7CiAgICAgICAgCiAgICAgICAgdXBkYXRlIHFiUmVjOwogICAgfSAKfQ==” admin_label=”OAuth Apex Class Code Snippet” language=”java” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet]

QuickBooks Customers

 

Read QuickBooks Customers

Here is the sample code that can be used to read all the QuickBooks Customers from Salesforce.

Note: If you wish to get a single QuickBooks Customer, add the WHERE clause to the Query like below

select * from Customer where id = ’29’

[et_pb_dmb_code_snippet title=”qboCustomersClass.cls” code=”cHVibGljIGNsYXNzIHFib0N1c3RvbWVyc0NsYXNzIHsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc3RyaW5nIEJBU0VfVVJMID0gJ2h0dHBzOi8vc2FuZGJveC1xdWlja2Jvb2tzLmFwaS5pbnR1aXQuY29tL3YzL2NvbXBhbnkvJzsKICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIGdldFFCT0N1c3RvbWVycygpewogICAgICAgIFF1aWNrQm9va3NfRGV0YWlsc19fYyBxYlJlYyA9IFtTRUxFQ1QgSWQsIFJlYWxtSWRfX2MsIEFjY2Vzc19Ub2tlbl9fYyBGUk9NIFF1aWNrQm9va3NfRGV0YWlsc19fYyBMSU1JVCAxXTsKICAgICAgICAKICAgICAgICBTdHJpbmcgcmVxVVJMID0gQkFTRV9VUkwrcWJSZWMuUmVhbG1JZF9fYysnL3F1ZXJ5P3F1ZXJ5PScrRW5jb2RpbmdVdGlsLnVybEVuY29kZSgnc2VsZWN0ICogZnJvbSBDdXN0b21lcicsICdVVEYtOCcpKycmbWlub3J2ZXJzaW9uPTY5JzsKICAgICAgICAKICAgICAgICBodHRwUmVxdWVzdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXEuc2V0RW5kcG9pbnQocmVxVVJMKTsKICAgICAgICByZXEuc2V0TWV0aG9kKCdHRVQnKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnK3FiUmVjLkFjY2Vzc19Ub2tlbl9fYyk7CiAgICAgICAgcmVxLnNldEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKICAgICAgICAKICAgICAgICBIdHRwIGh0dHAgPSBuZXcgSHR0cCgpOwogICAgICAgIEhUVFBSZXNwb25zZSByZXMgPSBodHRwLnNlbmQocmVxKTsKICAgICAgICBpZihyZXMuZ2V0U3RhdHVzQ29kZSgpID09IDIwMCAmJiByZXMuZ2V0Qm9keSgpICE9IE5VTEwpewogICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VCb2R5ID0gcmVzLmdldEJvZHkoKTsKICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXNwb25zZUJvZHkgOjo6ICcrcmVzcG9uc2VCb2R5KTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYocmVzLmdldFN0YXR1c0NvZGUoKSA9PSA0MDEpewogICAgICAgICAgICAgICAgLy8gVG9rZW4gRXhwaXJlZCAtIFBsZWFzZSByZWZyZXNoIHRoZSB0b2tlbgogICAgICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXMuZ2V0Qm9keSgpIDo6OiAnK3Jlcy5nZXRCb2R5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9″ admin_label=”Code Snippet – Customer Read” language=”java” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet]

Create a QuickBooks Customer

Here is the sample code that can be used to create a QuickBooks Customer from Salesforce.

[et_pb_dmb_code_snippet title=”qboCustomersClass.cls” code=”cHVibGljIGNsYXNzIHFib0N1c3RvbWVyc0NsYXNzIHsKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgc3RyaW5nIEJBU0VfVVJMID0gJ2h0dHBzOi8vc2FuZGJveC1xdWlja2Jvb2tzLmFwaS5pbnR1aXQuY29tL3YzL2NvbXBhbnkvJzsKICAgIAogICAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZVFCT0N1c3RvbWVyKCl7CgkJCQlRdWlja0Jvb2tzX0RldGFpbHNfX2MgcWJSZWMgPSBbU0VMRUNUIElkLCBSZWFsbUlkX19jLCBBY2Nlc3NfVG9rZW5fX2MgRlJPTSBRdWlja0Jvb2tzX0RldGFpbHNfX2MgTElNSVQgMV07CiAgICAgICAgCiAgICAgICAgU3RyaW5nIHJlcVVSTCA9IEJBU0VfVVJMK3FiUmVjLlJlYWxtSWRfX2MrJy9jdXN0b21lcj9taW5vcnZlcnNpb249NjknOwogICAgICAgIFN0cmluZyByZXF1ZXN0Qm9keSA9ICd7IkZ1bGx5UXVhbGlmaWVkTmFtZSI6IktpbmcgR3JvY2VyaWVzIiwiUHJpbWFyeUVtYWlsQWRkciI6eyJBZGRyZXNzIjoiamRyZXdAbXllbWFpbC5jb20ifSwiRGlzcGxheU5hbWUiOiJLaW5nXCdzIEdyb2NlcmllcyIsIlN1ZmZpeCI6IkpyIiwiVGl0bGUiOiJNciIsIk1pZGRsZU5hbWUiOiJCIiwiTm90ZXMiOiJIZXJlIGFyZSBvdGhlciBkZXRhaWxzLiIsIkZhbWlseU5hbWUiOiJLaW5nIiwiUHJpbWFyeVBob25lIjp7IkZyZWVGb3JtTnVtYmVyIjoiKDU1NSkgNTU1LTU1NTUifSwiQ29tcGFueU5hbWUiOiJLaW5nIEdyb2NlcmllcyIsIkJpbGxBZGRyIjp7IkNvdW50cnlTdWJEaXZpc2lvbkNvZGUiOiJDQSIsIkNpdHkiOiJNb3VudGFpbiBWaWV3IiwiUG9zdGFsQ29kZSI6Ijk0MDQyIiwiTGluZTEiOiIxMjMgTWFpbiBTdHJlZXQiLCJDb3VudHJ5IjoiVVNBIn0sIkdpdmVuTmFtZSI6IkphbWVzIn0nOwogICAgICAgIAogICAgICAgIEh0dHBSZXF1ZXN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgpOwogICAgICAgIHJlcS5zZXRFbmRwb2ludChyZXFVUkwpOwogICAgICAgIHJlcS5zZXRNZXRob2QoJ1BPU1QnKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgIHJlcS5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcrcWJSZWMuQWNjZXNzX1Rva2VuX19jKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgIHJlcS5zZXRCb2R5KHJlcXVlc3RCb2R5KTsKICAgICAgICAKICAgICAgICBIdHRwIGh0dHAgPSBuZXcgSHR0cCgpOwogICAgICAgIEhUVFBSZXNwb25zZSByZXMgPSBodHRwLnNlbmQocmVxKTsKICAgICAgICBpZihyZXMuZ2V0U3RhdHVzQ29kZSgpID09IDIwMCAmJiByZXMuZ2V0Qm9keSgpICE9IE5VTEwpewogICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VCb2R5ID0gcmVzLmdldEJvZHkoKTsKICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXNwb25zZUJvZHkgOjo6ICcrcmVzcG9uc2VCb2R5KTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYocmVzLmdldFN0YXR1c0NvZGUoKSA9PSA0MDEpewogICAgICAgICAgICAgICAgLy8gVG9rZW4gRXhwaXJlZCAtIFBsZWFzZSByZWZyZXNoIHRoZSB0b2tlbgogICAgICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXMuZ2V0Qm9keSgpIDo6OiAnK3Jlcy5nZXRCb2R5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9″ admin_label=”Code Snippet – Customer Create” language=”java” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet]

QuickBooks Invoices

 

Read QuickBooks Invoices

Here is the sample code that can be used to read all the QuickBooks Invoices from Salesforce.

Note: If you wish to get a single QuickBooks Invoice, add the WHERE clause to the Query like below

select * from Invoice where id = ‘239’

[et_pb_dmb_code_snippet title=”qboInvoicesClass.cls” code=”cHVibGljIGNsYXNzIHFib0ludm9pY2VzQ2xhc3MgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBzdHJpbmcgQkFTRV9VUkwgPSAnaHR0cHM6Ly9zYW5kYm94LXF1aWNrYm9va3MuYXBpLmludHVpdC5jb20vdjMvY29tcGFueS8nOwogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgZ2V0UUJPSW52b2ljZXMoKXsKICAgICAgICBRdWlja0Jvb2tzX0RldGFpbHNfX2MgcWJSZWMgPSBbU0VMRUNUIElkLCBSZWFsbUlkX19jLCBBY2Nlc3NfVG9rZW5fX2MgRlJPTSBRdWlja0Jvb2tzX0RldGFpbHNfX2MgTElNSVQgMV07CiAgICAgICAgCiAgICAgICAgU3RyaW5nIHJlcVVSTCA9IEJBU0VfVVJMK3FiUmVjLlJlYWxtSWRfX2MrJy9xdWVyeT9xdWVyeT0nK0VuY29kaW5nVXRpbC51cmxFbmNvZGUoJ3NlbGVjdCAqIGZyb20gSW52b2ljZScsICdVVEYtOCcpKycmbWlub3J2ZXJzaW9uPTY5JzsKICAgICAgICAKICAgICAgICBodHRwUmVxdWVzdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoKTsKICAgICAgICByZXEuc2V0RW5kcG9pbnQocmVxVVJMKTsKICAgICAgICByZXEuc2V0TWV0aG9kKCdHRVQnKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdBdXRob3JpemF0aW9uJywgJ0JlYXJlciAnK3FiUmVjLkFjY2Vzc19Ub2tlbl9fYyk7CiAgICAgICAgcmVxLnNldEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTsKICAgICAgICAKICAgICAgICBIdHRwIGh0dHAgPSBuZXcgSHR0cCgpOwogICAgICAgIEhUVFBSZXNwb25zZSByZXMgPSBodHRwLnNlbmQocmVxKTsKICAgICAgICBpZihyZXMuZ2V0U3RhdHVzQ29kZSgpID09IDIwMCAmJiByZXMuZ2V0Qm9keSgpICE9IE5VTEwpewogICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VCb2R5ID0gcmVzLmdldEJvZHkoKTsKICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXNwb25zZUJvZHkgOjo6ICcrcmVzcG9uc2VCb2R5KTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYocmVzLmdldFN0YXR1c0NvZGUoKSA9PSA0MDEpewogICAgICAgICAgICAgICAgLy8gVG9rZW4gRXhwaXJlZCAtIFBsZWFzZSByZWZyZXNoIHRoZSB0b2tlbgogICAgICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXMuZ2V0Qm9keSgpIDo6OiAnK3Jlcy5nZXRCb2R5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9″ admin_label=”Code Snippet – Invoice Read” language=”java” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet]

Create a QuickBooks Invoice

Here is the sample code that can be used to create a QuickBooks Invoice from Salesforce.

[et_pb_dmb_code_snippet title=”qboInvoicesClass.cls” code=”cHVibGljIGNsYXNzIHFib0ludm9pY2VzQ2xhc3MgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBzdHJpbmcgQkFTRV9VUkwgPSAnaHR0cHM6Ly9zYW5kYm94LXF1aWNrYm9va3MuYXBpLmludHVpdC5jb20vdjMvY29tcGFueS8nOwogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlUUJPSW52b2ljZSgpewogICAgICAgIFF1aWNrQm9va3NfRGV0YWlsc19fYyBxYlJlYyA9IFtTRUxFQ1QgSWQsIFJlYWxtSWRfX2MsIEFjY2Vzc19Ub2tlbl9fYyBGUk9NIFF1aWNrQm9va3NfRGV0YWlsc19fYyBMSU1JVCAxXTsKICAgICAgICAKICAgICAgICBTdHJpbmcgcmVxVVJMID0gQkFTRV9VUkwrcWJSZWMuUmVhbG1JZF9fYysnL2ludm9pY2U/bWlub3J2ZXJzaW9uPTY5JzsKICAgICAgICBTdHJpbmcgcmVxdWVzdEJvZHkgPSAneyJMaW5lIjpbeyJEZXRhaWxUeXBlIjoiU2FsZXNJdGVtTGluZURldGFpbCIsIkFtb3VudCI6MTAwLCJTYWxlc0l0ZW1MaW5lRGV0YWlsIjp7Ikl0ZW1SZWYiOnsibmFtZSI6IlNlcnZpY2VzIiwidmFsdWUiOiIxIn19fV0sIkN1c3RvbWVyUmVmIjp7InZhbHVlIjoiNTgifX0nOwogICAgICAgIAogICAgICAgIGh0dHBSZXF1ZXN0IHJlcSA9IG5ldyBIdHRwUmVxdWVzdCgpOwogICAgICAgIHJlcS5zZXRFbmRwb2ludChyZXFVUkwpOwogICAgICAgIHJlcS5zZXRNZXRob2QoJ1BPU1QnKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgIHJlcS5zZXRIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcrcWJSZWMuQWNjZXNzX1Rva2VuX19jKTsKICAgICAgICByZXEuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vanNvbicpOwogICAgICAgIHJlcS5zZXRCb2R5KHJlcXVlc3RCb2R5KTsKICAgICAgICAKICAgICAgICBIdHRwIGh0dHAgPSBuZXcgSHR0cCgpOwogICAgICAgIEhUVFBSZXNwb25zZSByZXMgPSBodHRwLnNlbmQocmVxKTsKICAgICAgICBpZihyZXMuZ2V0U3RhdHVzQ29kZSgpID09IDIwMCAmJiByZXMuZ2V0Qm9keSgpICE9IE5VTEwpewogICAgICAgICAgICBTdHJpbmcgcmVzcG9uc2VCb2R5ID0gcmVzLmdldEJvZHkoKTsKICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXNwb25zZUJvZHkgOjo6ICcrcmVzcG9uc2VCb2R5KTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYocmVzLmdldFN0YXR1c0NvZGUoKSA9PSA0MDEpewogICAgICAgICAgICAgICAgLy8gVG9rZW4gRXhwaXJlZCAtIFBsZWFzZSByZWZyZXNoIHRoZSB0b2tlbgogICAgICAgICAgICAgICAgc3lzdGVtLmRlYnVnKCdyZXMuZ2V0Qm9keSgpIDo6OiAnK3Jlcy5nZXRCb2R5KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9″ admin_label=”Code Snippet – Invoice Create” language=”java” linenums=”on” line_wrap=”on” copy_button=”on” _builder_version=”4.23″ _module_preset=”default” global_colors_info=”{}”][/et_pb_dmb_code_snippet]

Next Steps

At this point, you can create a QuickBooks Invoice from Salesforce using Apex. You might want to take additional steps or automate what you have built.

 

  1. Would you like to learn how to create a QuickBooks Customer and Invoice automatically when an Opportunity is converted? To achieve this, you can create an Apex Method annotated with @InvocableMethod. This method should include the code required to create a QuickBooks Customer and related Invoice. Finally, call this method from a Record Triggered Flow.
  2. If you want to fetch data from QuickBooks continuously, create a schedulable class and schedule it to run every hour or two.