Git Product home page Git Product logo

salesforce-component's Introduction

salesforce-component

DEPRECATED COMPONENT. USE https://github.com/elasticio/salesforce-component-v2 INSTEAD

Description

elastic.io iPaaS component that connects to Salesforce API

Purpose

Salesforce component is designed for Salesforce API integration.

Completeness Matrix

Salesforse-component Completeness Matrix

Salesforse-component Completeness Matrix

API version

The component uses Salesforce - API Version 45.0, except:

  • Deprecated Actions and Triggers - API Version 25.0

Authentication

Authentication occurs via OAuth 2.0. In the component repository you need to specify OAuth Client credentials as environment variables:

  • OAUTH_CLIENT_ID - your OAuth client key
  • OAUTH_CLIENT_SECRET - your OAuth client secret

Create new App in Salesforce

In order to make OAuth work, you need a new App in your Salesforce. During app creation process you will be asked to specify the callback URL, to process OAuth authentication via elastic.io platform your callback URL should be

https://your-tenant.elastic.io/callback/oauth2

More information you can find here

Credentials

During credentials creation you would need to:

  • choose Environment
  • enter Username and Password in a pop-up window after click on Authenticate button.
  • verify and save your new credentials.

Limitations

According to Salesforce documentation

Each connected app allows five unique approvals per user. When a sixth approval is made, the oldest approval is revoked.

You can get error refresh token has been expired if the same user account was authenticated with same OAuth Application (OAuth Client) more than 4 times. This is feature of the Salesforce platform that automatically invalidates the oldest refresh_token as soon as a number of given refresh tokens for an individual user account exceeds 4.

Actions

Query

Executing a SOQL Query that may return many objects. Each resulting object is emitted one-by-one. Use the Salesforce Object Query Language (SOQL) to search your organization’s Salesforce data for specific information. SOQL is similar to the SELECT statement in the widely used Structured Query Language (SQL) but is designed specifically for Salesforce data. This action allows you to interact with your data using SOQL. Empty object will be returned, if query doesn't find any data.

Input fields description

  • Include deleted - checkbox, if checked - deleted records will be included into the result list.

Input fields description

  • Optional batch size - A positive integer specifying batch size. If no batch size is specified then results of the query will be emitted one-by-one, otherwise, query results will be emitted in an array of maximum batch size.
  • Allow all results to be returned in a set - checkbox which allows emitting query results in a single array. Optional batch size option is ignored in this case.
  • SOQL Query - Input field where you should type the SOQL query. E.g. "SELECT ID, Name from Contact where Name like 'John Smi%'"
  • Max Fetch Count - limit for a number of messages that can be fetched. 1,000 is the default value when the variable is not set.

Create Object

Creates a new Selected Object. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Note: In case of an Attachment object type you should specify Body in base64 encoding. ParentId is a Salesforce ID of an object (Account, Lead, Contact) which an attachment is going to be attached to.

Input fields description

  • Object - Input field where you should choose the object type, which you want to find. E.g. Account
  • Utilize data attachment from previous step (for objects with a binary field) - a checkbox, if it is checked and an input message contains an attachment and specified object has a binary field (type of base64) then the input data is put into object's binary field. In this case any data specified for the binary field in the data mapper is discarded.

This action will automatically retrieve all existing fields of chosen object type that available on your Salesforce organization

Limitations

When Utilize data attachment from previous step (for objects with a binary field) is checked and this action is used with Local Agent error would be thrown: 'getaddrinfo ENOTFOUND steward-service.platform.svc.cluster.local steward-service.platform.svc.cluster.local:8200'

Delete Object (at most 1)

Deletes an object by a selected field. One can filter by either unique fields or all fields of that sobject. Input metadata is fetched dynamically from your Salesforce account.

Input field description

  • Object - dropdown list where you should choose the object type, which you want to find. E.g. Account.
  • Type Of Search - dropdown list with two values: Unique Fields and All Fields.
  • Lookup by field - dropdown list with all fields on the selected object, if on Type Of Search is chosen All Fields, or with all fields on the selected object where type is id or unique is true , if on Type Of Search is chosen Unique Fields then all searchable fields both custom and standard will be available for selection.

Result is an object with 3 fields.

  • id - string, salesforce object id
  • success - boolean, if operation was successful true
  • errors - array, if operation fails, it will contain description of errors

Metadata description

Metadata for each particular Object type + Lookup by field is generating dynamically.

Upsert Object

Creates or Updates Selected Object. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input field description

  • Object - Input field where you should choose the object type, which you want to find. E.g. Account
  • Optional Upsert field - Input field where you should specify the ExternalID name field. E.g. ExtId__c.
  • Utilize data attachment from previous step (for objects with a binary field) - a checkbox, if it is checked and an input message contains an attachment and specified object has a binary field (type of base64) then the input data is put into object's binary field. In this case any data specified for the binary field in the data mapper is discarded.

You should specify external or internal Id for making some updates in salesforce object. If you want to create new Object you should always specify Optional Upsert field and value of ExternalId in input body structure.

Limitations

When Utilize data attachment from previous step (for objects with a binary field) is checked and this action is used with Local Agent error would be thrown: 'getaddrinfo ENOTFOUND steward-service.platform.svc.cluster.local steward-service.platform.svc.cluster.local:8200'

Lookup Object (at most 1)

Lookup an object by a selected field. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input field description

  • Object - Dropdown list displaying all searchable object types. Select one type to query, e.g. Account.
  • Type Of Search - Dropdown list with two values: Unique Fields and All Fields.
  • Lookup by field - Dropdown list with all fields on the selected object if the Type Of Search is All Fields. If the Type Of Search is Unique Fields, the dropdown lists instead all fields on the selected object where type is id or unique is true.
  • Include linked objects - Multiselect dropdown list with all the related child and parent objects of the selected object type. List entries are given as Object Name/Reference To (Relationship Name). Select one or more related objects, which will be join queried and included in the response from your Salesforce Organization. Please see the Limitations section below for use case advisories.
  • Allow zero results - Checkbox. If checked and nothing is found in your Salesforce Organization, an empty object will be returned. If not checked and nothing is found, the action will throw an error.
  • Pass binary data to the next component (if found object has it) - Checkbox. If it is checked and the found object record has a binary field (primitive type base64), then its data will be passed to the next component as a binary attachment.
  • Enable Cache Usage - Flag to enable cache usage.

Metadata description

Metadata contains one field whose name, type and mandatoriness are generated according to the value of the configuration fields Lookup by field and Allow criteria to be omitted.

Limitations

When a binary field (primitive type base64, e.g. Documents, Attachments, etc) is selected on Include linked objects, an error will be thrown: 'MALFORMED_QUERY: Binary fields cannot be selected in join queries. Instead of querying objects with binary fields as linked objects (such as children Attachments), try querying them directly.' There is also a limit to the number of linked objects that you can query at once - beyond two or three, depending on the number of fields in the linked objects, Salesforce could potentially return a Status Code 431 or 414 error, meaning the query is too long. Finally, due to a bug with multiselect dropdowns, it is recommended to deselect all of the elements in this field before you change your selection in the Object dropdown list.

When Pass binary data to the next component (if found object has it) is checked and this action is used with Local Agent, an error will be thrown: 'getaddrinfo ENOTFOUND steward-service.platform.svc.cluster.local steward-service.platform.svc.cluster.local:8200'

Note

Action has caching mechanism. By default action stores last 10 request-response pairs for 10 min duration. This parameters can be changed by setting environment variables:

  • HASH_LIMIT_TIME - Hash expiration time in milis
  • HASH_LIMIT_ELEMENTS - Hash size number limit

Lookup Objects

Lookup a list of objects satisfying specified criteria.

Input field description

  • Object - dropdown list where you should choose the object type, which you want to find. E.g. Account.
  • Include deleted - checkbox, if checked - deleted records will be included into the result list.
  • Output method - dropdown list with following values: "Emit all", "Emit page", "Emit individually".
  • Number of search terms - text field to specify a number of search terms (positive integer number [1-99] or 0).
  • Enable Cache Usage - Flag to enable cache usage.
  • Max Fetch Count - limit for a number of messages that can be fetched. 1,000 is the default value when the variable is not set.

Note

Action has caching mechanism. By default action stores last 10 request-response pairs for 10 min duration. This parameters can be changed by setting environment variables:

  • HASH_LIMIT_TIME - Hash expiration time in milis
  • HASH_LIMIT_ELEMENTS - Hash size number limit

Metadata description

