init
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
# 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 <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
|
||||
|
||||
```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
|
||||
```
|
||||
Reference in New Issue
Block a user