Salesforce Known Limitations
Last updated
Last updated
This article summarizes Salesforce's known issues and limitations that AutoRABIT users should consider:
For Salesforce API version 45.0, Salesforce does not allow deployment or retrieval of the "PlatformEventChannel" component in any environment. Therefore, AutoRABIT will not be able to retrieve the "PlatformEventChannel" component into the destination org even though the deployment is successful.
The above case is also similar to the "PermissionSetGroup" component (for API version 45.0 only). However, Salesforce has provision for selected customers to deploy the PermissionSetGroup component through a pilot program that requires agreement to specific terms and conditions. To be nominated to participate in the program, do contact Salesforce.
I am receiving the following error messages while trying to deploy the standard Task object: "Value too long for field: Name maximum length is: 40" Ans: This is a Salesforce limitation that creates duplicate list views while performing either Selective or Full Deployment. Salesforce's R&D team is currently working on addressing this issue.
While deploying controlled picklist fields with altered picklist values, I am getting an error: "control field "XXXXXXXX" is not found" Ans: This is a known limitation from Salesforce. Reference: https://trailblazer.salesforce.com/issues_view?id=a1p3A0000003eAfQAI&title=deploying-controlled-picklist-fields-with-altered-picklist-values-is-failing-with-error-control-field-xxxxxxxx-is-not-found
While deploying picklist fields with empty values in translations, the deployment is successful; but any blank values are ignored and not persisted in the destination org. This is a known issue from Salesforce, and the Salesforce team is working to resolve it. Reference: https://trailblazer.salesforce.com/issues_view?id=a1p3A000000KRWiQAO&title=unable-to-update-translation-record-with-blank-null-value-via-metadata-api
A report with multiple subfolders was created by the user in Salesforce, and this report was subsequently added to Skip Members in ARM. Next, a job was created and the Do Not Include Skip Members check box was selected. After the job was finished, it was discovered that the report had not been skipped as anticipated. Analysis revealed that Salesforce is not displaying information about the parent folder. So, ARM cannot retrieve the right file path for the reports contained in the sub-folders.
Important Notes:
This issue exists both for CI Jobs as well as Deployments, in DX Repo and Non-DX Repo.
Jobs with skipped reports without any subfolders are working as expected.
It is not possible to deploy the removal of Field dependency values from one org to another because Field Dependencies cannot be removed via Metadata API. This is expected behavior and a known limitation from Salesforce. Reference: https://developer.salesforce.com/docs/atlas.enus.api_meta.meta/api_meta/meta_field_types.htm#meta_type_valueset
A deployment in ARM might fail with the following error: `UNKNOWN_EXCEPTION: An unexpected error occurred. Please include this ErrorId if you contact support.` This API exception is thrown by Salesforce and not by AutoRABIT. We don't have any more information about these errors. Please get in touch with Salesforce Customer Support and provide them with the deployment Async Request ID and the error message for further assistance.
If the Flow Entry criteria formulas are failing to Commit/Deploy, we recommend updating the Salesforce API version to 55.0 or later in ARM, then re-perform the commit/deployment, because the entry-related attributes for the Flow metadata were introduced in the API version 55.0. Here's a list of the entry attributes only present in API 55.0 from Flow metadata documentation:
Reference: https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_visual_workflow.htm
To update the Salesforce API version, go to Admin > My Account > Salesforce Settings.
While performing an EZ-Commit, Salesforce Org is unable to retrieve the complete information on whether some members of the WaveDataflow metadata type are available or not in the package.xml file; and if it is available then whether it is Added, Modified, and Deleted. If the metadata type is available in the package.xml file, it will be listed in both Added/Modified and Deleted tabs. Select the metadata type in the correct tab, and it will become unavailable in the other tab immediately.
For Salesforce API version 57.0, OmniSupervisorConfig metadata type is not supported in Unlocked Package creation, but is working as expected in Commits and Deployments.
Listed below in the table are the metadata types which are currently not supported in the DX format:
AccountRelationshipShareRule | AnalyticSnapshot | Audience |
---|---|---|
ApexTestSuite | AIApplicationConfig | BlacklistedConsumer |
CMSConnectSource | CustomIndex | AIApplication |
ForecastingType | InboundCertificate | MLDataDefinition |
MLPredictionDefinition | ManagedContentType | MutingPermissionSet |
UserAuthCertificate | UserProvisioningConfig | DecisionMatrixDefinitionVersion |
UserAccessPolicy | ExternalAiModel |
|
Any profile permission (say Object’s FLS, User permission) which holds a Boolean value is changed from True to False, the change cannot be committed to a branch through AutoRABIT.
Any Object CRUD for the profile is only fetched if at least one value is chosen. For example, if I change an Object CRUD from Create, Read, Update to None, this change is not fetched for Commit. In order to fetch Object CRUD at least one of Create, Edit, Read, Delete, View All, Modify All options should be selected.
The same behavior is applicable for Permission Sets as well. Any permission that holds Boolean value is changed from True to False, the change cannot be committed to a branch through AutoRABIT.
Salesforce strongly recommends moving from SFDX to SF CLI because SF CLI is the newer, more powerful, and more flexible tool. SFDX is based on the Force.com CLI, which was originally designed for command-line developers.
SFCLI is based on the Salesforce CLI, which was designed for a wider range of developers, including those who prefer to use a graphical user interface (GUI).
Feature | SFDX | SF CLI |
Command-line interface | Yes | Yes |
Graphical user interface | No | Yes |
Programming languages supported | JavaScript | JavaScript, Python, Java, and more |
Power | Less powerful | More powerful |
Flexibility | Less flexible | More flexible |
Ease of use | More difficult to learn | Easier to learn |
Salesforce is aware of the limitations in SF CLI and is working to address them. One of the limitations that Salesforce is working to address includes:
Limitation 1: ERROR running force:source:deploy: INVALID_OPERATION: testLevel of NoTestRun cannot be used in production organizations" occurs although "RunLocalTests" is the default test level.
Description: When deploying to a production instance, 'force:source:deploy -m ApexClass,' you will receive an error:
'INVALID_OPERATION: testLevel of NoTestRun cannot be used in production organizations'
It should have a default testLevel of 'runLocalTests' for being a production org, but that isn't getting set.
Workaround: Run the sfdx command through [TESTLEVEL] option.
Sample command: sfdx force:source:deploy -m ApexClass -u xxx@xxx.xxx -l RunLocalTests
Use the following links for reference:
https://github.com/forcedotcom/cli/issues/2105
What is AutoRABIT doing to help customers?
AutoRABIT is committed to delivering an exceptional customer experience. We continue to work closely with Salesforce to overcome limitations where they exist. While we jointly pursue a more elegant solution, please use the workaround cited above and continue providing the much-needed feedback that makes AutoRABIT the best choice for Salesforce DevOps. Stay tuned for our weekly updates where new information will be communicated.
Execution Governors Limitations handled by AutoRABIT's Data Loader Pro
A total number of records retrieved by SOQL queries if it is greater than 50,000 limits- Dataloader Pro uses the "Querymore" operator to retrieve all the records that are greater than 50,000 limits.
SOQL query runtime before Salesforce cancels the transaction is above 120 seconds- As per the Salesforce execution governors limitation, the maximum SOQL query runtime before Salesforce cancels the transaction is 120 seconds. If it is beyond 120 seconds, this cannot be handled by our Dataloader Pro.
SOQL characters length should be 20,000 characters- Dataloader Pro divides a single query into multiple queries and execute them. Getting proper estimation while saving a Dataloader job, is very difficult as the queries are randomly generated. This normally occurs in two different scenarios:
When fetching parents and child records that are linked to the master objects and
When extracting data of a particular object with all the linked fields. Since there are millions of records, there are more chances of the query being timed out. Therefore, it is highly recommended to create two or more jobs rather than creating a single job; apply proper filters on the master objects and select a minimum multiple reference option during execution.
Salesforce does not retrieve Validation rules from destination org for a particular object if the same object is duplicated and is available in Deleted objects list.
Salesforce restricts access to create an External Id for the following objects in AutoRABIT. These listed objects are not supported in Dataloader Pro (for more details, refer to How to perform Dataloader Pro Operation, step 6) and Test Environment Setup (for more details, refer to Create a New Test Environment Setup, step 5).
ActionLinkGroupTemplate | ActivityHistory | AccountTeamMember | AggregateResult | EmailStatus | DuplicateRecordItem | DandBCompany |
ContentDistribution | FeedLike | FeedTrackedChange | Name | OpenActivity | ProcessInstanceHistory | AccountFeed |
AccountHistory | AccountPartner | AccountTag | ApexLog | ApexTestResult | AssetFeed | AssetTag |
AssignmentRule | AsyncApexJob | CallCenter | CampaignHistory | CampaignFeed | CampaignTag | CaseFeed |
CaseHistory | CaseSolution | CaseStatus | CaseTag | CaseTeamTemplateRecord | ChatterActivity | Community |
CollaborationGroupFeed | NewsFeed | NoteTag | OpportunityFeed | CollaborationInvitation | CollaborationGroupRecord | ContactShare |
ContactFeed | ContentDocumentFeed | ContractStatus | DashboardFeed | ContentDocumentHistory | DashboardComponent | EventAttendee |
ContactHistory | ContractFeed | CronTrigger | DashboardTag | ContentVersionHistory | DashboardComponentFeed | EventTag |
ContactTag | ContractTag | Dashboard | DocumentTag | EntitySubscription | EventRelation | FeedComment |
EventFeed | LeadHistory | LeadFeed | GoogleDoc | AttachedContentDocument | FiscalYearSettings | FeedItem |
ForecastShare | GroupMember | LeadTag | LoginHistory | OpportunityFieldHistory | CombinedAttachment | ProcessInstanceStep |
LeadStatus | OpportunityTag | Partner | OpportunityStage | OpportunityHistory | ProcessInstance | Report |
Period | Pricebook2History | PartnerRole | Product2Feed | OpportunityPartner | PermissionSetAssignment | ReportFeed |
SetupEntityAccess | QueueSobject | SolutionFeed | SolutionHistory | ContractHistory | SiteHistory | ReportTag |
SiteDomain | Site | TaskFeed |
| UserLicense | UserPreference | SolutionStatus |
TaskPriority | TaskStatus | TaskTag | UserFeed | TopicAssignment | SiteFeed | SolutionTag |
UserRecordAccess | Vote | ContentDocumentLink | AccountShare | AccountContactRole | ApexExecutionOverlayAction | CaseShare |
Activity | AdditionalNumber | ApexComponent | BusinessHours | BusinessProcess | CaseComment | CategoryData |
ApexTestQueueItem | UserProfileFeed | Approval | BrandTemplate | CampaignShare | CaseContactRole | CategoryNode |
CaseTeamMember | CaseTeamTemplate | CaseTeamTemplateMember | Document | CollaborationGroup | CollaborationGroupMember | PushTopic |
ContentVersion | ContentDocument | ContractContactRole | Holiday | EmailMessage | CollaborationGroupMemberRequest | IDEWorkspace |
EmailServicesAddress | EmailServicesFunction | LeadShare | MailmergeTemplate | Note | DocumentAttachmentMap | ObjectPermissions |
EmailTemplate | IDEPerspective | LiveChatTranscript | NoteAndAttachment | OpportunityCompetitor | OpportunityContactRole | Group |
ProcessInstanceWorkitem | OpportunityShare | WebLink | ApexPage | Organization | RecordType | StaticResource |
CaseTeamRole | TagDefinition | ApexTrigger | Folder | PermissionSet | Scontrol | UserRole |
SelfServiceUser | ApexClass | FieldPermissions | OrgWideEmailAddress | Profile | SlaProcess | AssetTokenEvent |
TraceFlag | Territory | ContentAsset | LookedUpFromActivity | AttachedContentNote | ObjectTerritory2Association | NetworkDiscoverableLogin |
User | EmailMessageRelation | UserAppInfo | FeedAttachment | NetworkActivityAudit | NetworkUserHistoryRecent | RecordActionHistory |
TodayGoal | TestSuiteMembership | SecurityCustomBaseline | Territory2Type | CampaignMemberStatus | ListEmailIndividualRecipient | EmbeddedServiceLabel |
TodayGoalShare | EmbeddedServiceDetail | OutgoingEmail | Territory2 | UserEmailPreferredPerson | UserEmailPreferredPersonShare | Knowledge__ka |
ApexTestRunResult | Stamp | OutgoingEmailRelation | BatchApexErrorEvent | ApexTestResultLimits | StampAssignment | Audience |
However, if the user wants to migrate data on the above objects, they can do so by using the Single Dataloader operation in AutoRABIT.
When you face the error below when registering a Salesforce Org in ARM, please follow the steps below.
Log in to your Salesforce Org.
Navigate to Setup.
Open "OAuth and OpenID Connect Settings" in the quick find box.
Disable the checkbox for "Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows."
Now try registering the org in ARM.
This is a limitation of Salesforce. See the article: URL: Feed Item Detail | Salesforce Trailblazer Community.