Friday, August 21, 2020

Salesforce External Object and Limitations

Note - Another attempt to dilute my blog page and also to keep it revived. Justifies the blog title of a random post :-)

I was evaluating the Salesforce external object, OData 2.0 based connector and its limitations for one of my engagement. While a lot of information was available but it was scattered with nothing concrete available to decide when to choose what. This is an attempt consolidate some key limitations and pointers to choose between the two options. 

On side note - I love writing and making stories out of everything (only when it is in writing)


Evaluation Area

Custom Object

External Object

Data Model

Needs explicit column and data type details for every field for which information needs to be captured

External object data model gets auto created as soon as the external data source is created and synced. Additional columns if created on external object within Salesforce will not get populated unless external system sends that detail.

This will be an advantage as there is no additional information needed from market/requirement other than ODATA connector information and authentication details

Data visibility and sharing

Visibility can be controlled and customized as per requirement.

Visibility and sharing are “all or nothing”. Either all records are available in read-only mode or none of the records are visible. All external object data across the world will be visible to everyone. This might be a concern from requirement/legal perspective.

Record creation/editing/deletion

Record creation, editing and deletion permission can be defined as per requirement.

Records cannot be created/edited/deleted from salesforce and only read-only copy of data will be available. External object records can’t be created if user is not able to search the external id. Search will also be limited to 200 records at a time. Search filters will be limited to External Id (demo org has this limitation, but this needs to be cross checked). May be a concern from requirement perspective. Having said this there is a provision to write via custom route but will be having own limitations. Refer to salesforce link here for additional information on writable external object and additional license requirement.

Connectivity Constraints

Considering data will be inhouse there isn’t any concerns on external system availability.

Depends on external system availability/up-time for data visibility in search results. Row that gets returned can be relatively slower compared to search directly in external system. In case if external system connectivity is not working, user will keep on getting error about connectivity and will not be able to link external object record. May be a concern from requirement perspective. Search outcome will also be prone to system delays.

Storage Constraints

Considering data will be inhouse this will take consume available space. Each record takes almost 2KB and thereby total space consumed by roughly 60 Mn record is 12 GB of space

Storage is never counted against salesforce storage limit. Advantage as space consumed is 0 technically.

Validation and requirement rule on external object, reporting

Data is within salesforce and all salesforce-based features are available.

External object maps data from external system and thereby limitations of external objects are applicable. Activity, Attachment, Field tracking, notes, record level security, validation rule, workflow not available. Reporting record limit is 2K. Einstein analytics will be needed for reporting on entire data set. There is also limitation on custom fields. Entire list of limitation available in salesforce link here.  In case if there is a need for audit requirement, reporting or requirement validation on external object, those won’t be available. May be a concern from requirement perspective.

Call out limit (OData)

No such limit as record is stored within application

Each time user clicks on external object tab, view external object record, open a parent record to which external object is linked, search, access via apex will be counted against the limit. Limit is 20K OData call out per hour. Each time a parent record is opened with an external object record linked, will consume the limit. May be a concern from requirement perspective if application has a global footprint and high volume. Refer to additional details in salesforce link here.