Depending on the the configuration field Output method the input metadata can contain different fields: Output method - "Emit page": Field "Page size" - optional positive integer that defaults to 1000; Field "Page number" - required non-negative integer (starts with 0, default value 0);

Output method - "Emit all": Field "Maximum number of records" - optional positive integer (default value 1000);

Output method - "Emit individually": Field "Maximum number of records" - optional positive integer (default value 10000);

Note that the number of records the component emits may affect the performance of the platform/component.

Groups of fields for each search term go next:

Field "Field name" - string represents object's field (a list of allowed values is available); Field "Field value" - string represents value for selected field; Field "Condition" - one of the following: "=", "!=", "<", "<=", ">", ">=", "LIKE", "IN", "NOT IN";

Between each two term's group of fields:

Field "Logical operator" - one of the following: "AND", "OR";

Output data is an object, with a field "results" that is an array of objects.

Bulk Create/Update/Delete/Upsert

Bulk API provides a simple interface for quickly loading large amounts of data from CSV file into Salesforce (up to 10'000 records). Action takes a CSV file from the attachment as an input. CSV file format is described in the Salesforce documentatio

Input field description

  • Operation - dropdown list with 3 supported operations: Create, Update and Delete.
  • Object - dropdown list where you should choose the object type to perform bulk operation. E.g. Case.
  • Timeout - maximum time to wait until the server completes a bulk operation (default: 600 sec).

Metadata description

  • External ID Field - a name of the External ID field for Upsert operation. E.g. my_external_id__c

Result is an object with a property result: array. It contains objects with 3 fields.

  • id - string, salesforce object id
  • success - boolean, if operation was successful true
  • errors - array, if operation failed contains description of errors

Limitations

  • No errors thrown in case of failed Object Create/Update/Delete/Upsert ("success": "false").
  • Object ID is needed for Update and Delete.
  • External ID is needed for Upsert.
  • Salesforce processes up to 10'000 records from the input CSV file.

Bulk Query

Fetches records to a CSV file.

Input field description

  • SOQL Query - Input field where you should type the SOQL query. E.g. "SELECT ID, Name from Contact where Name like 'John Smi%'"

Result is a CSV file in the attachment.

Lookup Object (deprecated)

Lookup an object by a selected field. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input field description

  • Optional batch size - A positive integer specifying batch size. If no batch size is specified then results of the query will be emitted one-by-one, otherwise, query results will be emitted in an array of maximum batch size.
  • Object - Input field where you should choose the object type, which you want to find. E.g. Account
  • Lookup field - Input field where you should choose the lookup field which you want to use for result filtering. E.g. Id.
  • Max Fetch Count - limit for a number of messages that can be fetched. 1,000 is the default value when the variable is not set.

For now, you can specify all unique, lookup, ExternalID/Id fields.

Execution result handling
Condition Execution result
Lookup failed - we were not able to find any parent object. Lookup action emits a single message with an empty body.
Lookup found a single object, e.g. we were able to identify a parent Account to the Contact A single message will be emitted, found object will be a body of the message
Lookup found multiple objects (that may happen when a lookup is made by non-unique field) Each found object will be emitted with the separate message

New Account (deprecated)

Creates a new Account. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Account object type that available on your Salesforce organization.

Action is deprecated. You can use Create Object action instead.

New Case (deprecated)

Creates a new Case. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Case object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

New Contact (deprecated)

Creates a new Contact. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Contact object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

New Event (deprecated)

Creates a new Event. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Event object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

New Lead (deprecated)

Creates a new Lead. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Lead object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

New Note (deprecated)

Creates a new Note. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Note object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

New Task (deprecated)

Creates a new Task. Action creates a single object. Input metadata is fetched dynamically from your Salesforce account. Output metadata is the same as input metadata, so you may expect all fields that you mapped as input to be returned as output.

Input fields description

This action will automatically retrieve all existing fields of Task object type that available on your Salesforce organization

Action is deprecated. You can use Create Object action instead.

Triggers

Query

Continuously runs the same SOQL Query and emits results one-by-one. Use the Salesforce Object Query Language (SOQL) to search your organization’s Salesforce data for specific information. SOQL is similar to the SELECT statement in the widely used Structured Query Language (SQL) but is designed specifically for Salesforce data. This action allows you to interact with your data using SOQL.

List of Expected Config fields

  • SOQL Query - Input field for your SOQL Query
  • Output method - dropdown list with options: Emit all - all found records will be emitted in one array records, and Emit individually - each found object will be emitted individual. Optional field, defaults to: Emit individually.

NOTE: Max possible fetch size is 2000 objects per execution.

Get New and Updated Objects Polling

Polls existing and updated objects. You can select any custom or built-in object for your Salesforce instance.

Input field description

  • Object - Input field where you should select the type of object which updates you want to get. E.g. Account;
  • Start Time - Indicates the beginning time to start polling from. Defaults to 1970-01-01T00:00:00.000Z;
  • End Time - If provided, don’t fetch records modified after this time;
  • Size of Polling Page - Indicates the size of pages to be fetched. You can set positive integer, max 10 000, defaults to 1000;
  • Process single page per execution - You can select on of options (defaults to yes):
    1. yes - if the number of changed records exceeds the maximum number of results in a page, wait until the next flow start to fetch the next page;
    2. no - if the number of changed records exceeds the maximum number of results in a page, the next pages will fetching in the same execution.
  • Include linked objects - Multiselect dropdown list with all the related child and parent objects of the selected object type. List entries are given as Object Name/Reference To (Relationship Name). Select one or more related objects, which will be join queried and included in the response from your Salesforce Organization. Please see the Limitations section below for use case advisories.
  • Output method - dropdown list with options: Emit all - all found records will be emitted in one array records, and Emit individually - each found object will be emitted individual. Optional field, defaults to: Emit individually.
  • Max Fetch Count - limit for a number of messages that can be fetched. 1,000 is the default value when the variable is not set. For example, you have 234 “Contact” objects, 213 of them were changed from 2019-01-01. You want to select all “Contacts” that were changed from 2019-01-01, set the page size to 100 and process single page per execution. For you purpose you need to specify following fields:
    • Object: Contact
    • Start Time: 2019-01-01T00:00:00.000Z
    • Size of Polling Page: 100
    • Process single page per execution: yes (or leave this empty) image

As a result, all contacts will be fetched in three calls of the trigger: two of them by 100 items, and the last one by 13. If you select no in Process single page per execution, all 213 contacts will be fetched in one call of the trigger.

Limitations

When a binary field (primitive type base64, e.g. Documents, Attachments, etc) is selected on Include linked objects, an error will be thrown: 'MALFORMED_QUERY: Binary fields cannot be selected in join queries. Instead of querying objects with binary fields as linked objects (such as children Attachments), try querying them directly.' There is also a limit to the number of linked objects that you can query at once - beyond two or three, depending on the number of fields in the linked objects, Salesforce could potentially return a Status Code 431 or 414 error, meaning the query is too long. Finally, due to a bug with multiselect dropdowns, it is recommended to deselect all of the elements in this field before you change your selection in the Object dropdown list.

Subscribe to platform events (REALTIME FLOWS ONLY)

This trigger will subscribe for any platform Event using Salesforce streaming API.

Input field description

  • Event object name - Input field where you should select the type of platform event which you want to subscribe E.g. My platform event

How to create new custom Platform event Entity:

Setup --> Integrations --> Platform Events --> New Platform Event Screenshot from 2019-03-11 11-51-10

You can find more detail information in the Platform Events Intro Documentation.

Environment Variables

  1. SALESFORCE_API_VERSION - API version for not deprecated actions and triggers e.g(46.0), default value 45.0

  2. LOG_LEVEL - trace | debug | info | warning | error controls logger level

Limitations:

At the moment this trigger can be used only for "Realtime" flows.

New Case (deprecated)

Polls existing and updated Cases (fetches a maximum of 1000 objects per execution)

Trigger is deprecated. You can use Get New and Updated Objects Polling action instead.

New Lead (deprecated)

Polls existing and updated Leads (fetches a maximum of 1000 objects per execution)

Trigger is deprecated. You can use Get New and Updated Objects Polling action instead.

New Contact (deprecated)

Polls existing and updated Contacts (fetches a maximum of 1000 objects per execution)

Trigger is deprecated. You can use Get New and Updated Objects Polling action instead.

New Account (deprecated)

Polls existing and updated Accounts (fetches a maximum of 1000 objects per execution)

Trigger is deprecated. You can use Get New and Updated Objects Polling action instead.

New Task (deprecated)

Polls existing and updated Tasks (fetches a maximum of 1000 objects per execution)

Trigger is deprecated. You can use Get New and Updated Objects Polling action instead.

Known limitations

Attachments mechanism does not work with Local Agent Installation

salesforce-component's People

Contributors

a3a3e1 avatar bennmcgregor avatar denyshld avatar ellenaua avatar emptyinfinity avatar jhorbulyk avatar khanzadyan avatar kirill-levitskiy avatar olegosh avatar pnedelko avatar romashkax avatar shkarupanick avatar shulkaolka avatar stas-fomenko avatar uaarsen avatar umkaline avatar yarikos avatar zainnoor99 avatar zubairov avatar zuker avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

salesforce-component's Issues

'Lookup Objects' action emits one more message than it should

Description: In case when Output method: Emit individually it emits message with an array that includes all objects that were emitted individually. It also emits +1 msg for all Output method options.
Preconditions: use creds from bitwarden
STR:
1. Create flow: step1 - simple trigger
2. Add step2 - salesforce-component - Lookup Objects
3. Input for 'Lookup Objects':

Object: Account 
Output method: Emit individually
Number of search terms: 0 

all other fields - default

4. Set step3 - COde component with input:

// Please note only Node.js code is supported here
async function run(msg, cfg, snapshot) {
	this.logger.info('Incoming message is %s', JSON.stringify(msg));
	const body = { result : msg };
	// You can emit as many data messages as required
	await this.emit('data', { body });
	this.logger.info('Execution finished');
}

5. Start flow and see logs for Code component

AR:

  1. 28 messages are emitted
  2. Message with an array that includes all objects that were emitted individually is emitted
Message Incoming message is [{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026chbJQAQ"},"Id":"0012R000026chbJQAQ","IsDeleted":false,"MasterRecordId":null,"Name":"Deutsche Bank","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.deutschebank.com","PhotoUrl":"/services/images/photo/0012R000026chbJQAQ","Sic":null,"Industry":null,"AnnualRevenue":26000000000,"NumberOfEmployees":97000,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-20T14:45:35.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-20T14:45:35.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-20T14:45:35.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26675"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026ccTZQAY"},"Id":"0012R000026ccTZQAY","IsDeleted":false,"MasterRecordId":null,"Name":"Deutsche Bank","Type":null,"ParentId":null,"BillingStreet":"Taunusanlage 12","BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":"Germany","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":null,"country":"Germany","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":"Taunusanlage 12"},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.deutschebank.com","PhotoUrl":"/services/images/photo/0012R000026ccTZQAY","Sic":null,"Industry":null,"AnnualRevenue":26000000000,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-17T12:14:25.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-17T12:14:25.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-17T12:14:25.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26673"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R00002745CFQAY"},"Id":"0012R00002745CFQAY","IsDeleted":false,"MasterRecordId":null,"Name":"Deutsche Bank","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":"Frankfurt","ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Frankfurt","country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":null},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0012R00002745CFQAY","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-11-20T10:43:24.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-11-20T10:43:24.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-11-20T10:43:24.000+0000","LastActivityDate":null,"LastViewedDate":"2019-11-20T10:43:24.000+0000","LastReferencedDate":"2019-11-20T10:43:24.000+0000","Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26676"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026cVtwQAE"},"Id":"0012R000026cVtwQAE","IsDeleted":false,"MasterRecordId":null,"Name":"Melitta Group Management GmbH & Co. KG","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":"Minden","BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Minden","country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":null},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.melitta.com","PhotoUrl":"/services/images/photo/0012R000026cVtwQAE","Sic":null,"Industry":null,"AnnualRevenue":1325000000,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":"Melitta is a Germany-based company selling coffee, paper coffee filters, and coffee makers, part of the Melitta Group, which also has Melitta branches in other countries world-wide. The company is headquartered in Minden, North Rhine-Westphalia.","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-13T00:01:48.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-13T00:01:48.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-13T00:01:48.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26669"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026cVu1QAE"},"Id":"0012R000026cVu1QAE","IsDeleted":false,"MasterRecordId":null,"Name":"Dr. Oetker GmbH","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":"Bielfeld","BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Bielfeld","country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":null},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.oetker.com","PhotoUrl":"/services/images/photo/0012R000026cVu1QAE","Sic":null,"Industry":null,"AnnualRevenue":10000000000,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":"Dr. Oetker GmbH, through its subsidiaries, produces and markets baking mixtures. The company offers baking products, baking mixtures, dessert powders, chilled ready desserts, yoghurt products, muesli, frozen pizzas, and snacks. The company is based in Bielefeld, Germany. Dr. Oetker GmbH operates as a subsidiary of Dr. August Oetker KG.","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-13T00:01:49.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-13T00:01:49.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-13T00:01:49.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26670"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026cVu6QAE"},"Id":"0012R000026cVu6QAE","IsDeleted":false,"MasterRecordId":null,"Name":"Starbucks Corporation","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":"Seattle","BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Seattle","country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":null},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.starbucks.com","PhotoUrl":"/services/images/photo/0012R000026cVu6QAE","Sic":null,"Industry":null,"AnnualRevenue":0,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":"Starbucks Corporation, together with its subsidiaries, operates as a roaster, marketer, and retailer of specialty coffee worldwide. The company operates in four segments: Americas; China/Asia Pacific; Europe, Middle East, and Africa; and Channel Development. Its stores offer coffee and tea beverages, roasted whole bean and ground coffees, single-serve and ready-to-drink coffee and tea products, and food and snacks; and various food products, such as pastries, breakfast sandwiches, and lunch items. The company also licenses its trademarks through licensed stores, and grocery and foodservice accounts. It offers its products under the Starbucks, Teavana,","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-13T00:01:50.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-13T00:01:50.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-13T00:01:50.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26671"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026b7WGQAY"},"Id":"0012R000026b7WGQAY","IsDeleted":false,"MasterRecordId":null,"Name":"John","Type":null,"ParentId":null,"BillingStreet":"John","BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":null,"country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":"John"},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0012R000026b7WGQAY","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":"John","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-08-09T10:49:53.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-08-09T10:49:53.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-08-09T10:49:53.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"10388"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026cVuBQAU"},"Id":"0012R000026cVuBQAU","IsDeleted":false,"MasterRecordId":null,"Name":"audibene GmbH","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":"Berlin","BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Berlin","country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":null},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.audibene.de","PhotoUrl":"/services/images/photo/0012R000026cVuBQAU","Sic":null,"Industry":null,"AnnualRevenue":0,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":"audibene ist mit über 800.000 Hörgeräte-Beratungen im Jahr die weltweit größte Anlaufstelle für Hörverlust und Hörgeräte. In mehr als neun Ländern versorgen wir Sie mit optimalen Lösungen für Ihre Hörbedürfnisse. Wir bieten Ihnen eine kostenfreie Experten-Beratung am Telefon und das Testen der neuesten Hörgeräte bei Ihnen vor Ort.\n\nUnser Team aus Hörgeräte-Experten und erfahrenen Akustikern unterstützt Sie dabei, das Hörgerät zu finden, das perfekt zu Ihrer Hörsituation und zu Ihrem Lebensstil passt. In Deutschland arbeiten wir mit über 1.000 der besten Akustiker zusammen und garantieren Ihnen so die professionelle Anpassung Ihrer Hörgeräte ganz in Ihrer Nähe.\n\nDabei sind wir nicht nur Experte, was die Herausforderungen von Hörverlust angeht. Wir bieten Ihnen auch die neuesten Hörgeräte aller führenden Marken an. Durch unsere Zusammenarbeit mit allen namhaften Hörgeräte-Herstellern haben wir Zugriff auf rund 1.000 Hörgeräte am Markt und finden so für jeden Hörverlust die beste Lösung.","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-13T00:01:51.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-13T00:01:51.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-13T00:01:51.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26672"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001rPkzJAAS"},"Id":"0014400001rPkzJAAS","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001rPkzJAAS","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-12-11T15:38:42.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-12-11T15:38:42.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-12-13T03:30:36.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"29"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R000026cdWBQAY"},"Id":"0012R000026cdWBQAY","IsDeleted":false,"MasterRecordId":null,"Name":"Deutsche Bank","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":"Taunusanlage 12","ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":null,"country":null,"geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":null,"street":"Taunusanlage 12"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0012R000026cdWBQAY","Sic":null,"Industry":null,"AnnualRevenue":26000000000,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-09-18T15:20:31.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-09-18T15:20:31.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-09-18T15:20:31.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26674"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0012R0000275Cp1QAE"},"Id":"0012R0000275Cp1QAE","IsDeleted":false,"MasterRecordId":null,"Name":"Deutsche Bank","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.deutschebank.com","PhotoUrl":"/services/images/photo/0012R0000275Cp1QAE","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2019-12-31T15:12:24.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2019-12-31T15:12:24.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2019-12-31T15:12:24.000+0000","LastActivityDate":null,"LastViewedDate":"2019-12-31T15:12:24.000+0000","LastReferencedDate":"2019-12-31T15:12:24.000+0000","Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"26677"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQRqAAM"},"Id":"0014400001ytQRqAAM","IsDeleted":false,"MasterRecordId":null,"Name":"GarryAcc","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQRqAAM","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T08:21:39.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-13T08:21:39.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-13T08:21:39.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"80"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQkRAAU"},"Id":"0014400001ytQkRAAU","IsDeleted":false,"MasterRecordId":null,"Name":"NewTestAccount1","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"123465856","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQkRAAU","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T09:02:51.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-13T09:02:51.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-13T09:02:51.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"83"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001rQVh3AAG"},"Id":"0014400001rQVh3AAG","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001rQVh3AAG","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-12-18T11:35:59.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-12-18T11:35:59.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-12-18T11:40:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"31"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001qmQYrAAM"},"Id":"0014400001qmQYrAAM","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001qmQYrAAM","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-11-26T21:40:00.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-11-26T21:40:00.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-11-27T11:39:35.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"20"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001rPkudAAC"},"Id":"0014400001rPkudAAC","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001rPkudAAC","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-12-11T15:20:48.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-12-11T15:20:48.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-12-12T01:41:45.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"28"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001rP91TAAS"},"Id":"0014400001rP91TAAS","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001rP91TAAS","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-12-05T13:48:27.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-12-05T13:48:27.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-12-06T01:45:20.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"27"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001qmSjWAAU"},"Id":"0014400001qmSjWAAU","IsDeleted":false,"MasterRecordId":null,"Name":"The Cannon Group PLC","Type":"Customer - Direct","ParentId":null,"BillingStreet":"192 Market Square","BillingCity":"Birmingham","BillingState":null,"BillingPostalCode":"B27 4KT","BillingCountry":"GB","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"ShippingStreet":"192 Market Square","ShippingCity":"Birmingham","ShippingState":null,"ShippingPostalCode":"B27 4KT","ShippingCountry":"GB","ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":{"city":"Birmingham","country":"GB","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":"B27 4KT","state":null,"street":"192 Market Square"},"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001qmSjWAAU","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-11-27T09:33:03.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-11-27T09:33:03.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2017-11-29T01:40:05.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":"Web","SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":"Yes","NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"21"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001qm3gaAAA"},"Id":"0014400001qm3gaAAA","IsDeleted":false,"MasterRecordId":null,"Name":"Jacob Sample Account","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001qm3gaAAA","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2017-11-21T16:17:09.000+0000","CreatedById":"005E0000002CozkIAC","LastModifiedDate":"2017-11-21T16:17:09.000+0000","LastModifiedById":"005E0000002CozkIAC","SystemModstamp":"2018-04-25T02:35:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"19"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001tea1SAAQ"},"Id":"0014400001tea1SAAQ","IsDeleted":false,"MasterRecordId":null,"Name":"White House","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"+123456789","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001tea1SAAQ","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-03-29T11:20:08.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-03-29T11:20:08.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-03-31T00:44:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"36"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001teZzRAAU"},"Id":"0014400001teZzRAAU","IsDeleted":false,"MasterRecordId":null,"Name":"GarryInc","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001teZzRAAU","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":"https://garry.io","OwnerId":"005440000092zqdAAA","CreatedDate":"2018-03-29T10:16:36.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-03-29T10:16:36.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-03-31T00:44:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"35"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001tdeghAAA"},"Id":"0014400001tdeghAAA","IsDeleted":false,"MasterRecordId":null,"Name":"Name changed","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.elastic.io","PhotoUrl":"/services/images/photo/0014400001tdeghAAA","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2018-03-20T15:50:54.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-03-29T09:15:04.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-03-31T00:44:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"34"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001tea63AAA"},"Id":"0014400001tea63AAA","IsDeleted":false,"MasterRecordId":null,"Name":"White House","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001tea63AAA","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-03-29T12:17:05.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-03-29T12:17:05.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-03-31T00:44:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"37"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001tdeaPAAQ"},"Id":"0014400001tdeaPAAQ","IsDeleted":false,"MasterRecordId":null,"Name":"New! elastic.io GmbH","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":null,"Fax":null,"AccountNumber":null,"Website":"www.elastic.io","PhotoUrl":"/services/images/photo/0014400001tdeaPAAQ","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005E0000002CozkIAC","CreatedDate":"2018-03-20T15:39:00.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-03-20T15:39:00.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-03-31T00:44:23.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"32"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001wWXaPAAW"},"Id":"0014400001wWXaPAAW","IsDeleted":false,"MasterRecordId":null,"Name":"NickCompany","Type":null,"ParentId":null,"BillingStreet":"Wanheimer Straße 66","BillingCity":"Düsseldorf","BillingState":"NRW","BillingPostalCode":null,"BillingCountry":"Germany","BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":{"city":"Düsseldorf","country":"Germany","geocodeAccuracy":null,"latitude":null,"longitude":null,"postalCode":null,"state":"NRW","street":"Wanheimer Straße 66"},"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"0211 78 17 80-0","Fax":null,"AccountNumber":null,"Website":"www.mvise.de","PhotoUrl":"/services/images/photo/0014400001wWXaPAAW","Sic":null,"Industry":null,"AnnualRevenue":0,"NumberOfEmployees":200,"Ownership":null,"TickerSymbol":null,"Description":"Die mVISE AG beschleunigt die digitale Transformation und Integration mit IT Consulting Services, Produkten und kundenspezifischer Software. Dabei liegen die Kernkompetenzen in den Bereichen Mobile- und Cloud Computing, IT-Infrastrukturen und Security sowie Integration und Auswertung von komplexen Daten.\r\n mVISE realisiert Digitalisierungsprojekte gemeinsam mit den Kunden – von der Konzeptphase über die Entwicklung und Implementierung bis hin zu Managed Services. Cloud-Produkte wie die iPaaS-Plattform elastic.io beschleunigen Integrationsaufgaben. Für die Digitalisierung von Vertriebsprozessen bietet mVISE mit SaleSphere eine integrierte Lösung.","Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-08-10T12:37:13.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-12T15:38:32.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-12T15:38:32.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":3,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"77"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQV7AAM"},"Id":"0014400001ytQV7AAM","IsDeleted":false,"MasterRecordId":null,"Name":"Test2","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"234564324376","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQV7AAM","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T08:31:40.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-13T08:31:40.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-13T08:31:40.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"82"},{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQUJAA2"},"Id":"0014400001ytQUJAA2","IsDeleted":false,"MasterRecordId":null,"Name":"ElasticTestAccount","Type":"Customer - Direct","ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"123456788888","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQUJAA2","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":"Hot","Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T08:28:47.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-11-15T14:06:47.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-11-15T14:06:47.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":"7052","Auto_Number_test_field__c":"81"}] processMessage emit end was called more than once

