@salesforce/afv-skills 1.29.0 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +1 -1
- package/skills/agentforce-architecture-analyze/README.md +2 -8
- package/skills/agentforce-architecture-analyze/SKILL.md +2 -2
- package/skills/agentforce-architecture-analyze/references/contract.json +4 -4
- package/skills/agentforce-architecture-analyze/references/soql_fields.md +1 -1
- package/skills/data360-activate/README.md +0 -1
- package/skills/data360-activate/SKILL.md +0 -2
- package/skills/data360-code-extension-generate/SKILL.md +15 -2
- package/skills/data360-connect/README.md +0 -2
- package/skills/data360-connect/SKILL.md +0 -2
- package/skills/data360-harmonize/SKILL.md +0 -1
- package/skills/data360-orchestrate/README.md +0 -7
- package/skills/data360-orchestrate/SKILL.md +0 -2
- package/skills/data360-prepare/README.md +0 -1
- package/skills/data360-prepare/SKILL.md +0 -1
- package/skills/data360-query/README.md +0 -1
- package/skills/data360-query/SKILL.md +0 -1
- package/skills/data360-segment/README.md +0 -1
- package/skills/data360-segment/SKILL.md +0 -2
- package/skills/dx-pkg-post-install-configure/SKILL.md +184 -0
- package/skills/experience-cms-brand-apply/SKILL.md +47 -16
- package/skills/experience-lwc-generate/README.md +3 -2
- package/skills/experience-lwc-generate/references/async-notification-patterns.md +1 -1
- package/skills/experience-lwc-generate/references/component-patterns.md +3 -3
- package/skills/experience-lwc-generate/references/flow-integration-guide.md +1 -1
- package/skills/experience-lwc-generate/references/lwc-best-practices.md +4 -4
- package/skills/experience-lwc-generate/references/scoring-and-testing.md +1 -1
- package/skills/experience-lwc-generate/references/state-management.md +2 -2
- package/skills/experience-lwc-generate/references/triangle-pattern.md +3 -3
- package/skills/experience-lwc-generate/scripts/post-tool-validate.py +2 -2
- package/skills/experience-lwc-generate/scripts/template_validator.py +1 -1
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +198 -34
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.sh +26 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.sh +15 -0
- package/skills/experience-ui-bundle-metadata-generate/SKILL.md +19 -8
- package/skills/experience-ui-bundle-metadata-generate/references/csp-metadata-format.md +2 -2
- package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.sh +30 -0
- package/skills/external-diagram-mermaid-generate/README.md +2 -2
- package/skills/external-diagram-mermaid-generate/SKILL.md +1 -3
- package/skills/external-diagram-mermaid-generate/assets/agentforce/agent-flow.md +4 -4
- package/skills/external-diagram-mermaid-generate/assets/architecture/system-landscape.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/b2b-commerce-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/campaigns-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/consent-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/files-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/forecasting-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/fsl-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/party-model-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/quote-order-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/revenue-cloud-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/sales-cloud-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/salesforce-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/datamodel/scheduler-erd.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/datamodel/service-cloud-erd.md +3 -3
- package/skills/external-diagram-mermaid-generate/assets/datamodel/territory-management-erd.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/integration/api-sequence.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code-pkce.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/authorization-code.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/client-credentials.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/device-authorization.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/jwt-bearer.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/oauth/refresh-token.md +1 -1
- package/skills/external-diagram-mermaid-generate/assets/oauth/user-agent-social-sign-on.md +2 -2
- package/skills/external-diagram-mermaid-generate/assets/role-hierarchy/user-hierarchy.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/color-palette.md +13 -13
- package/skills/external-diagram-mermaid-generate/references/diagram-conventions.md +5 -5
- package/skills/external-diagram-mermaid-generate/references/erd-conventions.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/mermaid-styling.md +2 -2
- package/skills/external-diagram-mermaid-generate/references/preview-guide.md +1 -1
- package/skills/external-diagram-mermaid-generate/references/usage-examples.md +9 -9
- package/skills/external-diagram-mermaid-generate/scripts/README.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/README.md +4 -5
- package/skills/integration-connectivity-connected-app-configure/SKILL.md +2 -2
- package/skills/integration-connectivity-connected-app-configure/references/example-usage.md +7 -7
- package/skills/integration-connectivity-connected-app-configure/references/migration-guide.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/oauth-flows-reference.md +1 -1
- package/skills/integration-connectivity-connected-app-configure/references/testing-validation-guide.md +3 -3
- package/skills/integration-connectivity-generate/README.md +1 -1
- package/skills/integration-connectivity-generate/SKILL.md +6 -0
- package/skills/integration-connectivity-generate/assets/callouts/rest-queueable-callout.cls +1 -1
- package/skills/integration-connectivity-generate/assets/external-services/external-service-operations.md +1 -1
- package/skills/integration-connectivity-generate/assets/soap/wsdl2apex-guide.md +1 -1
- package/skills/integration-connectivity-generate/references/callout-patterns.md +4 -0
- package/skills/integration-connectivity-generate/references/cdc-guide.md +2 -2
- package/skills/integration-connectivity-generate/references/event-driven-architecture-guide.md +5 -5
- package/skills/integration-connectivity-generate/references/event-patterns.md +3 -2
- package/skills/integration-connectivity-generate/references/external-services-guide.md +4 -1
- package/skills/integration-connectivity-generate/references/messaging-api-v2.md +2 -2
- package/skills/integration-connectivity-generate/references/named-credentials-automation.md +1 -1
- package/skills/integration-connectivity-generate/references/named-credentials-guide.md +12 -2
- package/skills/integration-connectivity-generate/references/platform-events-guide.md +3 -3
- package/skills/integration-connectivity-generate/references/rest-callout-patterns.md +1 -1
- package/skills/integration-connectivity-generate/references/scoring-rubric.md +1 -1
- package/skills/integration-connectivity-generate/references/security-best-practices.md +5 -2
- package/skills/integration-connectivity-generate/scripts/configure-named-credential.sh +16 -5
- package/skills/integration-connectivity-generate/scripts/set-api-credential.sh +11 -2
- package/skills/integration-connectivity-generate/scripts/suggest_credential_setup.py +4 -3
- package/skills/integration-connectivity-generate/scripts/validate_integration.py +1 -1
- package/skills/omnistudio-callable-apex-generate/README.md +1 -5
- package/skills/omnistudio-callable-apex-generate/SKILL.md +14 -4
- package/skills/omnistudio-callable-apex-generate/assets/pattern_callable_vanilla.cls +8 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +1 -1
- package/skills/omnistudio-datamapper-generate/SKILL.md +1 -1
- package/skills/omnistudio-datamapper-generate/assets/completion-summary-template.md +2 -2
- package/skills/omnistudio-datamapper-generate/references/best-practices.md +9 -9
- package/skills/omnistudio-datamapper-generate/references/naming-conventions.md +6 -6
- package/skills/omnistudio-datapacks-deploy/README.md +1 -1
- package/skills/omnistudio-datapacks-deploy/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +1 -1
- package/skills/omnistudio-dependencies-analyze/SKILL.md +12 -5
- package/skills/omnistudio-dependencies-analyze/references/dependency-patterns.md +9 -9
- package/skills/omnistudio-dependencies-analyze/references/namespace-guide.md +1 -1
- package/skills/omnistudio-epc-catalog-generate/README.md +1 -1
- package/skills/omnistudio-flexcard-generate/SKILL.md +11 -4
- package/skills/omnistudio-flexcard-generate/references/best-practices.md +6 -6
- package/skills/omnistudio-flexcard-generate/references/data-binding-guide.md +9 -9
- package/skills/omnistudio-integration-procedure-generate/SKILL.md +9 -1
- package/skills/omnistudio-integration-procedure-generate/references/element-types.md +3 -3
- package/skills/omnistudio-omniscript-generate/SKILL.md +2 -2
- package/skills/omnistudio-omniscript-generate/references/best-practices.md +1 -1
- package/skills/omnistudio-omniscript-generate/scripts/check-duplicate-omniscript.sh +8 -0
- package/skills/omnistudio-omniscript-generate/scripts/deploy-omniscript.sh +8 -0
- package/skills/platform-apex-logs-debug/README.md +2 -2
- package/skills/platform-apex-logs-debug/references/cli-commands.md +2 -2
- package/skills/platform-apex-logs-debug/references/debug-log-reference.md +16 -16
- package/skills/platform-apex-logs-debug/references/log-analysis-tools.md +2 -2
- package/skills/platform-apex-test-run/README.md +1 -1
- package/skills/platform-apex-test-run/references/test-fix-loop.md +2 -2
- package/skills/platform-apex-test-run/references/testing-best-practices.md +3 -3
- package/skills/platform-custom-field-generate/SKILL.md +12 -11
- package/skills/platform-custom-field-generate/references/advanced-picklists.md +17 -17
- package/skills/platform-custom-report-type-generate/SKILL.md +259 -0
- package/skills/platform-custom-report-type-generate/examples/AccountProjectsWithTasks.reportType-meta.xml +51 -0
- package/skills/platform-custom-report-type-generate/examples/AccountsWithIndustry.reportType-meta.xml +27 -0
- package/skills/platform-custom-report-type-generate/examples/AccountsWithProjects.reportType-meta.xml +44 -0
- package/skills/platform-custom-report-type-generate/references/category-values.md +32 -0
- package/skills/platform-custom-report-type-generate/references/errors-and-troubleshooting.md +24 -0
- package/skills/platform-data-manage/README.md +4 -4
- package/skills/platform-data-manage/references/bulk-testing-example.md +1 -1
- package/skills/platform-data-manage/references/crud-workflow-example.md +2 -2
- package/skills/platform-data-manage/references/orchestration.md +6 -6
- package/skills/platform-dataspace-access-configure/SKILL.md +318 -0
- package/skills/platform-docs-get/SKILL.md +4 -0
- package/skills/platform-docs-get/scripts/extract_salesforce_doc.py +78 -13
- package/skills/platform-encryption-configure/SKILL.md +122 -0
- package/skills/platform-encryption-configure/assets/EncryptionKey.settings-meta.xml +17 -0
- package/skills/platform-encryption-configure/assets/PlatformEncryption.settings-meta.xml +15 -0
- package/skills/platform-encryption-configure/assets/encrypted-field.field-meta.xml +22 -0
- package/skills/platform-encryption-configure/examples/cache-only-keys.settings-meta.xml +11 -0
- package/skills/platform-encryption-configure/references/encryption-schemes.md +34 -0
- package/skills/platform-encryption-configure/references/key-models.md +34 -0
- package/skills/platform-encryption-configure/references/tenant-secret-lifecycle.md +23 -0
- package/skills/platform-encryption-configure/scripts/validate-encryption-metadata.sh +54 -0
- package/skills/platform-flexipage-generate/SKILL.md +281 -346
- package/skills/platform-flexipage-generate/references/cli_commands.md +39 -0
- package/skills/platform-flexipage-generate/references/flexipage_fieldSection.md +162 -0
- package/skills/platform-flexipage-generate/references/flexipage_richText.md +84 -0
- package/skills/platform-flexipage-generate/references/identifiers_and_regions.md +167 -0
- package/skills/platform-flexipage-generate/references/mcp_action_examples.md +104 -0
- package/skills/platform-flexipage-generate/references/record_flexipage_dynamicHighlights.md +119 -0
- package/skills/platform-flexipage-generate/references/xml_rules.md +335 -0
- package/skills/platform-flexipage-generate/scripts/resolve-component-instructions.sh +42 -0
- package/skills/platform-flexipage-generate/scripts/scan-lwc-components.sh +113 -0
- package/skills/platform-metadata-api-context-get/SKILL.md +13 -10
- package/skills/platform-metadata-deploy/README.md +2 -2
- package/skills/platform-metadata-deploy/references/agent-deployment-guide.md +2 -2
- package/skills/platform-metadata-deploy/references/deployment-workflows.md +16 -16
- package/skills/platform-metadata-deploy/references/orchestration.md +3 -3
- package/skills/platform-metadata-deploy/references/trigger-deployment-safety.md +2 -2
- package/skills/platform-models-api-configure/SKILL.md +140 -0
- package/skills/platform-models-api-configure/scripts/get-orgjwt.sh +48 -0
- package/skills/platform-policy-rule-generate/SKILL.md +260 -0
- package/skills/platform-policy-rule-generate/references/deploy-errors.md +54 -0
- package/skills/platform-policy-rule-generate/references/fixtures-index.md +29 -0
- package/skills/platform-policy-rule-generate/references/policy-schema-full.md +250 -0
- package/skills/platform-policy-rule-generate/references/templates-access.md +132 -0
- package/skills/platform-policy-rule-generate/references/templates-advanced.md +58 -0
- package/skills/platform-policy-rule-generate/references/templates-record.md +75 -0
- package/skills/platform-policy-rule-generate/references/templates-transform.md +70 -0
- package/skills/platform-policy-rule-generate/references/templates.md +10 -0
- package/skills/platform-policy-rule-generate/references/ui-compatibility.md +142 -0
- package/skills/platform-soql-query/README.md +1 -1
- package/skills/platform-soql-query/SKILL.md +1 -1
- package/skills/platform-soql-query/references/anti-patterns.md +1 -1
- package/skills/platform-soql-query/references/field-coverage-rules.md +1 -1
- package/skills/platform-soql-query/references/query-optimization.md +1 -1
- package/skills/platform-soql-query/scripts/post-tool-validate.py +3 -3
- package/skills/data360-activate/CREDITS.md +0 -5
- package/skills/data360-connect/CREDITS.md +0 -5
- package/skills/data360-harmonize/CREDITS.md +0 -3
- package/skills/data360-orchestrate/CREDITS.md +0 -15
- package/skills/data360-orchestrate/UPSTREAM.md +0 -45
- package/skills/data360-prepare/CREDITS.md +0 -7
- package/skills/data360-query/CREDITS.md +0 -7
- package/skills/data360-segment/CREDITS.md +0 -3
- package/skills/experience-lwc-generate/CREDITS.md +0 -5
- package/skills/external-diagram-mermaid-generate/CREDITS.md +0 -46
- package/skills/external-diagram-visual-generate/CREDITS.md +0 -80
- package/skills/external-diagram-visual-generate/README.md +0 -83
- package/skills/external-diagram-visual-generate/SKILL.md +0 -207
- package/skills/external-diagram-visual-generate/assets/architecture/integration-flow.md +0 -55
- package/skills/external-diagram-visual-generate/assets/erd/core-objects.md +0 -131
- package/skills/external-diagram-visual-generate/assets/erd/custom-objects.md +0 -60
- package/skills/external-diagram-visual-generate/assets/lwc/dashboard-card.md +0 -45
- package/skills/external-diagram-visual-generate/assets/lwc/data-table.md +0 -57
- package/skills/external-diagram-visual-generate/assets/lwc/record-form.md +0 -60
- package/skills/external-diagram-visual-generate/assets/review/apex-review.md +0 -57
- package/skills/external-diagram-visual-generate/assets/review/lwc-review.md +0 -48
- package/skills/external-diagram-visual-generate/references/architect-aesthetic-guide.md +0 -257
- package/skills/external-diagram-visual-generate/references/examples-index.md +0 -35
- package/skills/external-diagram-visual-generate/references/gemini-cli-setup.md +0 -65
- package/skills/external-diagram-visual-generate/references/interview-questions.md +0 -529
- package/skills/external-diagram-visual-generate/references/iteration-workflow.md +0 -173
- package/skills/external-diagram-visual-generate/scripts/check-prerequisites.sh +0 -101
- package/skills/external-diagram-visual-generate/scripts/generate_image.py +0 -243
- package/skills/integration-connectivity-connected-app-configure/CREDITS.md +0 -3
- package/skills/integration-connectivity-generate/CREDITS.md +0 -5
- package/skills/omnistudio-callable-apex-generate/CREDITS.md +0 -9
- package/skills/omnistudio-datamapper-generate/CREDITS.md +0 -5
- package/skills/omnistudio-datapacks-deploy/CREDITS.md +0 -5
- package/skills/omnistudio-dependencies-analyze/CREDITS.md +0 -5
- package/skills/omnistudio-epc-catalog-generate/CREDITS.md +0 -14
- package/skills/omnistudio-flexcard-generate/CREDITS.md +0 -5
- package/skills/omnistudio-integration-procedure-generate/CREDITS.md +0 -5
- package/skills/omnistudio-omniscript-generate/CREDITS.md +0 -5
- package/skills/platform-apex-generate/CREDITS.md +0 -5
- package/skills/platform-apex-logs-debug/CREDITS.md +0 -22
- package/skills/platform-apex-test-generate/CREDITS.md +0 -5
- package/skills/platform-apex-test-run/CREDITS.md +0 -22
- package/skills/platform-data-manage/CREDITS.md +0 -5
- package/skills/platform-metadata-deploy/CREDITS.md +0 -25
- package/skills/platform-soql-query/CREDITS.md +0 -21
- /package/skills/omnistudio-callable-apex-generate/examples/Test_VlocityOpenInterfaceConversion/{MyCustomVlocityOpenInterface2.cls → MyCustomClass.cls} +0 -0
|
@@ -38,7 +38,7 @@ req.setEndpoint('https://api.example.com');
|
|
|
38
38
|
|
|
39
39
|
Request only necessary scopes:
|
|
40
40
|
|
|
41
|
-
```
|
|
41
|
+
```text
|
|
42
42
|
✅ read:orders write:orders
|
|
43
43
|
❌ admin:* read:* write:*
|
|
44
44
|
```
|
|
@@ -54,7 +54,7 @@ Request only necessary scopes:
|
|
|
54
54
|
|
|
55
55
|
For mobile or SPA clients:
|
|
56
56
|
|
|
57
|
-
```
|
|
57
|
+
```text
|
|
58
58
|
Use Authorization Code with PKCE, not Implicit flow
|
|
59
59
|
```
|
|
60
60
|
|
|
@@ -62,6 +62,9 @@ Use Authorization Code with PKCE, not Implicit flow
|
|
|
62
62
|
|
|
63
63
|
### Remote Site Settings
|
|
64
64
|
|
|
65
|
+
**Template**: `assets/endpoint-security/example.remoteSite-meta.xml`
|
|
66
|
+
**Template**: `assets/endpoint-security/example.cspTrustedSite-meta.xml`
|
|
67
|
+
|
|
65
68
|
- Only allow necessary domains
|
|
66
69
|
- Don't use wildcard domains
|
|
67
70
|
- Review and audit regularly
|
|
@@ -72,6 +72,12 @@ EXTERNAL_CREDENTIAL_NAME=$1
|
|
|
72
72
|
PRINCIPAL_NAME=$2
|
|
73
73
|
ORG_ALIAS=$3
|
|
74
74
|
|
|
75
|
+
# Validate EXTERNAL_CREDENTIAL_NAME for SOQL safety
|
|
76
|
+
if [[ ! "$EXTERNAL_CREDENTIAL_NAME" =~ ^[a-zA-Z0-9_]+$ ]]; then
|
|
77
|
+
echo -e "${RED}ERROR: Invalid credential name '$EXTERNAL_CREDENTIAL_NAME'. Only alphanumeric and underscores allowed.${NC}" >&2
|
|
78
|
+
exit 1
|
|
79
|
+
fi
|
|
80
|
+
|
|
75
81
|
# Validate sf CLI is installed
|
|
76
82
|
if ! command -v sf &> /dev/null; then
|
|
77
83
|
echo -e "${RED}Error: Salesforce CLI (sf) is not installed${NC}"
|
|
@@ -138,10 +144,16 @@ fi
|
|
|
138
144
|
echo -e "${GREEN}✓ API key received${NC}"
|
|
139
145
|
echo ""
|
|
140
146
|
|
|
147
|
+
# Escape single quotes to prevent Apex injection
|
|
148
|
+
API_KEY_ESCAPED="${API_KEY//\'/\\\'}"
|
|
149
|
+
EXTERNAL_CREDENTIAL_NAME_ESCAPED="${EXTERNAL_CREDENTIAL_NAME//\'/\\\'}"
|
|
150
|
+
PRINCIPAL_NAME_ESCAPED="${PRINCIPAL_NAME//\'/\\\'}"
|
|
151
|
+
|
|
141
152
|
# Generate Apex code to configure credential
|
|
142
153
|
echo -e "${BLUE}► Generating Apex code to configure credential...${NC}"
|
|
143
154
|
|
|
144
155
|
TEMP_APEX=$(mktemp /tmp/set-credential-XXXXXX.apex)
|
|
156
|
+
trap 'rm -f "$TEMP_APEX"' EXIT
|
|
145
157
|
|
|
146
158
|
cat > "$TEMP_APEX" << EOF
|
|
147
159
|
// Auto-generated by configure-named-credential.sh
|
|
@@ -151,14 +163,14 @@ cat > "$TEMP_APEX" << EOF
|
|
|
151
163
|
ConnectApi.CredentialInput newCredentials = new ConnectApi.CredentialInput();
|
|
152
164
|
|
|
153
165
|
// Specify the External Credential
|
|
154
|
-
newCredentials.externalCredential = '$
|
|
166
|
+
newCredentials.externalCredential = '$EXTERNAL_CREDENTIAL_NAME_ESCAPED';
|
|
155
167
|
|
|
156
168
|
// Set authentication protocol
|
|
157
169
|
newCredentials.authenticationProtocol = ConnectApi.CredentialAuthenticationProtocol.Custom;
|
|
158
170
|
|
|
159
171
|
// Define the principal
|
|
160
172
|
newCredentials.principalType = ConnectApi.CredentialPrincipalType.NamedPrincipal;
|
|
161
|
-
newCredentials.principalName = '$
|
|
173
|
+
newCredentials.principalName = '$PRINCIPAL_NAME_ESCAPED';
|
|
162
174
|
|
|
163
175
|
// Create credentials map
|
|
164
176
|
Map<String, ConnectApi.CredentialValueInput> creds = new Map<String, ConnectApi.CredentialValueInput>();
|
|
@@ -166,7 +178,7 @@ Map<String, ConnectApi.CredentialValueInput> creds = new Map<String, ConnectApi.
|
|
|
166
178
|
// Create API key parameter
|
|
167
179
|
ConnectApi.CredentialValueInput apiKeyParam = new ConnectApi.CredentialValueInput();
|
|
168
180
|
apiKeyParam.encrypted = true; // Required for security
|
|
169
|
-
apiKeyParam.value = '$
|
|
181
|
+
apiKeyParam.value = '$API_KEY_ESCAPED';
|
|
170
182
|
|
|
171
183
|
// Add to credentials map
|
|
172
184
|
creds.put('apiKey', apiKeyParam);
|
|
@@ -230,7 +242,6 @@ else
|
|
|
230
242
|
echo -e "${YELLOW}Apex execution output:${NC}"
|
|
231
243
|
echo "$APEX_RESULT"
|
|
232
244
|
echo ""
|
|
233
|
-
echo -e "${YELLOW}
|
|
234
|
-
echo "Review the file and run manually if needed"
|
|
245
|
+
echo -e "${YELLOW}Re-run this script to retry.${NC}"
|
|
235
246
|
exit 1
|
|
236
247
|
fi
|
|
@@ -45,6 +45,12 @@ SETTING_NAME=$1
|
|
|
45
45
|
API_KEY=$2
|
|
46
46
|
ORG_ALIAS=$3
|
|
47
47
|
|
|
48
|
+
# Validate SETTING_NAME to prevent SOQL injection
|
|
49
|
+
if [[ ! "$SETTING_NAME" =~ ^[a-zA-Z0-9_]+$ ]]; then
|
|
50
|
+
echo -e "${RED}Error: Invalid setting name '$SETTING_NAME'. Only alphanumeric and underscores allowed.${NC}" >&2
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
48
54
|
# If API key is "-", prompt securely
|
|
49
55
|
if [ "$API_KEY" = "-" ]; then
|
|
50
56
|
echo -e "${YELLOW}Enter API key (input hidden):${NC}"
|
|
@@ -58,6 +64,9 @@ if [ -z "$API_KEY" ]; then
|
|
|
58
64
|
exit 1
|
|
59
65
|
fi
|
|
60
66
|
|
|
67
|
+
# Escape single quotes in API_KEY for safe interpolation
|
|
68
|
+
API_KEY_ESCAPED="${API_KEY//\'/\\\'}"
|
|
69
|
+
|
|
61
70
|
# Validate org
|
|
62
71
|
echo -e "${BLUE}Validating org connection...${NC}"
|
|
63
72
|
if ! sf org display --target-org "$ORG_ALIAS" &> /dev/null; then
|
|
@@ -120,7 +129,7 @@ if [ -z "$EXISTING_ID" ]; then
|
|
|
120
129
|
echo -e "${BLUE}Creating new credential record...${NC}"
|
|
121
130
|
sf data create record \
|
|
122
131
|
--sobject API_Credentials__c \
|
|
123
|
-
--values "Name='$SETTING_NAME' API_Key__c='$
|
|
132
|
+
--values "Name='$SETTING_NAME' API_Key__c='$API_KEY_ESCAPED'" \
|
|
124
133
|
--target-org "$ORG_ALIAS"
|
|
125
134
|
echo -e "${GREEN}✓ Credential created${NC}"
|
|
126
135
|
else
|
|
@@ -128,7 +137,7 @@ else
|
|
|
128
137
|
sf data update record \
|
|
129
138
|
--sobject API_Credentials__c \
|
|
130
139
|
--record-id "$EXISTING_ID" \
|
|
131
|
-
--values "API_Key__c='$
|
|
140
|
+
--values "API_Key__c='$API_KEY_ESCAPED'" \
|
|
132
141
|
--target-org "$ORG_ALIAS"
|
|
133
142
|
echo -e "${GREEN}✓ Credential updated${NC}"
|
|
134
143
|
fi
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
Credential Setup Suggestion Hook for
|
|
3
|
+
Credential Setup Suggestion Hook for integration-connectivity-generate
|
|
4
4
|
|
|
5
5
|
Detects when credential metadata files are created and suggests
|
|
6
6
|
running the appropriate automation scripts.
|
|
@@ -19,6 +19,7 @@ import os
|
|
|
19
19
|
import re
|
|
20
20
|
import sys
|
|
21
21
|
from pathlib import Path
|
|
22
|
+
from typing import Optional
|
|
22
23
|
|
|
23
24
|
# File pattern matchers
|
|
24
25
|
PATTERNS = {
|
|
@@ -82,7 +83,7 @@ SCRIPT_RECOMMENDATIONS = {
|
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
|
|
85
|
-
def detect_file_type(file_path: str) -> str
|
|
86
|
+
def detect_file_type(file_path: str) -> Optional[str]:
|
|
86
87
|
"""Detect the credential file type from the file path."""
|
|
87
88
|
filename = os.path.basename(file_path)
|
|
88
89
|
|
|
@@ -204,7 +205,7 @@ def generate_suggestion_message(file_type: str, cred_name: str, file_context: di
|
|
|
204
205
|
if file_context.get('has_oauth'):
|
|
205
206
|
lines.extend([
|
|
206
207
|
'',
|
|
207
|
-
'⚠️ OAuth detected: Consider using /
|
|
208
|
+
'⚠️ OAuth detected: Consider using /integration-connectivity-connected-app-configure to',
|
|
208
209
|
' create the Connected App for this credential.',
|
|
209
210
|
])
|
|
210
211
|
|
|
@@ -17,7 +17,7 @@ rubric and migration guidance from legacy `VlocityOpenInterface` implementations
|
|
|
17
17
|
|
|
18
18
|
### 1. Invoke the skill
|
|
19
19
|
|
|
20
|
-
```
|
|
20
|
+
```text
|
|
21
21
|
Skill: omnistudio-callable-apex-generate
|
|
22
22
|
Request: "Create a callable implementation for Order actions with createOrder and cancelOrder"
|
|
23
23
|
```
|
|
@@ -66,10 +66,6 @@ The skill generates:
|
|
|
66
66
|
| platform-apex-test-run | Run tests and analyze coverage |
|
|
67
67
|
| platform-metadata-deploy | Deploy callable classes to an org |
|
|
68
68
|
|
|
69
|
-
## Documentation
|
|
70
|
-
|
|
71
|
-
- [Skill Instructions](SKILL.md)
|
|
72
|
-
|
|
73
69
|
### VlocityOpenInterface / VlocityOpenInterface2
|
|
74
70
|
|
|
75
71
|
The skill includes design (Phase 2) and implementation (Phase 3) guidance for the Open Interface signature `invokeMethod(String methodName, Map<String, Object> inputMap, Map<String, Object> outputMap, Map<String, Object> options)`. Use this when extending legacy OmniStudio/Vlocity integration points or building dual Callable + Open Interface implementations.
|
|
@@ -53,7 +53,7 @@ Then:
|
|
|
53
53
|
- Output schema (consistent response envelope)
|
|
54
54
|
|
|
55
55
|
**Recommended response envelope**:
|
|
56
|
-
```
|
|
56
|
+
```json
|
|
57
57
|
{
|
|
58
58
|
"success": true|false,
|
|
59
59
|
"data": {...},
|
|
@@ -70,7 +70,7 @@ Then:
|
|
|
70
70
|
|
|
71
71
|
When designing for legacy Open Interface extensions (or dual Callable + Open Interface support), map the signature:
|
|
72
72
|
|
|
73
|
-
```
|
|
73
|
+
```text
|
|
74
74
|
invokeMethod(String methodName, Map<String, Object> inputMap, Map<String, Object> outputMap, Map<String, Object> options)
|
|
75
75
|
```
|
|
76
76
|
|
|
@@ -171,7 +171,7 @@ action contract stable.
|
|
|
171
171
|
| **Testing** | 15 | Positive/negative/contract/bulk tests |
|
|
172
172
|
| **Documentation** | 10 | ApexDoc (`/** ... */` block comments — Salesforce Apex documentation standard) for class and action methods |
|
|
173
173
|
|
|
174
|
-
**Thresholds**:
|
|
174
|
+
**Thresholds**: [PASS] 90+ (Ready) | [REVIEW] 70-89 (Review) | [BLOCK] <70 (Block)
|
|
175
175
|
|
|
176
176
|
---
|
|
177
177
|
|
|
@@ -266,10 +266,20 @@ Deliverables produced by this skill:
|
|
|
266
266
|
| `examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls` | Phase 3 — migration pattern from legacy `VlocityOpenInterface` |
|
|
267
267
|
| `examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls` | Phase 4 — test class for VlocityOpenInterface migration example |
|
|
268
268
|
| `examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls` | Phase 3 — custom exception class deployed alongside VlocityOpenInterface conversion |
|
|
269
|
-
| `examples/Test_VlocityOpenInterfaceConversion/
|
|
269
|
+
| `examples/Test_VlocityOpenInterfaceConversion/MyCustomClass.cls` | Phase 3 — the original legacy VlocityOpenInterface class before migration |
|
|
270
270
|
| `examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md` | Reference — reasoning transcript for VlocityOpenInterface conversion |
|
|
271
271
|
| `examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls` | Phase 3 — migration pattern from `VlocityOpenInterface2` |
|
|
272
272
|
| `examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls` | Phase 4 — test class for VlocityOpenInterface2 migration example |
|
|
273
273
|
| `examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls` | Phase 3 — custom exception class deployed alongside VlocityOpenInterface2 conversion |
|
|
274
274
|
| `examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls` | Phase 3 — remote class used by the VlocityOpenInterface2 migration example |
|
|
275
275
|
| `examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md` | Reference — reasoning transcript for VlocityOpenInterface2 conversion |
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## Pre-Delivery Checklist
|
|
280
|
+
|
|
281
|
+
- [ ] `call()` null-checks `args` before accessing keys
|
|
282
|
+
- [ ] `IndustriesCallableException` class included in deployment package
|
|
283
|
+
- [ ] Namespace qualified for `omnistudio.VlocityOpenInterface2` (if applicable)
|
|
284
|
+
- [ ] `outputMap` keys documented per action (success and error cases)
|
|
285
|
+
- [ ] Migrated callers read return value instead of `outputMap` by reference
|
|
@@ -20,7 +20,14 @@ public with sharing class Industries_XxxCallable implements System.Callable {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
private Map<String, Object> actionOne(Map<String, Object> args) {
|
|
23
|
-
// 1. Validate required keys
|
|
23
|
+
// 1. Validate required keys
|
|
24
|
+
Map<String, Object> inputMap = (Map<String, Object>) args.get('inputMap');
|
|
25
|
+
if (inputMap == null || inputMap.isEmpty()) {
|
|
26
|
+
return new Map<String, Object>{
|
|
27
|
+
'success' => false,
|
|
28
|
+
'error' => 'Missing required input in inputMap'
|
|
29
|
+
};
|
|
30
|
+
}
|
|
24
31
|
// 2. Coerce types safely
|
|
25
32
|
// 3. Run business logic (SOQL with WITH USER_MODE, DML with sharing)
|
|
26
33
|
// 4. Return response envelope
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Task
|
|
4
4
|
|
|
5
|
-
Convert `
|
|
5
|
+
Convert `MyCustomClass.cls` (VlocityOpenInterface) to System.Callable and create a test class. Keep a transcript of reasoning and skills used.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -167,7 +167,7 @@ Use the **platform-metadata-deploy** skill: "Proceed with actual deployment to [
|
|
|
167
167
|
| **Performance** | 15 | Bounded queries with LIMIT/filters; Turbo Extract for read-heavy scenarios; minimal relationship depth; indexed filter fields |
|
|
168
168
|
| **Documentation** | 15 | Description on OmniDataTransform record; field mapping rationale documented; consuming components identified |
|
|
169
169
|
|
|
170
|
-
**Thresholds**:
|
|
170
|
+
**Thresholds**: [PASS] 90+ (Deploy) | [REVIEW] 67-89 (Review) | [BLOCK] <67 (Block - fix required)
|
|
171
171
|
|
|
172
172
|
---
|
|
173
173
|
|
|
@@ -4,7 +4,7 @@ Use these templates in Phase 3 (scoring output) and Phase 5 (completion summary)
|
|
|
4
4
|
|
|
5
5
|
## Scoring Output (Phase 3)
|
|
6
6
|
|
|
7
|
-
```
|
|
7
|
+
```text
|
|
8
8
|
Score: XX/100 Rating
|
|
9
9
|
|- Design & Naming: XX/20
|
|
10
10
|
|- Field Mapping: XX/25
|
|
@@ -17,7 +17,7 @@ Score: XX/100 Rating
|
|
|
17
17
|
|
|
18
18
|
## Completion Summary (Phase 5)
|
|
19
19
|
|
|
20
|
-
```
|
|
20
|
+
```text
|
|
21
21
|
Data Mapper Complete: [Name]
|
|
22
22
|
Type: [Extract|Transform|Load|Turbo Extract]
|
|
23
23
|
Target Object(s): [Object1, Object2]
|
|
@@ -65,7 +65,7 @@ Do NOT use Load when:
|
|
|
65
65
|
|
|
66
66
|
Always specify fields explicitly. Never rely on wildcard or "all fields" selection.
|
|
67
67
|
|
|
68
|
-
```
|
|
68
|
+
```text
|
|
69
69
|
Good: Account.Name, Account.Industry, Account.BillingCity
|
|
70
70
|
Bad: Account.* (extracts all fields, wastes bandwidth and heap)
|
|
71
71
|
```
|
|
@@ -74,14 +74,14 @@ Bad: Account.* (extracts all fields, wastes bandwidth and heap)
|
|
|
74
74
|
|
|
75
75
|
Data Mapper fields use dot-notation paths for input and output:
|
|
76
76
|
|
|
77
|
-
```
|
|
77
|
+
```text
|
|
78
78
|
Input Path: AccountData.Name
|
|
79
79
|
Output Path: Account.Name
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
For nested structures:
|
|
83
83
|
|
|
84
|
-
```
|
|
84
|
+
```text
|
|
85
85
|
Input Path: Response.data.accounts[0].name
|
|
86
86
|
Output Path: AccountList.Name
|
|
87
87
|
```
|
|
@@ -106,7 +106,7 @@ When loading records with lookup relationships:
|
|
|
106
106
|
2. Specify the lookup object and match field (e.g., `Account.Name` to resolve `AccountId`)
|
|
107
107
|
3. Handle cases where the lookup returns no match (set default or fail gracefully)
|
|
108
108
|
|
|
109
|
-
```
|
|
109
|
+
```text
|
|
110
110
|
Field: AccountId
|
|
111
111
|
Lookup Object: Account
|
|
112
112
|
Match Field: Name
|
|
@@ -132,7 +132,7 @@ For Extract and Turbo Extract, filter on indexed fields whenever possible:
|
|
|
132
132
|
|
|
133
133
|
Place the most selective filter first to reduce the result set early:
|
|
134
134
|
|
|
135
|
-
```
|
|
135
|
+
```text
|
|
136
136
|
Good: WHERE Id = :recordId AND Status = 'Active'
|
|
137
137
|
Bad: WHERE Status = 'Active' AND Id = :recordId
|
|
138
138
|
```
|
|
@@ -141,7 +141,7 @@ Bad: WHERE Status = 'Active' AND Id = :recordId
|
|
|
141
141
|
|
|
142
142
|
Limit relationship traversal to 2 levels for performance:
|
|
143
143
|
|
|
144
|
-
```
|
|
144
|
+
```text
|
|
145
145
|
Good: Account.Owner.Name (1 level)
|
|
146
146
|
Bad: Account.Parent.Parent.Parent.Owner.Name (3+ levels)
|
|
147
147
|
```
|
|
@@ -150,7 +150,7 @@ Bad: Account.Parent.Parent.Parent.Owner.Name (3+ levels)
|
|
|
150
150
|
|
|
151
151
|
Always set a LIMIT on Extract queries unless the consuming component guarantees a bounded input:
|
|
152
152
|
|
|
153
|
-
```
|
|
153
|
+
```text
|
|
154
154
|
LIMIT 200 -- Standard batch size
|
|
155
155
|
LIMIT 2000 -- Maximum for most UI scenarios
|
|
156
156
|
LIMIT 10000 -- Absolute maximum, use only with pagination
|
|
@@ -189,7 +189,7 @@ When mapping fields that may be null:
|
|
|
189
189
|
|
|
190
190
|
Extract supports parent-to-child relationship queries:
|
|
191
191
|
|
|
192
|
-
```
|
|
192
|
+
```text
|
|
193
193
|
Object: Account
|
|
194
194
|
Fields: Name, Industry
|
|
195
195
|
Child Relationship: Contacts (Contact)
|
|
@@ -212,7 +212,7 @@ Output structure:
|
|
|
212
212
|
|
|
213
213
|
Extract supports child-to-parent traversal via dot notation:
|
|
214
214
|
|
|
215
|
-
```
|
|
215
|
+
```text
|
|
216
216
|
Object: Contact
|
|
217
217
|
Fields: FirstName, LastName, Account.Name, Account.Industry
|
|
218
218
|
```
|
|
@@ -21,7 +21,7 @@ The `DR_` prefix stands for DataRaptor, the original product name. It remains th
|
|
|
21
21
|
|
|
22
22
|
### Format
|
|
23
23
|
|
|
24
|
-
```
|
|
24
|
+
```text
|
|
25
25
|
DR_[Type]_[PrimaryObject]_[Purpose]
|
|
26
26
|
```
|
|
27
27
|
|
|
@@ -56,14 +56,14 @@ For custom objects, include the namespace prefix if applicable but drop the `__c
|
|
|
56
56
|
|
|
57
57
|
When a Data Mapper spans multiple objects, name it after the primary (root) object:
|
|
58
58
|
|
|
59
|
-
```
|
|
59
|
+
```text
|
|
60
60
|
DR_Extract_Account_WithContactsAndOpps
|
|
61
61
|
DR_Extract_Order_WithLineItems
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
If the Data Mapper truly serves a cross-cutting concern, use a domain name instead:
|
|
65
65
|
|
|
66
|
-
```
|
|
66
|
+
```text
|
|
67
67
|
DR_Extract_CustomerProfile_Full
|
|
68
68
|
DR_Transform_ClaimSubmission_Normalize
|
|
69
69
|
```
|
|
@@ -88,7 +88,7 @@ Output field names in the Data Mapper JSON response should follow these conventi
|
|
|
88
88
|
|
|
89
89
|
Input paths reference the source data structure. Use consistent dot notation:
|
|
90
90
|
|
|
91
|
-
```
|
|
91
|
+
```text
|
|
92
92
|
AccountData.Name -- Simple field
|
|
93
93
|
AccountData.Owner.Name -- Relationship traversal
|
|
94
94
|
AccountData.Contacts[0] -- Collection index
|
|
@@ -99,7 +99,7 @@ RequestBody.payload.id -- Nested JSON path
|
|
|
99
99
|
|
|
100
100
|
Output paths define the JSON structure returned by the Data Mapper:
|
|
101
101
|
|
|
102
|
-
```
|
|
102
|
+
```text
|
|
103
103
|
AccountInfo.Name -- Nested output
|
|
104
104
|
AccountInfo.OwnerName -- Flattened relationship
|
|
105
105
|
AccountInfo.Contacts -- Collection output
|
|
@@ -126,7 +126,7 @@ Result.status -- Top-level result wrapper
|
|
|
126
126
|
|
|
127
127
|
Data Mapper names should be environment-agnostic. Do not include environment identifiers in the name:
|
|
128
128
|
|
|
129
|
-
```
|
|
129
|
+
```text
|
|
130
130
|
Bad: DR_Extract_Account_Details_DEV
|
|
131
131
|
Bad: DR_Extract_Account_Details_v2
|
|
132
132
|
Good: DR_Extract_Account_Details
|
|
@@ -14,7 +14,7 @@ Salesforce Industries DataPack deployment automation using Vlocity Build. Export
|
|
|
14
14
|
|
|
15
15
|
Invoke this skill when working with OmniStudio/Vlocity DataPack deployments:
|
|
16
16
|
|
|
17
|
-
```
|
|
17
|
+
```text
|
|
18
18
|
Skill: omnistudio-datapacks-deploy
|
|
19
19
|
Request: "Deploy my OmniStudio DataPacks to UAT using Vlocity Build and include retry guidance."
|
|
20
20
|
```
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
projectPath: ../../../../
|
|
2
|
-
expansionPath: skills/
|
|
2
|
+
expansionPath: skills/omnistudio-epc-catalog-generate/examples/business-internet-plus-bundle
|
|
3
3
|
|
|
4
4
|
# Deterministic scope for this validation example.
|
|
5
5
|
manifest:
|
|
@@ -190,7 +190,7 @@ sf data query --query "SELECT Id, Type, SubType, Language, IsActive FROM OmniPro
|
|
|
190
190
|
|
|
191
191
|
#### Algorithm: BFS with Circular Detection
|
|
192
192
|
|
|
193
|
-
```
|
|
193
|
+
```text
|
|
194
194
|
1. Initialize empty graph G and visited set V
|
|
195
195
|
2. For each root component C:
|
|
196
196
|
a. Enqueue C into work queue Q
|
|
@@ -221,7 +221,7 @@ OmniScript and IP elements store references in the `PropertySetConfig` JSON fiel
|
|
|
221
221
|
| Apex Remote Action | `remoteClass` | Apex Class |
|
|
222
222
|
|
|
223
223
|
**Parsing PropertySetConfig**:
|
|
224
|
-
```
|
|
224
|
+
```text
|
|
225
225
|
For each OmniProcessElement:
|
|
226
226
|
1. Read PropertySetConfig (JSON string)
|
|
227
227
|
2. Parse JSON
|
|
@@ -235,7 +235,7 @@ For each OmniProcessElement:
|
|
|
235
235
|
|
|
236
236
|
FlexCards store their data source configuration in the `DataSourceConfig` JSON field (NOT `Definition` — that field does not exist on `OmniUiCard`):
|
|
237
237
|
|
|
238
|
-
```
|
|
238
|
+
```text
|
|
239
239
|
Parse DataSourceConfig JSON:
|
|
240
240
|
1. Access dataSource object (singular, not array)
|
|
241
241
|
2. For each dataSource where type === 'IntegrationProcedures' (note: PLURAL):
|
|
@@ -254,7 +254,7 @@ Parse DataSourceConfig JSON:
|
|
|
254
254
|
|
|
255
255
|
Data Mappers reference Salesforce objects via their items:
|
|
256
256
|
|
|
257
|
-
```
|
|
257
|
+
```text
|
|
258
258
|
For each OmniDataTransformItem:
|
|
259
259
|
1. Read InputObjectName → source sObject
|
|
260
260
|
2. Read OutputObjectName → target sObject
|
|
@@ -343,7 +343,7 @@ graph LR
|
|
|
343
343
|
|
|
344
344
|
#### Output Format 3: Human-Readable Report
|
|
345
345
|
|
|
346
|
-
```
|
|
346
|
+
```text
|
|
347
347
|
OmniStudio Dependency Report
|
|
348
348
|
=============================
|
|
349
349
|
Org Namespace: Core (Industries)
|
|
@@ -468,6 +468,13 @@ sf data query --query "SELECT Id, OmniDataTransformationId, InputObjectName, Out
|
|
|
468
468
|
|
|
469
469
|
---
|
|
470
470
|
|
|
471
|
+
## Pre-Delivery Checklist
|
|
472
|
+
|
|
473
|
+
- [ ] Namespace detected before any downstream queries
|
|
474
|
+
- [ ] Orchestration order followed (this skill runs first in the chain)
|
|
475
|
+
|
|
476
|
+
---
|
|
477
|
+
|
|
471
478
|
## Reference File Index
|
|
472
479
|
|
|
473
480
|
| File | When to read |
|
|
@@ -10,7 +10,7 @@ OmniStudio components form a directed graph where each component type can refere
|
|
|
10
10
|
|
|
11
11
|
## Dependency Direction Summary
|
|
12
12
|
|
|
13
|
-
```
|
|
13
|
+
```text
|
|
14
14
|
OmniScript ──→ Integration Procedure (via IP Action element)
|
|
15
15
|
OmniScript ──→ Data Mapper (via DataRaptor Action element)
|
|
16
16
|
OmniScript ──→ OmniScript (via embedded OmniScript element)
|
|
@@ -206,7 +206,7 @@ Integration Procedures use the same element types as OmniScripts but are filtere
|
|
|
206
206
|
|
|
207
207
|
An Integration Procedure can call another Integration Procedure, creating a chain:
|
|
208
208
|
|
|
209
|
-
```
|
|
209
|
+
```text
|
|
210
210
|
IP: OrderValidation
|
|
211
211
|
└── IP Action → IP: CustomerLookup
|
|
212
212
|
└── DR Action → DM: CustomerExtract
|
|
@@ -322,7 +322,7 @@ Each `OmniDataTransformItem` (Core) or `DRMapItem__c` (Vlocity) record contains:
|
|
|
322
322
|
|
|
323
323
|
### Extract Type Data Mapper Example
|
|
324
324
|
|
|
325
|
-
```
|
|
325
|
+
```text
|
|
326
326
|
DM: AccountExtract (Type: Extract)
|
|
327
327
|
├── Item 1: InputObjectName = "Account"
|
|
328
328
|
│ InputFieldName = "Name"
|
|
@@ -339,7 +339,7 @@ Dependencies: Account (read), Contact (read)
|
|
|
339
339
|
|
|
340
340
|
### Load Type Data Mapper Example
|
|
341
341
|
|
|
342
|
-
```
|
|
342
|
+
```text
|
|
343
343
|
DM: OrderCreate (Type: Load)
|
|
344
344
|
├── Item 1: OutputObjectName = "Order"
|
|
345
345
|
│ InputFieldName = "OrderData.accountId"
|
|
@@ -355,7 +355,7 @@ Dependencies: Order (write), OrderItem (write)
|
|
|
355
355
|
|
|
356
356
|
Transform type Data Mappers do not reference Salesforce objects directly — they map between data structures. They have no sObject dependencies but may participate in a chain:
|
|
357
357
|
|
|
358
|
-
```
|
|
358
|
+
```text
|
|
359
359
|
OmniScript → DR Extract (reads Account) → DR Transform (reshapes data) → DR Load (writes CustomObj__c)
|
|
360
360
|
```
|
|
361
361
|
|
|
@@ -373,7 +373,7 @@ Circular references happen when component A depends on component B, which direct
|
|
|
373
373
|
|
|
374
374
|
### Detection Algorithm
|
|
375
375
|
|
|
376
|
-
```
|
|
376
|
+
```javascript
|
|
377
377
|
function detectCircularDependencies(graph):
|
|
378
378
|
cycles = []
|
|
379
379
|
for each node N in graph:
|
|
@@ -402,7 +402,7 @@ function dfs(node, visited, path, graph, cycles):
|
|
|
402
402
|
|
|
403
403
|
When a cycle is detected, report it clearly:
|
|
404
404
|
|
|
405
|
-
```
|
|
405
|
+
```text
|
|
406
406
|
CIRCULAR DEPENDENCY DETECTED:
|
|
407
407
|
OS:editAccount → IP:validateAccount → OS:editAccount
|
|
408
408
|
|
|
@@ -421,7 +421,7 @@ a termination condition.
|
|
|
421
421
|
|
|
422
422
|
### Step-by-Step Process
|
|
423
423
|
|
|
424
|
-
```
|
|
424
|
+
```text
|
|
425
425
|
1. DETECT namespace (see namespace-guide.md)
|
|
426
426
|
|
|
427
427
|
2. QUERY all container objects:
|
|
@@ -465,7 +465,7 @@ a termination condition.
|
|
|
465
465
|
|
|
466
466
|
To answer "what breaks if I change Data Mapper X?", reverse the dependency direction:
|
|
467
467
|
|
|
468
|
-
```
|
|
468
|
+
```text
|
|
469
469
|
Given: DM:AccountExtract
|
|
470
470
|
|
|
471
471
|
Direct dependents (components that reference this DM):
|
|
@@ -20,7 +20,7 @@ Salesforce OmniStudio exists under three distinct namespaces depending on the or
|
|
|
20
20
|
|
|
21
21
|
Run SOQL queries against each namespace's primary object. The first query that succeeds determines the namespace.
|
|
22
22
|
|
|
23
|
-
```
|
|
23
|
+
```text
|
|
24
24
|
1. Probe Core:
|
|
25
25
|
SELECT COUNT() FROM OmniProcess
|
|
26
26
|
→ Success? Namespace = Core. Stop.
|
|
@@ -15,7 +15,7 @@ Salesforce Industries CME EPC product-modeling skill for Product2-based catalog
|
|
|
15
15
|
|
|
16
16
|
### 1. Invoke the skill
|
|
17
17
|
|
|
18
|
-
```
|
|
18
|
+
```yaml
|
|
19
19
|
Skill: omnistudio-epc-catalog-generate
|
|
20
20
|
Request: "Create a Product2 offer bundle named Business Internet Plus with ProductCode BIZ-INT-PLUS-01, 3 child products, and generate all companion DataPack JSON files from the assets templates."
|
|
21
21
|
```
|
|
@@ -36,7 +36,7 @@ Expert OmniStudio engineer specializing in FlexCard UI components for Salesforce
|
|
|
36
36
|
|
|
37
37
|
FlexCards sit at the presentation layer of the OmniStudio stack. Ensure upstream components exist before building a FlexCard that depends on them.
|
|
38
38
|
|
|
39
|
-
```
|
|
39
|
+
```text
|
|
40
40
|
omnistudio-dependencies-analyze → omnistudio-datamapper-generate → omnistudio-integration-procedure-generate → omnistudio-omniscript-generate → omnistudio-flexcard-generate (you are here)
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -88,7 +88,7 @@ Read `references/best-practices.md` for layout patterns, SLDS compliance, access
|
|
|
88
88
|
|
|
89
89
|
Each FlexCard data source connects to an Integration Procedure (or other source type) and maps response fields to display elements.
|
|
90
90
|
|
|
91
|
-
```
|
|
91
|
+
```text
|
|
92
92
|
FlexCard → Data Source (type: IntegrationProcedure)
|
|
93
93
|
→ IP Name + Input Mapping
|
|
94
94
|
→ Response Field Mapping → Card Elements
|
|
@@ -165,7 +165,7 @@ Avoid these patterns when generating FlexCard definitions:
|
|
|
165
165
|
|
|
166
166
|
## Scoring Rubric (130 Points)
|
|
167
167
|
|
|
168
|
-
All FlexCards are validated against 7 categories. **Thresholds**:
|
|
168
|
+
All FlexCards are validated against 7 categories. **Thresholds**: [PASS] 90+ (Deploy) | [VERIFY] 67-89 (Review) | [BLOCK] <67 (Block - fix required)
|
|
169
169
|
|
|
170
170
|
| Category | Points | Criteria |
|
|
171
171
|
|----------|--------|----------|
|
|
@@ -211,7 +211,7 @@ Read `assets/omni-ui-card.json` for the complete OmniUiCard record template incl
|
|
|
211
211
|
|
|
212
212
|
Map IP response fields to card display elements using merge field syntax:
|
|
213
213
|
|
|
214
|
-
```
|
|
214
|
+
```text
|
|
215
215
|
IP Response: FlexCard Merge Field:
|
|
216
216
|
───────────── ─────────────────────
|
|
217
217
|
{ "Name": "Acme Corp" } → {Name}
|
|
@@ -322,3 +322,10 @@ Deliverables produced by this skill:
|
|
|
322
322
|
| `references/data-binding-guide.md` | Phase 2-3 — Data source types, merge field syntax, input parameter mapping, and multi-source coordination |
|
|
323
323
|
| `references/scoring-rubric.md` | Phase 3 — Full per-criterion breakdown of all 7 scoring categories (130 points) |
|
|
324
324
|
| `scripts/flexcard-commands.sh` | Phase 4 — All CLI commands for querying, retrieving, and deploying FlexCard metadata |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Pre-Delivery Checklist
|
|
329
|
+
|
|
330
|
+
- [ ] Upstream Integration Procedures exist and are active before FlexCard depends on them
|
|
331
|
+
- [ ] Orchestration order followed (FlexCard is last in the chain)
|