# Queue Metadata Flow Actions This project contains only the four Apex actions needed by the existing queue-creation Flow: - `CreateOriginPicklistItem` - `CreateEmailToCase` - `CreateCaseAutoResponseRule` - `CreateListView` `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.Origin` equals the supplied origin - `Case.ContactEmail` is not blank - `Case.Status` equals `Active` - `Case.RecordTypeId` equals `Customer Service` The sender is `Columbus McKinnon Support `. 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 ```bash 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 ```