ER: Number of the emitted message matches with the actual number of found objects in salesforce (accounts):
27 messages emitted, each message includes one account
Message example:

Message Incoming message is {"id":"cd5a8c11-a6b1-4181-af5a-08d705c13af7","attachments":{},"body":{"results":[{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQV7AAM"},"Id":"0014400001ytQV7AAM","IsDeleted":false,"MasterRecordId":null,"Name":"Test2","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"234564324376","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQV7AAM","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T08:31:40.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-13T08:31:40.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-13T08:31:40.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"82"}]},"headers":{},"metadata":{},"passthrough":{"step_1":{"id":"72c1f3ab-e0ff-4bb9-899a-063766201ba2","attachments":{},"body":{"fireTime":"2020-01-06T10:43:09.784Z","lastPoll":"2020-01-06T10:40:03.080Z"},"headers":{},"metadata":{}},"step_3":{"id":"cd5a8c11-a6b1-4181-af5a-08d705c13af7","attachments":{},"body":{"results":[{"attributes":{"type":"Account","url":"/services/data/v46.0/sobjects/Account/0014400001ytQV7AAM"},"Id":"0014400001ytQV7AAM","IsDeleted":false,"MasterRecordId":null,"Name":"Test2","Type":null,"ParentId":null,"BillingStreet":null,"BillingCity":null,"BillingState":null,"BillingPostalCode":null,"BillingCountry":null,"BillingLatitude":null,"BillingLongitude":null,"BillingGeocodeAccuracy":null,"BillingAddress":null,"ShippingStreet":null,"ShippingCity":null,"ShippingState":null,"ShippingPostalCode":null,"ShippingCountry":null,"ShippingLatitude":null,"ShippingLongitude":null,"ShippingGeocodeAccuracy":null,"ShippingAddress":null,"Phone":"234564324376","Fax":null,"AccountNumber":null,"Website":null,"PhotoUrl":"/services/images/photo/0014400001ytQV7AAM","Sic":null,"Industry":null,"AnnualRevenue":null,"NumberOfEmployees":null,"Ownership":null,"TickerSymbol":null,"Description":null,"Rating":null,"Site":null,"OwnerId":"005440000092zqdAAA","CreatedDate":"2018-09-13T08:31:40.000+0000","CreatedById":"005440000092zqdAAA","LastModifiedDate":"2018-09-13T08:31:40.000+0000","LastModifiedById":"005440000092zqdAAA","SystemModstamp":"2018-09-13T08:31:40.000+0000","LastActivityDate":null,"LastViewedDate":null,"LastReferencedDate":null,"Jigsaw":null,"JigsawCompanyId":null,"AccountSource":null,"SicDesc":null,"CustomerPriority__c":null,"SLA__c":null,"Active__c":null,"NumberofLocations__c":null,"UpsellOpportunity__c":null,"SLASerialNumber__c":null,"SLAExpirationDate__c":null,"External_ID__c":null,"Auto_Number_test_field__c":"82"}]},"headers":{},"metadata":{}}}} [2020-01-06 12:43:14.076]: Execution finished

newAccount Trigger / Id missing

The latest version of this component doesn't query the attribute Id from SalesForce. V3 of the component still contains the Id attribute.

This issue is directly connected with the last commit: #587b45d (587b45d) by @zubairov .

This is the outcome sample in which the above mention ID is missing:

{
"SLAExpirationDate__c": "2015-10-05",
"SLASerialNumber__c": "3479",
"UpsellOpportunity__c": "No",
"NumberofLocations__c": 34,
"Active__c": "Yes",
"SLA__c": "Platinum",
"CustomerPriority__c": "High",
"SicDesc": null,
"YearStarted": null,
"NaicsDesc": null,
"NaicsCode": null,
"Tradestyle": null,
"DunsNumber": null,
"AccountSource": null,
"Jigsaw": null,
"Site": null,
"Rating": null,
"Description": null,
"TickerSymbol": "UOS",
"Ownership": "Public",
"NumberOfEmployees": 24000,
"AnnualRevenue": null,
"Industry": "Energy",
"Sic": "4437",
"Website": "http://www.uos.com",
"AccountNumber": "CD355119-A",
"Fax": "44 191 4956620",
"Phone": "44 191 4956203",
"ShippingCountry": null,
"ShippingPostalCode": null,
"ShippingState": null,
"ShippingCity": null,
"ShippingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom",
"BillingCountry": null,
"BillingPostalCode": null,
"BillingState": "UK",
"BillingCity": null,
"BillingStreet": "Kings Park, 17th Avenue, Team Valley Trading Estate,\nGateshead, Tyne and Wear NE26 3HS\nUnited Kingdom",
"Type": "Customer – Direct",
"Name": "United Oil & Gas, UK",
"attributes": {
"url": "/services/data/v25.0/sobjects/Account/0010Y000002UR9QQAW",
"type": "Account"
}
}

bug.png

Query Action should have an option that allows all results to be returned in a set

Currently the query action returns results individually. This is useful for the use case when this action is triggered in a flow of the form:

some action -> Salesforce query action based on some data from the action -> Do something with each matching result

However, the current design is not condusive to flows of the form:

webhook -> Salesforce query action based on some webhook params -> Http Reply

Update the Salesforce API version to V44 or any latest one

This is not particularly a big issue. However, the supported version is V39 which us from Spring 2017 which lucks additional functionality like a proper support for custom objects and custom tables (?). These features were added in the later versions.

It might be a good idea to extend the functionality of this component to include above-mentioned objects by upgrading to V44 (Winter 2019).

Below are the observations from one customer:

  1. SOQL action not fetching some Salesforce columns and throwing the invalid column error.
  2. new other object action not fetching the custom tables.

Add ability to send PDF documents back to Salesforce

Salesforce connector improvement

As the client is creating protocols of a customer appointment, it would be nice if the document as a pdf can be sent back to the appropriate case, lead, contact and account (not sure about tasks, events and notes).

Therefore, it should be possible to transfer the pdf as an attachment to Salesforce.

Objects types: Document and Attachment can not be created with the component

Description: Error is shown after object types Document and Attachment were selected

STR:

  1. Create flow: simple trigger -> Salesforce
  2. Select action Create Object and choose Document in dropdown list
  3. See Error message.
  4. Repeat steps 2 and 3 for object type: Attachment
  5. Pay attention to error message in logs: Exception happened when passing data down the chain Error: Can't convert salesforce soapType xsd:base64Binary to JSON schema type

AR:

Error message for Document: Error: Execution timeout Please see logs for more details.
Logs:

Starting your Docker container ...
[INFO  tini (1)] Spawned child process '/run.sh' with pid '7'
Starting application in apprunner...
Starting slug download ...
Successfully downloaded and extracted slug file
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://na98.salesforce.com/services/data/v25.0/sobjects/Document/describe
Have got 200 response from get to https://na98.salesforce.com/services/data/v25.0/sobjects/Document/describe
at Function.forEach (/home/apprunner/node_modules/lodash/lodash.js:9344:14)
at emitTwo (events.js:126:13)
Exception happened when passing data down the chain Error: Can't convert salesforce soapType xsd:base64Binary to JSON schema type
at arrayEach (/home/apprunner/node_modules/lodash/lodash.js:516:11)
at buildMetadata (/home/apprunner/lib/entry.js:60:47)
at _fieldToProperty (/home/apprunner/lib/helpers/metadata.js:29:11)
at addProperty (/home/apprunner/lib/helpers/metadata.js:85:31)
at Object.buildSchemaFromDescription (/home/apprunner/lib/helpers/metadata.js:83:5)
at Request.checkResponse [as _callback] (/home/apprunner/lib/helpers/http-utils.js:76:21)
at Request.self.callback (/home/apprunner/node_modules/request/request.js:185:22)
at Request.emit (events.js:214:7)
[INFO  tini (1)] Main child exited normally (with status '0')

Error message for Attachment: Error: Execution timeout Please see logs for more details.

Logs:

Starting your Docker container ...
[INFO  tini (1)] Spawned child process '/run.sh' with pid '7'
Starting application in apprunner...
Starting slug download ...
Successfully downloaded and extracted slug file
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://na98.salesforce.com/services/data/v25.0/sobjects/Attachment/describe
Have got 200 response from get to https://na98.salesforce.com/services/data/v25.0/sobjects/Attachment/describe
at addProperty (/home/apprunner/lib/helpers/metadata.js:85:31)
at arrayEach (/home/apprunner/node_modules/lodash/lodash.js:516:11)
at buildMetadata (/home/apprunner/lib/entry.js:60:47)
at Function.forEach (/home/apprunner/node_modules/lodash/lodash.js:9344:14)
at Object.buildSchemaFromDescription (/home/apprunner/lib/helpers/metadata.js:83:5)
at Request.checkResponse [as _callback] (/home/apprunner/lib/helpers/http-utils.js:76:21)
at Request.self.callback (/home/apprunner/node_modules/request/request.js:185:22)
Exception happened when passing data down the chain Error: Can't convert salesforce soapType xsd:base64Binary to JSON schema type
at _fieldToProperty (/home/apprunner/lib/helpers/metadata.js:29:11)
at emitTwo (events.js:126:13)
at Request.emit (events.js:214:7)
[INFO  tini (1)] Main child exited normally (with status '0')

ER:
Object with chosen object type is created accordingly to input data

Binary fields functionality enhancement

If you check the checkbox "Utilize data attachment..." it should take available attachment and put it in the request message binary field discarding any data mapped there. It means that do mapping for the binary field is redundant and confusing moreover if this field is mandatory:
image
Please, remove a binary field from input metadata in case if "Utilize data attachment..." checked.

Add paging to Salesforce triggers

During the initial sync of data from Salesforce to some third party API the component is trying to fetch as many records as possible till < 10K limit. This can potentially create a problematic situation during the sync process by hitting the queue processing limits.

Please add a paging capability to all trigger functions if possible. Ideally, it would be nice to have an ability to fetch by 100, 500 or 1000 records per call. This could potentially provide a solution for the #47 issue as well.

Write OIH Compliant "Lookup Object (at most 1)" Iteration 2 Action

OIH standards

There should be an action Lookup Object (at most 1) that adheres to the OIH standard for Salesforce. It likely makes sense to depricate the existing lookup behavior. It also makes sense to use the latest API version.

Iteration 1 (by ID only) is insufficient. Iteration 2 (by unique criteria) is required. It appears as though it is possible to write business rules that enforce uniqueness on one or more fields, but it is not possible to learn those rules dynamically. There are some db level settings to enforce uniqueness that can be read.

Suggestions for config fields:

  • Object Type (dynamic dropdown): All sobjects in describeGlobal where searchable is true. In the config object, the key should be name and the value should be ${sobject.label} (${sobject.name}).
  • Type Of Search (static dropdown): Two values: Unique Fields, All Fields
  • Field to Search (dynamic dropdown): If All Fields then all fields on the selected object. If Unique Fields all fields on the selected object where type is id or unique is true. In the config object, the key should be name and the value should be ${sobject.label} (${sobject.name}).
  • Allow Criteria to be omitted (dropdown/checkbox: yes/no): As the OIH standard describes
  • Allow zero results (dropdown/checkbox: yes/no): As the OIH standard describes

All fields on the matched object should be returned. At this point in time we do not need to worry about expanding parent or child linked objects. We may need to come back to this in the future.

Error message is shown in Action: Query after retrieve sample try when object is not found

Description: Error message Error! Sorry! The component did not provide any sample data. is shown in Action: Query after retrieve sample try when object is not found

Preconditions:
Use PS Salesforce creds

STR:

  1. Create flow Timer -> SF
  2. Choose Action: Query in SF.
  3. Input query that will not find any object (for example: "SELECT ID, Name from Contact where Name like 'tttt%'" )
  4. Click on "Retrieve Sample" button
  5. See error message.

AR: Error message Error! Sorry! The component did not provide any sample data. is shown in Action: Query after retrieve sample try when object is not found

ER: When Lookup failed (we were not able to find any parent object), In this case Lookup action should emit a single message with empty body.

Action: Create Object throws error massage on valid request

Description:
Action is unable to create new objects, probably the reason is some salesforce api changes, as now action try to use invalid request URL: see logs - Sending POST request to https://na98.salesforce.com/services/data/v[object Object]/sobjects/Contact

STR:

  1. Create flow: simple trigger-> salesforce: Action: Create Object
  2. Action: Create Object Input:
    Object: Cointact
    extID: generate UUID here
    Last Name: "some_lastname_test_00001"
  3. Retrieve sample
  4. See error message

AR:
error show:

Error!
Unexpected return code 404, expected 201, body [{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]

logs:

Error: Unexpected return code 404, expected 201, body [{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]
    at Request.checkResponse [as _callback] (/home/apprunner/lib/helpers/http-utils.js:93:33)
    at Request.self.callback (/home/apprunner/node_modules/request/request.js:185:22)
    at emitTwo (events.js:126:13)
    at Request.emit (events.js:214:7)
    at Request.<anonymous> (/home/apprunner/node_modules/request/request.js:1161:10)
    at emitOne (events.js:116:13)
    at Request.emit (events.js:211:7)
    at IncomingMessage.<anonymous> (/home/apprunner/node_modules/request/request.js:1083:12)
    at Object.onceWrapper (events.js:313:30)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:139:11)
    at process._tickCallback (internal/process/next_tick.js:181:9)
invokeModuleFunction – init is not found
Component execution initialized successfully
processMessage received
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
processMessage emit updateKeys
Sending POST request to https://na98.salesforce.com/services/data/v[object Object]/sobjects/Contact
Unexpected return code 404, expected 201, body [{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]
at emitTwo (events.js:126:13)
at Request.<anonymous> (/home/apprunner/node_modules/request/request.js:1161:10)
at Request.emit (events.js:211:7)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
message: 'The requested resource does not exist' } ],
statusCode: 404 } Error: Unexpected return code 404, expected 201, body [{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]
at Request.checkResponse [as _callback] (/home/apprunner/lib/helpers/http-utils.js:93:33)
at Request.emit (events.js:214:7)
at Request.emit (events.js:211:7)
at Object.onceWrapper (events.js:313:30)
at Request.checkResponse [as _callback] (/home/apprunner/lib/helpers/http-utils.js:93:33)
at Request.emit (events.js:214:7)
at IncomingMessage.<anonymous> (/home/apprunner/node_modules/request/request.js:1083:12)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at Request.self.callback (/home/apprunner/node_modules/request/request.js:185:22)
at emitTwo (events.js:126:13)
at Request.<anonymous> (/home/apprunner/node_modules/request/request.js:1161:10)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at emitOne (events.js:116:13)
at endReadableNT (_stream_readable.js:1064:12)
responseBody:
emitting SalesforceEntity error { Error: Unexpected return code 404, expected 201, body [{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]
at Request.self.callback (/home/apprunner/node_modules/request/request.js:185:22)
at Object.onceWrapper (events.js:313:30)
at process._tickCallback (internal/process/next_tick.js:181:9)
[ { errorCode: 'NOT_FOUND',
at emitOne (events.js:116:13)
at IncomingMessage.<anonymous> (/home/apprunner/node_modules/request/request.js:1083:12)
at emitNone (events.js:111:20)
at IncomingMessage.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at process._tickCallback (internal/process/next_tick.js:181:9)
processMessage emit error
processMessage emit end

ER:
New object created accordingly

Errors when tries to fetch the dynamic metadata

This error is not particularly a blocking issue but, nevertheless is visible.

When you have already configured and published flow and you are opening the flow page the logs windows appears probably to fetch the dynamic metadata and or connect to Salesforce. The logs window contains the following:

Starting your Docker container ...
[INFO  tini (1)] Spawned child process '/run.sh' with pid '7'
Starting application in apprunner...
Starting slug download ...
Successfully downloaded and extracted slug file
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
node: /usr/lib/libstdc++.so.6: no version information available (required by node)
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://na38.salesforce.com/services/data/v25.0/sobjects/Lead/describe
Have got 200 response from get to https://na38.salesforce.com/services/data/v25.0/sobjects/Lead/describe
at provideOptions (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:79:20)
at self.promiseDispatch.done (/home/apprunner/node_modules/q/q.js:883:30)
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at process._tickCallback (internal/process/next_tick.js:181:9) ]
Error: Missing value for parameter '{id}'. Please provide argument: 0
at interpolatePath (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:129:23)
at _fulfilled (/home/apprunner/node_modules/q/q.js:854:54)
at process._tickCallback (internal/process/next_tick.js:181:9) 0 [ Error: Missing value for parameter '{id}'. Please provide argument: 0
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at _fulfilled (/home/apprunner/node_modules/q/q.js:854:54)
at Promise.promise.promiseDispatch (/home/apprunner/node_modules/q/q.js:816:13)
at runSingle (/home/apprunner/node_modules/q/q.js:137:13)
at flush (/home/apprunner/node_modules/q/q.js:125:13)
at provideOptions (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:79:20)
at /home/apprunner/node_modules/q/q.js:877:14
at runSingle (/home/apprunner/node_modules/q/q.js:137:13)
at /home/apprunner/node_modules/q/q.js:877:14
at self.promiseDispatch.done (/home/apprunner/node_modules/q/q.js:883:30)
at Promise.promise.promiseDispatch (/home/apprunner/node_modules/q/q.js:816:13)
at flush (/home/apprunner/node_modules/q/q.js:125:13)
at interpolatePath (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:129:23)
[INFO  tini (1)] Main child exited normally (with status '0')

Salesforce BULK API Support

Saleforce has a Bulk API that we could potentially use in the connector. Here is the enhancement request to discuss the advantages, drawbacks and implementation strategies of it's support in elastic.io

xsd:time not supported

var FIELD_TYPE_TO_SCHEMA_TYPE = {

We need to add additional type as xsd:time = string

throw new Error("Can't conver salesforce soapType " + field.soapType + " to JSON schema type");

This gives an error like:

Starting your Docker container ...
Starting application in apprunner
Starting slug download ...
Successfully downloaded and extracted slug file
Writing config vars to .profile.d/config_vars
Detected 256 MB available memory
Detected 0.1 CPU available
Starting the application with node ./node_modules/elasticio-sailor-nodejs/runService.js getMetaModel
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://eu9.salesforce.com/services/data/v25.0/sobjects/Port_of_Call__c/describe
Have got 200 response from get to https://eu9.salesforce.com/services/data/v25.0/sobjects/Port_of_Call__c/describe
at _fieldToProperty (/app/lib/helpers/metadata.js:28:15)
Exception happened when passing data down the chain Error: Can't conver salesforce soapType xsd:time to JSON schema type
at addProperty (/app/lib/helpers/metadata.js:81:35)
at arrayEach (/app/node_modules/lodash/lodash.js:537:11)
at Object.buildSchemaFromDescription (/app/lib/helpers/metadata.js:79:7)
at buildMetadata (/app/lib/entry.js:57:53)
at Function.forEach (/app/node_modules/lodash/lodash.js:9359:14)
at Request.self.callback (/app/node_modules/request/request.js:188:22)
at Request.checkResponse [as _callback] (/app/lib/helpers/http-utils.js:76:21)
at Request.emit (events.js:191:7)
at emitTwo (events.js:106:13)
Starting application in apprunner
Starting slug download ...
Successfully downloaded and extracted slug file
Writing config vars to .profile.d/config_vars
Detected 0.1 CPU available
Detected 256 MB available memory
Starting the application with node ./node_modules/elasticio-sailor-nodejs/runService.js getMetaModel
Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://eu9.salesforce.com/services/data/v25.0/sobjects/Port_of_Call__c/describe
Have got 200 response from get to https://eu9.salesforce.com/services/data/v25.0/sobjects/Port_of_Call__c/describe
at _fieldToProperty (/app/lib/helpers/metadata.js:28:15)
Exception happened when passing data down the chain Error: Can't conver salesforce soapType xsd:time to JSON schema type
at addProperty (/app/lib/helpers/metadata.js:81:35)
at arrayEach (/app/node_modules/lodash/lodash.js:537:11)
at Function.forEach (/app/node_modules/lodash/lodash.js:9359:14)
at Object.buildSchemaFromDescription (/app/lib/helpers/metadata.js:79:7)
at buildMetadata (/app/lib/entry.js:57:53)
at Request.checkResponse [as _callback] (/app/lib/helpers/http-utils.js:76:21)
at Request.self.callback (/app/node_modules/request/request.js:188:22)
at emitTwo (events.js:106:13)
at Request.emit (events.js:191:7)

Add Trigger to Subscribe to Salesforce CommetD Event Bus

No Applicable OIH Guideline

Salesforce implements a streaming API. One can use this API to subscribe to events from Salesforce's internal bus mecahnism. The streaming API is implemented using the CometD protocol. For more info see:

The streaming API is supported by JSForce out of the box. https://jsforce.github.io/document/#streaming-api

The component performing the streaming would potentially require a realtime flow or at least a flow where the sailor self-kill feature is disabled. See https://github.com/elasticio/platform/issues/645 and https://github.com/elasticio/salesforce-stream-component

The authentication mechanism for this API is the same as all other Salesforce APIs. The config fields should be all the details to indicate what event types should be subscribed to.

Salesforce component should be able to receive new acess tokens when retrieving platform events

Steps to Reproduce (not sure if fully accurate):

  1. Create a realtime flow to listen to salesforce platform events
  2. Configure a valid credential.
  3. Start the flow.
  4. Execute another flow where the access token is refreshed.
  5. Wait more than an hour for the access token in the platform event to expire.
  6. Observe that after the first hour, the flow will no longer receive platform events as the tokens are no longer valid.

Dynamic metadada rendering failure

STR:

  1. Create flow: 1st step - simple trigger.
  2. Choose Query action and input some data: "wxww"
  3. Choose other New Case action

AR: Dynamic metadata is not rendered
ER: Dynamic metadata is rendered

Fix redirectUri for OAuth

Caching in SOQL Query

Would be great to cache resuts of the SOQL query, however we need to consider following aspects:

  • One should be able to enable/disable caching
  • Some SOQL results can be very large, but we coudl initially limit the number of rows that will be cached
  • Two SOQL queries should be considered equal only if the are letter-by-letter equal

Salesforce-specific functions for mapping

Once https://github.com/elasticio/magic-xpc/issues/23 will be in place we would need to add salesforce specific functions to lookup object ID or other fields based on the other object properties.

We can have two functions

  1. Referencing Objects By Object IDs, this function will do the Salesforce query as we do today just without the step declaration
  2. Referencing Objects By External IDs, this function will NOT do query but will send the request in the statement of the Create/Update.... to Salesforce with the relevant syntax that will tell SF to run the internal function of getting the internal ID base on the External ID

See help document from Magic xpi as reference

Salesforce.docx

Please indicate Salesforce API version

Please indicate which Salesforce API version this component is working. This is to prevent the customer complaining that some feature is not included.

Currently, the component is working with the v39 Salesforce API.

Salesforce component not picking the more the 10 K records from the module

My salesforce account has 86K records but when I'm running the flow then it's only picking 10K records from there.

steps to reproduce
Select any object which has more the 10K records from the salesforce component using the "New other objects" options and creates the flow and then runs it. It will pick up only 10K records from that module only.

**Actual Result **: Not picking the more the 10 K records from the module.

Expected Result It should pick up all the records from the salesforce component.

image

Create Object form is not showing for several objects in Flowground

When selecting one of the following Salesforce Objects within the Create Object action the form will not be shown and one can just click continue (obviously retrieving a sample will fail).

Objects:

Account Feed
Account History
Account Share
Activity History
Aggregate Result
Apex Debug Log
Apex Test Result
Approval
Asset Feed
Asset History
Assignment Rule
Apex Job
Campaign
Campaign Feed
Campaign Field History
Campaign Member Status
Campaign Share
Case Feed
Case History
Case Share
Case Status Value
Client Browser
Group Feed
Zone
Contact Feed
Contact History
Contact Share
Content Document Feed
Content Document History
Content Version History
Library
Contract Feed
Contract History
Contract Status Value
Scheduled Jobs
Dashboard
Dashboard Component
Dashboard Component Feed
Dashboard Feed
Email Status
Event Attendee
Event Feed
Feed Tracked Change
Fiscal Year Settings
Forecast Share
Lead Feed
Lead Share
Lead Status Value
Login History
Login IP
Name
News Feed
Note and Attachment
Open Activity
Opportunity Feed
Opportunity Field History
Opportunity History
Opportunity Share
Opportunity Stage
Order History
Partner Role Value
Period
Price Book History
Process Definition
Process Instance
Process Instance History
Process Instance Step
Process Node
Product Feed
Quick Text History
Report
Report Feed
Setup Audit Trail Entry
Site
Site Domain
Site Feed (called Site in the dropdown)
Site History
Solution Feed
Solution History
Solution Status Value
Task Feed
Task Priority Value
Task Status Value
User Feed
User License
User Preference
User Profile Feed
User Record Access
History: Custom Parameter Map
History: DocuSign Recipient Status
History: DocuSign Status
History: Docu Sign Envelope Configuration

Error logs are the same for all of those, this is the one for Account Feed:

Sending post request to https://login.salesforce.com/services/oauth2/token
Have got 200 response from post to https://login.salesforce.com/services/oauth2/token
Refreshed token from https://{{prodEnv}}.salesforce.com/services/oauth2/token
Sending get request to https://na98.salesforce.com/services/data/v25.0/sobjects/AccountFeed/describe
Have got 200 response from get to https://na98.salesforce.com/services/data/v25.0/sobjects/AccountFeed/describe
at interpolatePath (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:129:23)
at provideOptions (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:79:20)
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at provideOptions (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:79:20)
at Promise.promise.promiseDispatch (/home/apprunner/node_modules/q/q.js:816:13)
at /home/apprunner/node_modules/q/q.js:877:14
at process._tickCallback (internal/process/next_tick.js:181:9) 0 [ Error: Missing value for parameter '{id}'. Please provide argument: 0
Error: Missing value for parameter '{id}'. Please provide argument: 0
at _fulfilled (/home/apprunner/node_modules/q/q.js:854:54)
at /home/apprunner/node_modules/q/q.js:877:14
at runSingle (/home/apprunner/node_modules/q/q.js:137:13)
at _fulfilled (/home/apprunner/node_modules/q/q.js:854:54)
at interpolatePath (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:129:23)
at self.promiseDispatch.done (/home/apprunner/node_modules/q/q.js:883:30)
at provideOptions (/home/apprunner/node_modules/elasticio-rest-node/lib/resource.js:79:20)
at Promise.promise.promiseDispatch (/home/apprunner/node_modules/q/q.js:816:13)
at /home/apprunner/node_modules/q/q.js:877:14
at _combinedTickCallback (internal/process/next_tick.js:132:7)
at runSingle (/home/apprunner/node_modules/q/q.js:137:13)
at flush (/home/apprunner/node_modules/q/q.js:125:13)
at process._tickCallback (internal/process/next_tick.js:181:9) ]
[INFO  tini (1)] Main child exited normally (with status '0')```

"Query" Trigger has no ability to Generate Stub Sample

STR:

  1. Choose SF trigger "Query" as first step of flow.
  2. Fill field SOQL Query with any request to enable Continue button.
  3. Click on Add sample manually button.
  4. See that Generate Stub Sample is missing, so trigger has not such function.

AR: "Query" Trigger has no ability to Generate Stub Sample

ER: "Query" Trigger has ability to Generate Stub Sample

Subscribe to Platform events does provide platform error when failing to subscribe due to authentication issues

Steps to Reproduce

  1. Create a realtime flow with new SF credential that subscribes to SF platform events.
  2. Start the flow. Observe that the flow subscribes correctly with the Subscribed to PushTopic message.
[2019-03-21 15:36:56.422]: Trying to connect to jsforce...
[2019-03-21 15:36:56.532]: Finished message processing
[2019-03-21 15:36:56.533]: {"name":"sailor","hostname":"eio.4fb499d66c57a133e2df4a65.5c93a02abeeedf00121f4a6a.stepwhc7w","pid":8,"ELASTICIO_TASK_ID":"5c93a02abeeedf00121f4a6a","ELASTICIO_EXEC_ID":"62df829ce4674c2c8195acadf5cab0eb","ELASTICIO_STEP_ID":"step_1","ELASTICIO_COMP_ID":"5602b8a4e3465a0600000006","ELASTICIO_FUNCTION":"streamPlatformEvents","tag":"5c93a02abeeedf00121f4a6a","level":30,"deliveryTag":1,"messageId":"0a15f644-0a0f-40ff-b265-ee6eb4fda012","parentMessageId":"unknown","traceId":"90111195-3afd-4811-a4a0-31219db5fa24","messagesCount":0,"errorCount":0,"promises":0,"messageProcessingTime":114,"msg":"processMessage emit end","time":"2019-03-21T14:36:56.532Z","v":0}
[2019-03-21 15:36:56.917]: Subscribed to PushTopic: /event/Student_Id__e
  1. Stop the flow. Revoke access to the OAuth App by going to salesforce -> setup -> Connected Apps -> beta.elastic.io -> Uninstall
  2. Start the flow. Observe that no plaform error is produced even though the Subscribed to PushTopic message does not appear and authentication is not logically possible.
[2019-03-21 15:41:22.844]: Trying to connect to jsforce...
[2019-03-21 15:41:22.936]: Finished message processing
[2019-03-21 15:41:22.938]: {"name":"sailor","hostname":"eio.4fb499d66c57a133e2df4a65.5c93a02abeeedf00121f4a6a.stepkhm4h","pid":7,"ELASTICIO_TASK_ID":"5c93a02abeeedf00121f4a6a","ELASTICIO_EXEC_ID":"f78b85076eff4049aa7d5b00d727dfd4","ELASTICIO_STEP_ID":"step_1","ELASTICIO_COMP_ID":"5602b8a4e3465a0600000006","ELASTICIO_FUNCTION":"streamPlatformEvents","tag":"5c93a02abeeedf00121f4a6a","level":30,"deliveryTag":1,"messageId":"a4fdd419-1d6e-4ed8-b8ed-776182a1d05f","parentMessageId":"unknown","traceId":"ba753330-a662-4082-8fe2-0a20020e0f6c","messagesCount":0,"errorCount":0,"promises":0,"messageProcessingTime":96,"msg":"processMessage emit end","time":"2019-03-21T14:41:22.937Z","v":0}

Expected Result

The step in the flow produces an error on startup complaining about failed authentication.

difference in samples retrieved based on steps in flow

Scenario:

You have Webhook as 1st step, Code as 2nd and Salesforce as the 3rd step.

3steps

And you have Query:
query

Sample 1 and Sample 2 are identical.
sample1
sample2

But if you have Salesforce as the 1st step in your flow, you are going to get different samples.
sales1st

Query is the same:
query2

Different samples received:
sample3
sample4

Action: New Event Unable to create new event after all required fields are filled

Description: SF documentation says that in order to create new Event only 4 required fields must be filled (except creds): IsAllDayEvent, IsPrivate, IsRecurrence, IsReminderSet.
However, without two filled fields StartDateTime and EndDateTime action will throw an error (retrieve sample and run time):
Unexpected return code 400, expected 201, body [{"message":"Required fields are missing: [DurationInMinutes]","errorCode":"REQUIRED_FIELD_MISSING","fields":["DurationInMinutes"]},{"message":"Required fields are missing: [ActivityDateTime]","errorCode":"REQUIRED_FIELD_MISSING","fields":["ActivityDateTime"]}]

Needed investigation why this happens:

  • bug in SF docs
  • component bug
  • input metadata bug etc.

Generic Error Handler

Add an action that lets the user handle error data. SF emits an array of error messages and codes, suggestion is to let the user define what to do with these errors - email, webhook etc. This could be configured on the credentials as a global setting, or perhaps as an action.

Allow deep lookup

Deep lookup allows retrieving object with childs. For example, a user can get an Account object with Contact objects inside it.
List of objects which are going to be retrieved should be configurable by user.
A depth of child objects to retrieve should be limited to 1 (nearest childs) in order to avoid excessive complexity and message size.

Lookup action

New Lookup action should be created for the Salesforce component. This action should:

  • Have a first dynamically populated drop down select where customer can select an object type she would like to lookup, e.g. Account. Types in the dropdown should be dynamically fetched via Salesforce REST Metadata API,
  • Have a second dynamically populated drop down select that is dependent on the first one. In this select customer can select a field that is presented both with full name and internal name (e.g. External ID (extID__c)) (see example below on which fields should be presented to the user)
  • Have a single string inbound metadata that should be filled with the value using expression that would be compared with the value of the field above.

Which fields should be used for lookup?

Salesforce have a flexible field structure here is the sample metadata description of the Contact object (has a parent relation to Account):

{
  "fullName": "Contact",
  "actionOverrides": [],
  "compactLayoutAssignment": "SYSTEM",
  "enableFeeds": "true",
  "enableHistory": "false",
  "fields": [
    {
      "fullName": "AccountId",
      "trackFeedHistory": "true",
      "type": "Lookup"
    },
    {
      "fullName": "AssistantName",
      "trackFeedHistory": "false"
    },
    {
      "fullName": "OwnerId",
      "trackFeedHistory": "true",
      "type": "Lookup"
    },
    {
      "fullName": "Phone",
      "trackFeedHistory": "false"
    },
    {
      "fullName": "extID__c",
      "caseSensitive": "true",
      "description": "External ID",
      "externalId": "true",
      "label": "extID",
      "length": "255",
      "required": "false",
      "trackFeedHistory": "false",
      "type": "Text",
      "unique": "true"
    }
  ],
  "label": "Contact",
  "listViews": {
  },
  "searchLayouts": {},
  "sharingModel": "ControlledByParent"
}

Full JSON you can find here

Based on the information above list of fields available for lookup should include:

  • All fields of type Lookup
  • All fields where externalId=true
  • All fields where unique=true

Please note that external ID fields are not necessarily unique:

image

So for Contact based on example above we should see following fields:

  • AccountId
  • OwnerId
  • ReportsToId
  • External ID

How results should be handled

It is essential to agree on the proper result handling, for lookup action we may have multiple outcomes:

  1. Lookup failed - we were not able to find any parent object. In this case Lookup action should emit a single message with empty body.
  2. Lookup found a single object, e.g. we were able to identify an parent Account to the Contact - in this case a single message will be emitted, found object will be a body of the message
  3. Lookup found multiple objects (that may happen when lookup is made by non-unique field) - each found object will be emitted with the separate message

See more information about relationships between Salesforce objects here.

Re-enable unit tests

As part of #17, we disabled unit tests. This is because we made changes that would require changes to the existing unit tests however, modifying the existing unit tests locally is cumbersome as there as too outdated to run on the latest version of node.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.