Queue Metadata Flow Actions
This project contains only the four Apex actions needed by the existing queue-creation Flow:
CreateOriginPicklistItemCreateEmailToCaseCreateCaseAutoResponseRuleCreateListView
MetadataApiClient and MetadataXml are shared implementation helpers, not additional Flow actions.
Required Named Credential
Create a Named Credential named Salesforce_Metadata with:
- URL: your org's My Domain URL
- Authentication: OAuth 2.0 to the same Salesforce org
- Generate Authorization Header: enabled
- Principal permissions: API Enabled and Customize Application
The actions call Metadata API v65.0 through this credential.
Flow action contracts
Create Origin Picklist Item
Input: picklistItemName
Outputs: caseOrigin, metadataFullName, created
The action reads StandardValueSet.CaseOrigin, returns an existing case-insensitive match, or appends a value. The API name is generated from the label.
Create Email-To-Case
Inputs: routingName, emailAddress, caseOwnerId, caseOrigin
Outputs: metadataFullName, routingName, emailAddress, emailToCaseAddress, emailRoutingAddressId, created
The owner ID must be a queue Group. Priority is always Medium. Email-to-Case must already be enabled in Setup. Salesforce sends a verification message for a new routing address; the generated service address can therefore be blank immediately after creation.
Create Case Auto-Response Rule Entry
Inputs: autoResponseRuleId or autoResponseRuleName, optional sortOrder, caseOrigin, emailTemplateId
Outputs: asyncJobId, status, metadataFullName
This action is asynchronous because Salesforce requires file-based retrieve/deploy for auto-response rules. Salesforce stores the sort order as the rule-entry sequence in the metadata file; the supplied position inserts there, and a blank position appends the entry. It adds these criteria:
Case.Originequals the supplied originCase.ContactEmailis not blankCase.StatusequalsActiveCase.RecordTypeIdequalsCustomer Service
The sender is Columbus McKinnon Support <cmcoautoreply@columbusmckinnon.com>. The email template must be a Classic Email Template in a shared folder. The returned ID identifies the first coordinator job; the retrieve/deploy continuation jobs are visible in Setup's Apex Jobs page.
Create List View
Inputs: listViewLabel, objectApiName, groupId, displayColumns
Outputs: listViewApiName, metadataFullName, created
displayColumns is comma-separated and must use Metadata API list-view column names (for example, CASE.CASE_NUMBER,CASE.SUBJECT,CASE.STATUS). The action creates or replaces a queue-scoped view and excludes Resolved, Cancelled, and Closed statuses. The queue Group ID is resolved to its developer name for Metadata API use.
Transaction note
Place each callout action after a transaction boundary if earlier Flow elements create records. In particular, commit the queue and email template before invoking the Email-to-Case or auto-response actions.
Deploy
sf project deploy start --manifest manifest/package.xml --target-org YOUR_ORG
sf apex run test --class-names QueueMetadataActionsTest --result-format human --target-org YOUR_ORG