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. |