@salesforce/afv-skills 1.45.0 → 1.47.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/package.json +1 -1
- package/skills/agentforce-observe/SKILL.md +32 -4
- package/skills/agentforce-observe/references/ahm-alerts.md +719 -0
- package/skills/automation-flow-generate/SKILL.md +11 -5
- package/skills/consumer-goods-promotion-bo-api-deploy/SKILL.md +275 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/README.md +32 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls +75 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/SetCommentValue.cls-meta.xml +5 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/interview-answers.json +13 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/copy.json +10 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/create.json +20 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/assets/set-comment-value/payloads/update.json +16 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/conventions-and-payload-rules.md +273 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/generate-and-wire.md +236 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/reference-example-set-comment-value.md +132 -0
- package/skills/consumer-goods-promotion-bo-api-deploy/references/smoke-and-verify.md +211 -0
- package/skills/dx-code-analyzer-configure/scripts/validate-config.sh +14 -10
- package/skills/dx-code-analyzer-run/scripts/apply-fixes.js +45 -4
- package/skills/dx-code-analyzer-run/scripts/describe-rule.js +52 -32
- package/skills/dx-devops-project-manage/SKILL.md +197 -0
- package/skills/dx-devops-project-manage/examples/common-workflows.md +197 -0
- package/skills/dx-devops-project-manage/references/cli-commands.md +295 -0
- package/skills/dx-devops-project-manage/scripts/create-project.sh +48 -0
- package/skills/dx-devops-project-manage/scripts/list-projects.sh +51 -0
- package/skills/dx-devops-project-manage/scripts/update-project.sh +96 -0
- package/skills/education-cloud-academic-calendar-generate/SKILL.md +225 -0
- package/skills/education-cloud-academic-calendar-generate/examples/quarter-calendar.json +47 -0
- package/skills/education-cloud-academic-calendar-generate/examples/sample-output.md +57 -0
- package/skills/education-cloud-academic-calendar-generate/examples/semester-calendar.json +54 -0
- package/skills/education-cloud-academic-calendar-generate/references/calendar-systems.md +127 -0
- package/skills/education-cloud-academic-calendar-generate/references/date-validation.md +222 -0
- package/skills/education-cloud-academic-calendar-generate/references/foundation_prerequisites.md +40 -0
- package/skills/education-cloud-academic-calendar-generate/scripts/validate_calendar_dates.py +143 -0
- package/skills/education-cloud-course-catalog-migrate/SKILL.md +321 -0
- package/skills/education-cloud-course-catalog-migrate/references/gotchas-detail.md +16 -0
- package/skills/education-cloud-course-catalog-migrate/references/gotchas.md +16 -0
- package/skills/education-cloud-course-catalog-migrate/references/large-catalog-handling.md +42 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/batch_courses.py +36 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/detect_linked_courses.py +51 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/detect_modality_variants.py +48 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/resolve_api_version.py +43 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/split_course_code.py +39 -0
- package/skills/education-cloud-course-catalog-migrate/scripts/validate_completeness.py +54 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +3 -5
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +177 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/agent-and-subagents.md +151 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/customer-narration.md +34 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/execution-model.md +54 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/flows.md +82 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/grounding.md +199 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/permissions.md +183 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/platform-enablement.md +82 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +158 -0
- package/skills/education-cloud-student-recruitment-agent-configure/references/routing.md +141 -0
- package/skills/experience-cms-brand-apply/SKILL.md +5 -5
- package/skills/experience-cms-brand-create/SKILL.md +2 -2
- package/skills/experience-cms-content-generate/SKILL.md +1 -0
- package/skills/experience-cms-content-render/SKILL.md +173 -0
- package/skills/experience-cms-content-render/assets/angular/DetailPage.component.ts +25 -0
- package/skills/experience-cms-content-render/assets/angular/MediaRenderer.component.ts +133 -0
- package/skills/experience-cms-content-render/assets/angular/TypeList.component.ts +38 -0
- package/skills/experience-cms-content-render/assets/angular/TypeRenderer.component.ts +90 -0
- package/skills/experience-cms-content-render/assets/angular/cms-content.component.ts +248 -0
- package/skills/experience-cms-content-render/assets/angular/cms-item.service.ts +100 -0
- package/skills/experience-cms-content-render/assets/react/DetailPage.tsx +20 -0
- package/skills/experience-cms-content-render/assets/react/MediaRenderer.tsx +129 -0
- package/skills/experience-cms-content-render/assets/react/TypeList.tsx +40 -0
- package/skills/experience-cms-content-render/assets/react/TypeRenderer.tsx +64 -0
- package/skills/experience-cms-content-render/assets/react/heuristicRenderer.tsx +310 -0
- package/skills/experience-cms-content-render/assets/react/useCmsItem.ts +129 -0
- package/skills/experience-cms-content-render/assets/shared/cmsContentType.ts +49 -0
- package/skills/experience-cms-content-render/assets/shared/cmsCore.types.ts +96 -0
- package/skills/experience-cms-content-render/assets/shared/externalRefs.ts +55 -0
- package/skills/experience-cms-content-render/references/bulk-loading.md +60 -0
- package/skills/experience-cms-content-render/references/codegen-guardrails.md +111 -0
- package/skills/experience-cms-content-render/references/detail-pages.md +87 -0
- package/skills/experience-cms-content-render/references/embed-recipes.md +127 -0
- package/skills/experience-cms-content-render/references/failure-modes.md +96 -0
- package/skills/experience-cms-content-render/references/heuristic-render-rules.md +131 -0
- package/skills/experience-cms-content-render/references/init-scaffold.md +122 -0
- package/skills/experience-cms-content-render/references/interaction-model.md +173 -0
- package/skills/experience-cms-content-render/references/package-api.md +106 -0
- package/skills/experience-cms-content-render/references/schema-sync.md +114 -0
- package/skills/experience-cms-content-render/references/styling-scopes.md +65 -0
- package/skills/experience-cms-content-render/references/verify.md +49 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +2 -2
- package/skills/experience-content-media-stock-image-search/SKILL.md +5 -4
- package/skills/experience-search-coordinate/SKILL.md +198 -0
- package/skills/experience-search-coordinate/assets/search-payload-template.json +25 -0
- package/skills/experience-search-coordinate/references/content-route.md +313 -0
- package/skills/experience-search-coordinate/references/content-type-discovery.md +57 -0
- package/skills/experience-search-coordinate/references/media-route.md +172 -0
- package/skills/experience-search-coordinate/references/scope-resolution.md +14 -0
- package/skills/experience-ui-bundle-localize/SKILL.md +1 -1
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +5 -3
- package/skills/experience-ui-bundle-project-generate/SKILL.md +18 -14
- package/skills/experience-ui-bundle-project-generate/references/angular-project-generate.md +22 -0
- package/skills/experience-ui-bundle-project-generate/references/react-project-generate.md +20 -0
- package/skills/experience-ui-bundle-salesforce-data-access/SKILL.md +58 -54
- package/skills/experience-ui-bundle-salesforce-data-access/references/caching.md +6 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/graphiti-cli.md +2 -2
- package/skills/experience-ui-bundle-salesforce-data-access/references/migration.md +6 -0
- package/skills/experience-ui-bundle-salesforce-data-access/references/rest-and-integration.md +2 -1
- package/skills/experience-ui-bundle-salesforce-data-access/references/sdk-api.md +6 -0
- package/skills/experience-ui-bundle-site-generate/SKILL.md +59 -8
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-digital-experience.md +8 -3
- package/skills/experience-ui-bundle-site-generate/references/configure-metadata-language-settings.md +120 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +336 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/orchestration-flow.md +143 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +127 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-deploy-commands.md +116 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +111 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-overview.md +312 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +171 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-state-tracking.md +64 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-2-starter-config-trigger-handlers.md +122 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-overview.md +335 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-4-user-provisioning-user-provisioning-details.md +140 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +196 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-metadata-cache-generation.md +155 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +307 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +211 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/references/state-machine-and-changes.md +108 -0
- package/skills/life-sciences-kam-coordinate/SKILL.md +241 -0
- package/skills/life-sciences-kam-coordinate/references/orchestration-flow.md +152 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-application-flexipage-mapping.md +79 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-deploy-commands.md +131 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-kam-config-records.md +85 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-lifesci-metadata-deploy.md +112 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-overview.md +202 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-profile-layout-assignments.md +67 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-state-tracking.md +65 -0
- package/skills/life-sciences-kam-coordinate/references/stage-2-starter-config-trigger-handlers.md +123 -0
- package/skills/life-sciences-kam-coordinate/references/stage-4-participant-role-and-sprint.md +89 -0
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +337 -0
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +248 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-ipad-validation-script.md +35 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-metadata-cache-generation.md +155 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-details.md +146 -0
- package/skills/life-sciences-kam-coordinate/references/stage-6-user-provisioning-overview.md +89 -0
- package/skills/life-sciences-kam-coordinate/references/state-machine-and-changes.md +114 -0
- package/skills/life-sciences-prerequisites-validate/SKILL.md +138 -0
- package/skills/life-sciences-prerequisites-validate/references/checks-org-settings.md +190 -0
- package/skills/life-sciences-prerequisites-validate/references/checks-user-and-package.md +211 -0
- package/skills/life-sciences-territory-configure/SKILL.md +217 -0
- package/skills/life-sciences-territory-configure/references/territory-metadata.md +262 -0
- package/skills/platform-apex-logs-debug/SKILL.md +7 -7
- package/skills/platform-custom-application-generate/SKILL.md +4 -4
- package/skills/platform-custom-object-generate/SKILL.md +7 -7
- package/skills/platform-custom-tab-generate/SKILL.md +1 -1
- package/skills/platform-dsar-policy-manage/SKILL.md +272 -0
- package/skills/platform-dsar-policy-manage/references/configure.md +106 -0
- package/skills/platform-dsar-policy-manage/references/export-and-history.md +123 -0
- package/skills/platform-dsar-policy-manage/references/gap-analysis-guide.md +150 -0
- package/skills/platform-dsar-policy-manage/references/gap-scan.md +129 -0
- package/skills/platform-dsar-policy-manage/references/headless-sor.md +59 -0
- package/skills/platform-dsar-policy-manage/references/report-format.md +59 -0
- package/skills/platform-dsar-policy-manage/scripts/tests/__init__.py +0 -0
- package/skills/platform-dsar-policy-manage/scripts/tests/test_validate_policy_tree.py +76 -0
- package/skills/platform-dsar-policy-manage/scripts/validate-policy-tree.py +130 -0
- package/skills/platform-flexipage-generate/SKILL.md +4 -0
- package/skills/platform-list-view-generate/SKILL.md +1 -0
- package/skills/platform-salesforce-connect-adapter-generate/SKILL.md +359 -0
- package/skills/platform-salesforce-connect-adapter-generate/references/official-examples.md +69 -0
- package/skills/platform-salesforce-connect-adapter-generate/references/scenarios.md +187 -0
- package/skills/platform-soql-query/SKILL.md +8 -8
- package/skills/platform-value-set-generate/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +20 -27
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +47 -27
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +13 -9
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +104 -45
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Profile Layout Assignments Reference
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
After page layouts are deployed (Step 10), the skeleton profile files must be updated with `<layoutAssignments>` entries that map each layout to its object and optionally a record type.
|
|
6
|
+
|
|
7
|
+
Both profile files under `.lsc-starter-config/LSStarterConfig/PackageComponents/profiles/SkeletonProfile/` must be updated:
|
|
8
|
+
- `LSC Custom Profile.profile-meta.xml`
|
|
9
|
+
- `Admin.profile-meta.xml`
|
|
10
|
+
|
|
11
|
+
## Layout-to-Object/RecordType Mapping
|
|
12
|
+
|
|
13
|
+
| Layout File | Object | Record Type (if applicable) |
|
|
14
|
+
|-------------|--------|---------------------------|
|
|
15
|
+
| Account-HCO Account Layout | Account | Health_Care_Organization |
|
|
16
|
+
| ActivityPlanTerritory-Activity Plan Territory Layout | ActivityPlanTerritory | — |
|
|
17
|
+
| Case-LSC Case Layout | Case | Medical_Info_Request, Medical_Inquiry, Question |
|
|
18
|
+
| CommSubscription-Communication Subscription Layout | CommSubscription | — |
|
|
19
|
+
| CommSubscriptionChannelType-Communication Subscription Channel Type Layout | CommSubscriptionChannelType | — |
|
|
20
|
+
| CommSubscriptionConsent-Communication Subscription Consent Layout | CommSubscriptionConsent | — |
|
|
21
|
+
| HealthcareProvider-Healthcare Provider Layout | HealthcareProvider | Health_Care_Organization, Health_Care_Provider |
|
|
22
|
+
| Inquiry-LSC Inquiry Layout | Inquiry | Adverse_Event, LSC_General, Medical_Inquiry |
|
|
23
|
+
| InquiryQuestion-LSC Inquiry Question Layout | InquiryQuestion | — |
|
|
24
|
+
| InquiryQuestionAnswer-LSC Inquiry Question Answer Layout | InquiryQuestionAnswer | — |
|
|
25
|
+
| PersonAccount-Person Account HCP Layout | PersonAccount | Health_Care_Provider, PersonAccount |
|
|
26
|
+
| ProviderVisit-LSC Provider Visit Layout | ProviderVisit | — |
|
|
27
|
+
| ProviderVisitProdDiscussion-Product Feedback | ProviderVisitProdDiscussion | Patient_Tracking, Product_Feedback |
|
|
28
|
+
| Visit-LSC Visit Layout | Visit | — |
|
|
29
|
+
|
|
30
|
+
## XML Format for layoutAssignments
|
|
31
|
+
|
|
32
|
+
Insert these entries directly, right before the closing `</Profile>` tag in each file. This is a mechanical edit driven by the Step 10 layout selection — do not show the block for review or ask the user to confirm the profile edit (see the Step 11 note in `overview.md`). Placement inside `<Profile>` is not order-sensitive; before `</Profile>` is always valid.
|
|
33
|
+
|
|
34
|
+
### Without Record Type
|
|
35
|
+
|
|
36
|
+
```xml
|
|
37
|
+
<layoutAssignments>
|
|
38
|
+
<layout>Account-HCO Account Layout</layout>
|
|
39
|
+
</layoutAssignments>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### With Record Type
|
|
43
|
+
|
|
44
|
+
When a layout is assigned to specific record types, add one entry per record type:
|
|
45
|
+
|
|
46
|
+
```xml
|
|
47
|
+
<layoutAssignments>
|
|
48
|
+
<layout>Case-LSC Case Layout</layout>
|
|
49
|
+
<recordType>Case.Medical_Info_Request</recordType>
|
|
50
|
+
</layoutAssignments>
|
|
51
|
+
<layoutAssignments>
|
|
52
|
+
<layout>Case-LSC Case Layout</layout>
|
|
53
|
+
<recordType>Case.Medical_Inquiry</recordType>
|
|
54
|
+
</layoutAssignments>
|
|
55
|
+
<layoutAssignments>
|
|
56
|
+
<layout>Case-LSC Case Layout</layout>
|
|
57
|
+
<recordType>Case.Question</recordType>
|
|
58
|
+
</layoutAssignments>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Full layoutAssignments Block (All Layouts)
|
|
62
|
+
|
|
63
|
+
If all layouts are selected, add these entries to both profiles:
|
|
64
|
+
|
|
65
|
+
```xml
|
|
66
|
+
<layoutAssignments>
|
|
67
|
+
<layout>Account-HCO Account Layout</layout>
|
|
68
|
+
<recordType>Account.Health_Care_Organization</recordType>
|
|
69
|
+
</layoutAssignments>
|
|
70
|
+
<layoutAssignments>
|
|
71
|
+
<layout>ActivityPlanTerritory-Activity Plan Territory Layout</layout>
|
|
72
|
+
</layoutAssignments>
|
|
73
|
+
<layoutAssignments>
|
|
74
|
+
<layout>Case-LSC Case Layout</layout>
|
|
75
|
+
<recordType>Case.Medical_Info_Request</recordType>
|
|
76
|
+
</layoutAssignments>
|
|
77
|
+
<layoutAssignments>
|
|
78
|
+
<layout>Case-LSC Case Layout</layout>
|
|
79
|
+
<recordType>Case.Medical_Inquiry</recordType>
|
|
80
|
+
</layoutAssignments>
|
|
81
|
+
<layoutAssignments>
|
|
82
|
+
<layout>Case-LSC Case Layout</layout>
|
|
83
|
+
<recordType>Case.Question</recordType>
|
|
84
|
+
</layoutAssignments>
|
|
85
|
+
<layoutAssignments>
|
|
86
|
+
<layout>CommSubscription-Communication Subscription Layout</layout>
|
|
87
|
+
</layoutAssignments>
|
|
88
|
+
<layoutAssignments>
|
|
89
|
+
<layout>CommSubscriptionChannelType-Communication Subscription Channel Type Layout</layout>
|
|
90
|
+
</layoutAssignments>
|
|
91
|
+
<layoutAssignments>
|
|
92
|
+
<layout>CommSubscriptionConsent-Communication Subscription Consent Layout</layout>
|
|
93
|
+
</layoutAssignments>
|
|
94
|
+
<layoutAssignments>
|
|
95
|
+
<layout>HealthcareProvider-Healthcare Provider Layout</layout>
|
|
96
|
+
<recordType>HealthcareProvider.Health_Care_Organization</recordType>
|
|
97
|
+
</layoutAssignments>
|
|
98
|
+
<layoutAssignments>
|
|
99
|
+
<layout>HealthcareProvider-Healthcare Provider Layout</layout>
|
|
100
|
+
<recordType>HealthcareProvider.Health_Care_Provider</recordType>
|
|
101
|
+
</layoutAssignments>
|
|
102
|
+
<layoutAssignments>
|
|
103
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
104
|
+
<recordType>Inquiry.Adverse_Event</recordType>
|
|
105
|
+
</layoutAssignments>
|
|
106
|
+
<layoutAssignments>
|
|
107
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
108
|
+
<recordType>Inquiry.LSC_General</recordType>
|
|
109
|
+
</layoutAssignments>
|
|
110
|
+
<layoutAssignments>
|
|
111
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
112
|
+
<recordType>Inquiry.Medical_Inquiry</recordType>
|
|
113
|
+
</layoutAssignments>
|
|
114
|
+
<layoutAssignments>
|
|
115
|
+
<layout>InquiryQuestion-LSC Inquiry Question Layout</layout>
|
|
116
|
+
</layoutAssignments>
|
|
117
|
+
<layoutAssignments>
|
|
118
|
+
<layout>InquiryQuestionAnswer-LSC Inquiry Question Answer Layout</layout>
|
|
119
|
+
</layoutAssignments>
|
|
120
|
+
<layoutAssignments>
|
|
121
|
+
<layout>PersonAccount-Person Account HCP Layout</layout>
|
|
122
|
+
<recordType>PersonAccount.Health_Care_Provider</recordType>
|
|
123
|
+
</layoutAssignments>
|
|
124
|
+
<layoutAssignments>
|
|
125
|
+
<layout>PersonAccount-Person Account HCP Layout</layout>
|
|
126
|
+
<recordType>PersonAccount.PersonAccount</recordType>
|
|
127
|
+
</layoutAssignments>
|
|
128
|
+
<layoutAssignments>
|
|
129
|
+
<layout>ProviderVisit-LSC Provider Visit Layout</layout>
|
|
130
|
+
</layoutAssignments>
|
|
131
|
+
<layoutAssignments>
|
|
132
|
+
<layout>ProviderVisitProdDiscussion-Product Feedback</layout>
|
|
133
|
+
<recordType>ProviderVisitProdDiscussion.Patient_Tracking</recordType>
|
|
134
|
+
</layoutAssignments>
|
|
135
|
+
<layoutAssignments>
|
|
136
|
+
<layout>ProviderVisitProdDiscussion-Product Feedback</layout>
|
|
137
|
+
<recordType>ProviderVisitProdDiscussion.Product_Feedback</recordType>
|
|
138
|
+
</layoutAssignments>
|
|
139
|
+
<layoutAssignments>
|
|
140
|
+
<layout>Visit-LSC Visit Layout</layout>
|
|
141
|
+
</layoutAssignments>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Selective Assignment
|
|
145
|
+
|
|
146
|
+
If the user selected only specific layouts, include only the `<layoutAssignments>` entries for those layouts. For example, if only "Inquiry-LSC Inquiry Layout" and "Visit-LSC Visit Layout" were selected:
|
|
147
|
+
|
|
148
|
+
```xml
|
|
149
|
+
<layoutAssignments>
|
|
150
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
151
|
+
<recordType>Inquiry.Adverse_Event</recordType>
|
|
152
|
+
</layoutAssignments>
|
|
153
|
+
<layoutAssignments>
|
|
154
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
155
|
+
<recordType>Inquiry.LSC_General</recordType>
|
|
156
|
+
</layoutAssignments>
|
|
157
|
+
<layoutAssignments>
|
|
158
|
+
<layout>Inquiry-LSC Inquiry Layout</layout>
|
|
159
|
+
<recordType>Inquiry.Medical_Inquiry</recordType>
|
|
160
|
+
</layoutAssignments>
|
|
161
|
+
<layoutAssignments>
|
|
162
|
+
<layout>Visit-LSC Visit Layout</layout>
|
|
163
|
+
</layoutAssignments>
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Deploy Updated Profiles
|
|
167
|
+
|
|
168
|
+
After adding layout assignments, deploy both profiles:
|
|
169
|
+
```bash
|
|
170
|
+
sf project deploy start --source-dir .lsc-starter-config/LSStarterConfig/PackageComponents/profiles/SkeletonProfile --target-org <org>
|
|
171
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Deployment State Tracking
|
|
2
|
+
|
|
3
|
+
Maintain a deployment state object throughout the workflow. This enables pause/resume and partial-deploy recovery.
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
State = {
|
|
7
|
+
targetOrg: string,
|
|
8
|
+
steps: [
|
|
9
|
+
{ name: "StandardValueSets", status: "pending|in-progress|done|failed", detail?: string },
|
|
10
|
+
{ name: "Objects", status: "pending|in-progress|done|failed", detail?: string },
|
|
11
|
+
{ name: "ProductSpecificationTypes", status: "pending|in-progress|done|failed", detail?: string },
|
|
12
|
+
{ name: "ProductSpecificationRecTypes", status: "pending|in-progress|done|failed", detail?: string },
|
|
13
|
+
{ name: "QuickActions", status: "pending|in-progress|done|failed", detail?: string },
|
|
14
|
+
{ name: "SkeletonProfile", status: "pending|in-progress|done|failed", detail?: string },
|
|
15
|
+
{ name: "LifeSciConfigRecords", status: "pending|in-progress|done|failed", detail?: string },
|
|
16
|
+
{ name: "LifeSciMetadataRecords", status: "pending|in-progress|done|failed", detail?: string },
|
|
17
|
+
{ name: "TriggerHandlers", status: "pending|in-progress|done|failed", detail?: string },
|
|
18
|
+
{ name: "PageLayouts", status: "pending|in-progress|done|failed", selected?: [], deployed?: [], detail?: string },
|
|
19
|
+
{ name: "ProfileLayoutAssignments", status: "pending|in-progress|done|failed", detail?: string },
|
|
20
|
+
{ name: "FlexiPages", status: "pending|in-progress|done|failed", selected?: [], deployed?: [], detail?: string },
|
|
21
|
+
{ name: "ApplicationUpdate", status: "pending|in-progress|done|failed", detail?: string }
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
On failure at any step, show:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
Deployment paused at step: <StepName>
|
|
30
|
+
Completed: <N>/<Total> steps
|
|
31
|
+
Failed component: <component-name>
|
|
32
|
+
Error: <error-message>
|
|
33
|
+
|
|
34
|
+
Options:
|
|
35
|
+
1. Retry failed step
|
|
36
|
+
2. Skip and continue
|
|
37
|
+
3. Roll back (where applicable)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Wait for user choice before continuing.
|
|
41
|
+
|
|
42
|
+
## Progress Display
|
|
43
|
+
|
|
44
|
+
After each step completes, display progress:
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
[done] Step 1/13: StandardValueSets — deployed
|
|
48
|
+
[done] Step 2/13: Objects — deployed
|
|
49
|
+
[done] Step 3/13: ProductSpecificationTypes — deployed
|
|
50
|
+
[current] Step 4/13: ProductSpecificationRecTypes — in progress...
|
|
51
|
+
[pending] Step 5/13: QuickActions — pending
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
At the end, show final summary:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
LSC Starter Config Deployment Complete
|
|
58
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
+
13/13 steps completed successfully
|
|
60
|
+
- 14 layouts deployed (user selected: all)
|
|
61
|
+
- 8 flexipages deployed (user selected: all)
|
|
62
|
+
- 28 trigger handlers activated
|
|
63
|
+
- Application file updated for selected flexipages
|
|
64
|
+
```
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Trigger Handlers Reference
|
|
2
|
+
|
|
3
|
+
## Handler List
|
|
4
|
+
|
|
5
|
+
The following trigger handlers must be activated:
|
|
6
|
+
|
|
7
|
+
1. AffiliationUniquenessGenericHandler
|
|
8
|
+
2. AffiliationUniquenessHandler
|
|
9
|
+
3. HardAffiliationHandler
|
|
10
|
+
4. AffiliationReciprocalHandler
|
|
11
|
+
5. HealthcareProviderAffiliationHandler
|
|
12
|
+
6. AffiliationPrimaryChangeHandler
|
|
13
|
+
7. AffiliationAccountUpdateHandler
|
|
14
|
+
8. TerrAcctRcmdActionSharingHandler
|
|
15
|
+
9. TerrAccRcmActStatusUpdateHandler
|
|
16
|
+
10. CaseMSLQueueHandler
|
|
17
|
+
11. CaseChangeOwnershipHandler
|
|
18
|
+
12. CaseShareToCreatorHandler
|
|
19
|
+
13. StagePathPermissionsHandler
|
|
20
|
+
14. AccountPlanDeleteChildrenHandler
|
|
21
|
+
15. AccountPlanChangeStatusHandler
|
|
22
|
+
16. SetAccPlanPercentCompleteHandler
|
|
23
|
+
17. AcctPlanObjDeleteChildrenHandler
|
|
24
|
+
18. SetAccObjectPercentCompleteHandler
|
|
25
|
+
19. ActionPlanDeleteChildrenHandler
|
|
26
|
+
20. SetSprintPercentCompleteHandler
|
|
27
|
+
21. SetGoalAsgmtPercentCompleteHandler
|
|
28
|
+
22. SetActionPlanPercentCompleteHandler
|
|
29
|
+
23. AssessmentTaskDeleteAPItemHandler
|
|
30
|
+
24. AssessmentTaskSharingHandler
|
|
31
|
+
25. TerritoryBusinessPlanDeleteHandler
|
|
32
|
+
26. GoalAssignmentDeleteHandler
|
|
33
|
+
27. TerritoryBusPlanChangeStatusHandler
|
|
34
|
+
28. SetTerrBusPlanPrcntCompleteHandler
|
|
35
|
+
|
|
36
|
+
## Activation Method
|
|
37
|
+
|
|
38
|
+
Trigger handlers in Life Sciences Cloud are **`LifeScienceTriggerHandler`** records — a standard Tooling API entity (NOT a managed `lsc4ce__TriggerHandler__c` custom object). All queries and updates MUST use `--use-tooling-api`. Relevant fields:
|
|
39
|
+
|
|
40
|
+
- `DeveloperName` — the handler name (e.g. `AffiliationUniquenessGenericHandler`)
|
|
41
|
+
- `IsActive` — the active flag (Boolean)
|
|
42
|
+
- `ObjectApiName` — the object the handler runs on
|
|
43
|
+
|
|
44
|
+
> **Verified behavior:** the standard-API sobject name `lsc4ce__TriggerHandler__c` does NOT exist and returns `sObject type '...' is not supported`. `LifeScienceTriggerHandler` is only accessible via the Tooling API. A freshly-deployed org typically has ~185 handlers, all `IsActive=false` initially; the 28 below are the subset the starter config activates.
|
|
45
|
+
|
|
46
|
+
### Preferred: Query then Update (Tooling API)
|
|
47
|
+
|
|
48
|
+
First, get the handler's Id and current state:
|
|
49
|
+
```bash
|
|
50
|
+
sf data query --query "SELECT Id, DeveloperName, IsActive FROM LifeScienceTriggerHandler WHERE DeveloperName = '<HandlerName>'" --target-org <org> --use-tooling-api --json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Then activate by Id:
|
|
54
|
+
```bash
|
|
55
|
+
sf data update record --sobject LifeScienceTriggerHandler --record-id <Id> --values "IsActive=true" --target-org <org> --use-tooling-api
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Batch: query all inactive IDs in one call, then update each
|
|
59
|
+
|
|
60
|
+
Individual query-then-update per handler is slow (each `sf` invocation has startup overhead; 28 sequential handlers can exceed 2 minutes). Fetch all still-inactive IDs in ONE query, then loop the updates.
|
|
61
|
+
|
|
62
|
+
> **STOP-GATE (do not drop the last handler).** Build the update loop so it processes **every** returned ID. Two failure modes to avoid: **(1)** a naive `while read` over a *captured* ID list drops the final ID when that list has no trailing newline (the classic "27 of 28" bug); **(2)** an unquoted `for id in $IDS` loop relies on **bash word-splitting**, which **zsh does NOT do by default** — under zsh the whole multiline blob stays a single `$id`, every update fails on an invalid record-id, and you get **"0 of 28"**. Do NOT use either. The portable, shell-agnostic, drop-safe pattern is to pipe `jq` (which newline-terminates every record, including the last) into `while IFS= read -r id` via **process substitution** `< <(...)`: it behaves identically in bash and zsh and keeps the loop in the current shell so the counter survives. After the loop, always re-run the Verification query below and confirm the active count equals the full handler count (28) before proceeding — if it is short, identify the straggler(s) by name and activate each individually.
|
|
63
|
+
|
|
64
|
+
Use a single query filtered to `IsActive = false` (already-active handlers are skipped automatically — re-running is safe but wasteful), then loop with one of the safe patterns:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
ORG=<org>
|
|
68
|
+
n=0; total=0
|
|
69
|
+
# Pipe jq (newline-terminates EVERY record, incl. the last) into `while read` via
|
|
70
|
+
# process substitution `< <(...)`. Portable across bash AND zsh; the loop stays in the
|
|
71
|
+
# current shell so $n/$total survive. Never `for id in $IDS` (zsh won't word-split it).
|
|
72
|
+
while IFS= read -r id; do
|
|
73
|
+
total=$((total+1))
|
|
74
|
+
sf data update record --sobject LifeScienceTriggerHandler --record-id "$id" \
|
|
75
|
+
--values "IsActive=true" --target-org "$ORG" --use-tooling-api >/dev/null && n=$((n+1))
|
|
76
|
+
echo " ...$n activated"
|
|
77
|
+
done < <(sf data query \
|
|
78
|
+
--query "SELECT Id FROM LifeScienceTriggerHandler WHERE IsActive = false AND DeveloperName IN ('AffiliationUniquenessGenericHandler','AffiliationUniquenessHandler','HardAffiliationHandler','AffiliationReciprocalHandler','HealthcareProviderAffiliationHandler','AffiliationPrimaryChangeHandler','AffiliationAccountUpdateHandler','TerrAcctRcmdActionSharingHandler','TerrAccRcmActStatusUpdateHandler','CaseMSLQueueHandler','CaseChangeOwnershipHandler','CaseShareToCreatorHandler','StagePathPermissionsHandler','AccountPlanDeleteChildrenHandler','AccountPlanChangeStatusHandler','SetAccPlanPercentCompleteHandler','AcctPlanObjDeleteChildrenHandler','SetAccObjectPercentCompleteHandler','ActionPlanDeleteChildrenHandler','SetSprintPercentCompleteHandler','SetGoalAsgmtPercentCompleteHandler','SetActionPlanPercentCompleteHandler','AssessmentTaskDeleteAPItemHandler','AssessmentTaskSharingHandler','TerritoryBusinessPlanDeleteHandler','GoalAssignmentDeleteHandler','TerritoryBusPlanChangeStatusHandler','SetTerrBusPlanPrcntCompleteHandler')" \
|
|
79
|
+
--target-org "$ORG" --use-tooling-api --json | jq -r '.result.records[].Id')
|
|
80
|
+
echo "Activated $n of $total inactive handler(s)."
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
If every one of the 28 was already active, the query returns zero rows and the loop is a no-op — that is a valid PASS, not a failure.
|
|
84
|
+
|
|
85
|
+
### Verification
|
|
86
|
+
|
|
87
|
+
After activation, confirm the active count equals the full handler count (28) — count directly rather than eyeballing rows:
|
|
88
|
+
```bash
|
|
89
|
+
sf data query --query "SELECT COUNT(Id) active FROM LifeScienceTriggerHandler WHERE IsActive = true AND DeveloperName IN ('AffiliationUniquenessGenericHandler','AffiliationUniquenessHandler','HardAffiliationHandler','AffiliationReciprocalHandler','HealthcareProviderAffiliationHandler','AffiliationPrimaryChangeHandler','AffiliationAccountUpdateHandler','TerrAcctRcmdActionSharingHandler','TerrAccRcmActStatusUpdateHandler','CaseMSLQueueHandler','CaseChangeOwnershipHandler','CaseShareToCreatorHandler','StagePathPermissionsHandler','AccountPlanDeleteChildrenHandler','AccountPlanChangeStatusHandler','SetAccPlanPercentCompleteHandler','AcctPlanObjDeleteChildrenHandler','SetAccObjectPercentCompleteHandler','ActionPlanDeleteChildrenHandler','SetSprintPercentCompleteHandler','SetGoalAsgmtPercentCompleteHandler','SetActionPlanPercentCompleteHandler','AssessmentTaskDeleteAPItemHandler','AssessmentTaskSharingHandler','TerritoryBusinessPlanDeleteHandler','GoalAssignmentDeleteHandler','TerritoryBusPlanChangeStatusHandler','SetTerrBusPlanPrcntCompleteHandler')" --target-org <org> --use-tooling-api --json
|
|
90
|
+
```
|
|
91
|
+
The returned `active` count MUST be **28**. If it is fewer, list the still-inactive names (query the same set with `IsActive = false`), activate each straggler individually, and re-run this count until it reads 28. Do NOT proceed to the next step while any handler is inactive.
|
|
92
|
+
|
|
93
|
+
### Error Handling
|
|
94
|
+
|
|
95
|
+
| Error | Cause | Resolution |
|
|
96
|
+
|-------|-------|------------|
|
|
97
|
+
| `sObject type 'lsc4ce__TriggerHandler__c' is not supported` | Wrong object name / missing tooling flag | Use `LifeScienceTriggerHandler` with `--use-tooling-api` |
|
|
98
|
+
| "No records found" | Handler `DeveloperName` doesn't exist in the org | The managed package may not have created it yet; skip and note |
|
|
99
|
+
| Command times out activating all 28 | Sequential per-handler `sf` calls are slow | Fetch all inactive IDs in one query, then loop updates (see the safe-loop patterns above); skip already-active ones |
|
|
100
|
+
| "27 of 28 activated" / last handler skipped | A `while read` over a *captured* list dropped the final unterminated line | Use the jq-piped `while IFS= read -r` via process substitution shown above; re-run the count check and activate any straggler individually |
|
|
101
|
+
| "0 of 28 activated" (loop ran once, all IDs mashed into one value) | An unquoted `for id in $IDS` loop under **zsh**, which does not word-split unquoted params — `$IDS` stayed one multiline string | Use the jq-piped `while IFS= read -r` via process substitution shown above (portable across bash/zsh); never rely on `for` word-splitting |
|
|
102
|
+
| "Insufficient access" | User lacks edit permission on the tooling entity | User needs appropriate permission set |
|
|
103
|
+
|
|
104
|
+
### Progress Reporting
|
|
105
|
+
|
|
106
|
+
Report activation progress:
|
|
107
|
+
```text
|
|
108
|
+
Activating trigger handlers: 15/28 complete...
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If any handler fails, collect all failures and report at the end:
|
|
112
|
+
```text
|
|
113
|
+
3 handlers could not be activated:
|
|
114
|
+
- CaseMSLQueueHandler: No record found
|
|
115
|
+
- StagePathPermissionsHandler: Field not found
|
|
116
|
+
- AssessmentTaskSharingHandler: Insufficient access
|
|
117
|
+
|
|
118
|
+
25/28 handlers activated successfully.
|
|
119
|
+
Options:
|
|
120
|
+
1. Retry failed handlers
|
|
121
|
+
2. Skip and continue to next step
|
|
122
|
+
```
|