@salesforce/afv-skills 1.29.0 → 1.30.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-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/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/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-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-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-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
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# CLI Command Reference
|
|
2
|
+
|
|
3
|
+
## RecordPage with fields
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
sf template generate flexipage \
|
|
7
|
+
--name Account_Custom_Page \
|
|
8
|
+
--template RecordPage \
|
|
9
|
+
--sobject Account \
|
|
10
|
+
--primary-field Name \
|
|
11
|
+
--secondary-fields Phone,Industry,AnnualRevenue \
|
|
12
|
+
--detail-fields Street,City,State,Name,Phone,Email
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## AppPage
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
sf template generate flexipage \
|
|
19
|
+
--name Sales_Dashboard \
|
|
20
|
+
--template AppPage \
|
|
21
|
+
--label "Sales Dashboard"
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## HomePage
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
sf template generate flexipage \
|
|
28
|
+
--name Custom_Home \
|
|
29
|
+
--template HomePage \
|
|
30
|
+
--description "Custom home for sales team"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Common Options
|
|
34
|
+
|
|
35
|
+
All templates support:
|
|
36
|
+
- `--output-dir` (default: current directory)
|
|
37
|
+
- `--api-version` (default: latest)
|
|
38
|
+
- `--label` (default: page name)
|
|
39
|
+
- `--description`
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# flexipage:fieldSection — Field Section
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Displays fields in a column layout under a labeled section heading.
|
|
6
|
+
|
|
7
|
+
## Supported Page Types
|
|
8
|
+
|
|
9
|
+
- RecordPage (`main` region or detail tab facets)
|
|
10
|
+
|
|
11
|
+
## Structure
|
|
12
|
+
|
|
13
|
+
Three-level nesting:
|
|
14
|
+
1. Template Region (Region type) — contains the fieldSection component
|
|
15
|
+
2. Column Facets (Facet type) — contains `flexipage:column` components pointing to field facets
|
|
16
|
+
3. Field Facets (Facet type) — contains `fieldInstance` elements for each column
|
|
17
|
+
|
|
18
|
+
**Critical:** The `columns` property value must match the `<name>` of the facet where the `flexipage:column` components are defined. It is *not* a number.
|
|
19
|
+
|
|
20
|
+
## Property Table
|
|
21
|
+
|
|
22
|
+
| Property | Type | Required | Default | Description |
|
|
23
|
+
|----------|------|----------|---------|-------------|
|
|
24
|
+
| columns | String (Facet ref) | Yes | — | Reference to the Facet containing `flexipage:column` components |
|
|
25
|
+
| label | String | Yes | — | Section heading displayed to users |
|
|
26
|
+
| horizontalAlignment | Boolean | No | false | Align fields horizontally within columns |
|
|
27
|
+
|
|
28
|
+
## Property Inference Rules
|
|
29
|
+
|
|
30
|
+
| User Intent | Inferred Properties |
|
|
31
|
+
|-------------|-------------------|
|
|
32
|
+
| "add a field section with {fields}" | Split fields evenly across 2 columns |
|
|
33
|
+
| "section labeled {name}" | `label` = `{name}` |
|
|
34
|
+
|
|
35
|
+
## XML Example
|
|
36
|
+
|
|
37
|
+
```xml
|
|
38
|
+
<!-- Field facet for first column -->
|
|
39
|
+
<flexiPageRegions>
|
|
40
|
+
<itemInstances>
|
|
41
|
+
<fieldInstance>
|
|
42
|
+
<fieldInstanceProperties>
|
|
43
|
+
<name>uiBehavior</name>
|
|
44
|
+
<value>required</value>
|
|
45
|
+
</fieldInstanceProperties>
|
|
46
|
+
<fieldItem>Record.Field0</fieldItem>
|
|
47
|
+
<identifier>RecordColumn1Field0</identifier>
|
|
48
|
+
</fieldInstance>
|
|
49
|
+
</itemInstances>
|
|
50
|
+
<itemInstances>
|
|
51
|
+
<fieldInstance>
|
|
52
|
+
<fieldInstanceProperties>
|
|
53
|
+
<name>uiBehavior</name>
|
|
54
|
+
<value>none</value>
|
|
55
|
+
</fieldInstanceProperties>
|
|
56
|
+
<fieldItem>Record.Field1</fieldItem>
|
|
57
|
+
<identifier>RecordColumn1Field1</identifier>
|
|
58
|
+
</fieldInstance>
|
|
59
|
+
</itemInstances>
|
|
60
|
+
<name>Facet-FieldSection-Column1</name>
|
|
61
|
+
<type>Facet</type>
|
|
62
|
+
</flexiPageRegions>
|
|
63
|
+
|
|
64
|
+
<!-- Field facet for second column -->
|
|
65
|
+
<flexiPageRegions>
|
|
66
|
+
<itemInstances>
|
|
67
|
+
<fieldInstance>
|
|
68
|
+
<fieldInstanceProperties>
|
|
69
|
+
<name>uiBehavior</name>
|
|
70
|
+
<value>none</value>
|
|
71
|
+
</fieldInstanceProperties>
|
|
72
|
+
<fieldItem>Record.Field2</fieldItem>
|
|
73
|
+
<identifier>RecordColumn2Field0</identifier>
|
|
74
|
+
</fieldInstance>
|
|
75
|
+
</itemInstances>
|
|
76
|
+
<itemInstances>
|
|
77
|
+
<fieldInstance>
|
|
78
|
+
<fieldInstanceProperties>
|
|
79
|
+
<name>uiBehavior</name>
|
|
80
|
+
<value>none</value>
|
|
81
|
+
</fieldInstanceProperties>
|
|
82
|
+
<fieldItem>Record.Type</fieldItem>
|
|
83
|
+
<identifier>RecordColumn2Field1</identifier>
|
|
84
|
+
</fieldInstance>
|
|
85
|
+
</itemInstances>
|
|
86
|
+
<name>Facet-FieldSection-Column2</name>
|
|
87
|
+
<type>Facet</type>
|
|
88
|
+
</flexiPageRegions>
|
|
89
|
+
|
|
90
|
+
<!-- Columns facet -->
|
|
91
|
+
<flexiPageRegions>
|
|
92
|
+
<itemInstances>
|
|
93
|
+
<componentInstance>
|
|
94
|
+
<componentInstanceProperties>
|
|
95
|
+
<name>body</name>
|
|
96
|
+
<value>Facet-FieldSection-Column1</value>
|
|
97
|
+
</componentInstanceProperties>
|
|
98
|
+
<componentName>flexipage:column</componentName>
|
|
99
|
+
<identifier>flexipage_column1</identifier>
|
|
100
|
+
</componentInstance>
|
|
101
|
+
</itemInstances>
|
|
102
|
+
<itemInstances>
|
|
103
|
+
<componentInstance>
|
|
104
|
+
<componentInstanceProperties>
|
|
105
|
+
<name>body</name>
|
|
106
|
+
<value>Facet-FieldSection-Column2</value>
|
|
107
|
+
</componentInstanceProperties>
|
|
108
|
+
<componentName>flexipage:column</componentName>
|
|
109
|
+
<identifier>flexipage_column2</identifier>
|
|
110
|
+
</componentInstance>
|
|
111
|
+
</itemInstances>
|
|
112
|
+
<name>Facet-FieldSection-Columns</name>
|
|
113
|
+
<type>Facet</type>
|
|
114
|
+
</flexiPageRegions>
|
|
115
|
+
|
|
116
|
+
<!-- Template region with fieldSection component -->
|
|
117
|
+
<flexiPageRegions>
|
|
118
|
+
<itemInstances>
|
|
119
|
+
<componentInstance>
|
|
120
|
+
<componentInstanceProperties>
|
|
121
|
+
<name>columns</name>
|
|
122
|
+
<value>Facet-FieldSection-Columns</value>
|
|
123
|
+
</componentInstanceProperties>
|
|
124
|
+
<componentInstanceProperties>
|
|
125
|
+
<name>horizontalAlignment</name>
|
|
126
|
+
<value>false</value>
|
|
127
|
+
</componentInstanceProperties>
|
|
128
|
+
<componentInstanceProperties>
|
|
129
|
+
<name>label</name>
|
|
130
|
+
<value>Information</value>
|
|
131
|
+
</componentInstanceProperties>
|
|
132
|
+
<componentName>flexipage:fieldSection</componentName>
|
|
133
|
+
<identifier>flexipage_fieldSection</identifier>
|
|
134
|
+
</componentInstance>
|
|
135
|
+
</itemInstances>
|
|
136
|
+
<name>main</name>
|
|
137
|
+
<type>Region</type>
|
|
138
|
+
</flexiPageRegions>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## uiBehavior Attribute
|
|
142
|
+
|
|
143
|
+
Every `fieldInstance` requires a `uiBehavior` property that controls field editability on the page.
|
|
144
|
+
|
|
145
|
+
| Value | Meaning | When to use |
|
|
146
|
+
|-------|---------|-------------|
|
|
147
|
+
| `none` | Field respects standard editability settings (default) | Standard fields — uses object/layout-level permissions |
|
|
148
|
+
| `required` | Field is required — must be filled before save | Fields that must have a value for the record to be valid |
|
|
149
|
+
| `readonly` | Field is read-only — displayed but not editable | Formula fields, system fields, or fields locked by business rules |
|
|
150
|
+
|
|
151
|
+
**Inference rules:**
|
|
152
|
+
- Default to `none` unless the user specifies otherwise
|
|
153
|
+
- If user says "required" or "mandatory" → use `required`
|
|
154
|
+
- If user says "read-only", "display only", or "locked" → use `readonly`
|
|
155
|
+
- Formula fields and auto-number fields should always be `readonly`
|
|
156
|
+
|
|
157
|
+
## Edge Cases
|
|
158
|
+
|
|
159
|
+
- `columns` property is a Facet name, not a count — common mistake
|
|
160
|
+
- Split fields roughly evenly across columns
|
|
161
|
+
- Identifiers: `flexipage_fieldSection`, `flexipage_fieldSection2`; columns: `flexipage_column1`, `flexipage_column2`
|
|
162
|
+
- Second fieldSection on same page: all facet names and identifiers must be unique
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# flexipage:richText — Rich Text
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Displays HTML-formatted rich text content on a page. Supports text formatting, headings, lists, links, and inline styles. Content is static (not data-bound).
|
|
6
|
+
|
|
7
|
+
## Supported Page Types
|
|
8
|
+
|
|
9
|
+
- RecordPage
|
|
10
|
+
- AppPage
|
|
11
|
+
- HomePage
|
|
12
|
+
|
|
13
|
+
## Property Table
|
|
14
|
+
|
|
15
|
+
| Property | Type | Required | Default | Description |
|
|
16
|
+
|----------|------|----------|---------|-------------|
|
|
17
|
+
| richTextValue | String (HTML-encoded) | Yes | — | HTML content, entity-encoded for XML |
|
|
18
|
+
| decorate | Boolean | No | true | Show card-style border/decoration around the content |
|
|
19
|
+
|
|
20
|
+
## Property Inference Rules
|
|
21
|
+
|
|
22
|
+
| User Intent | Inferred Properties |
|
|
23
|
+
|-------------|-------------------|
|
|
24
|
+
| "add rich text with {content}" | `richTextValue` = HTML-encoded version of content |
|
|
25
|
+
| "add a heading {text}" | `richTextValue` = `<p><b style="font-size: 16px;">{text}</b></p>` |
|
|
26
|
+
| "add a link to {url}" | `richTextValue` = `<p><a href="{url}" rel="noopener noreferrer" target="_blank">{text}</a></p>` |
|
|
27
|
+
| "no border" or "borderless" | `decorate` = `false` |
|
|
28
|
+
| "with card border" or "in a card" | `decorate` = `true` |
|
|
29
|
+
|
|
30
|
+
## HTML Encoding Rules
|
|
31
|
+
|
|
32
|
+
**CRITICAL:** The `richTextValue` must be double-encoded for XML:
|
|
33
|
+
1. Write the desired HTML content
|
|
34
|
+
2. Entity-encode ALL HTML characters:
|
|
35
|
+
- `&` -> `&` (encode FIRST)
|
|
36
|
+
- `<` -> `<`
|
|
37
|
+
- `>` -> `>`
|
|
38
|
+
- `"` -> `"`
|
|
39
|
+
|
|
40
|
+
**Example:** To display `<b>Hello</b>`, the value must be `<b>Hello</b>`
|
|
41
|
+
|
|
42
|
+
**Supported HTML tags:**
|
|
43
|
+
- `<p>` — paragraphs (required wrapper for all content)
|
|
44
|
+
- `<b>` — bold
|
|
45
|
+
- `<u>` — underline
|
|
46
|
+
- `<i>` — italic
|
|
47
|
+
- `<a href="..." rel="noopener noreferrer" target="_blank">` — links
|
|
48
|
+
- `<span style="...">` — inline styling
|
|
49
|
+
- `<br>` or `<br />` — line breaks
|
|
50
|
+
|
|
51
|
+
**Supported inline styles:**
|
|
52
|
+
- `font-size: Npx` (e.g., `12px`, `14px`, `16px`, `18px`)
|
|
53
|
+
- `color: #hex` or `color: colorname`
|
|
54
|
+
- `text-align: left|center|right`
|
|
55
|
+
- `background-color: #hex`
|
|
56
|
+
|
|
57
|
+
## XML Example
|
|
58
|
+
|
|
59
|
+
```xml
|
|
60
|
+
<itemInstances>
|
|
61
|
+
<componentInstance>
|
|
62
|
+
<componentInstanceProperties>
|
|
63
|
+
<name>richTextValue</name>
|
|
64
|
+
<value><p style="text-align: center;"><b style="font-size: 16px;">Welcome to the Account Page</b></p><p>Use this page to manage account details and related records.</p></value>
|
|
65
|
+
</componentInstanceProperties>
|
|
66
|
+
<componentInstanceProperties>
|
|
67
|
+
<name>decorate</name>
|
|
68
|
+
<value>true</value>
|
|
69
|
+
</componentInstanceProperties>
|
|
70
|
+
<componentName>flexipage:richText</componentName>
|
|
71
|
+
<identifier>flexipage_richText</identifier>
|
|
72
|
+
</componentInstance>
|
|
73
|
+
</itemInstances>
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Edge Cases
|
|
77
|
+
|
|
78
|
+
- Never put raw HTML in `<value>` tags — always entity-encode
|
|
79
|
+
- Encode `&` FIRST before encoding `<` and `>` to avoid double-encoding `&lt;`
|
|
80
|
+
- Multiple rich text components on same page: increment identifier (`flexipage_richText`, `flexipage_richText2`)
|
|
81
|
+
- Empty content is invalid — always include at least one `<p>` element
|
|
82
|
+
- Links must include `rel="noopener noreferrer" target="_blank"` for security
|
|
83
|
+
- Can be placed in any region
|
|
84
|
+
- Keep content concise — rich text is for static labels/instructions, not data display
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Identifiers, Regions, and Container Facets
|
|
2
|
+
|
|
3
|
+
## Generating Unique Identifiers
|
|
4
|
+
|
|
5
|
+
**Before generating ANY new identifier or facet name, read the existing XML and extract all `<identifier>` and `<name>` values first.**
|
|
6
|
+
|
|
7
|
+
**Identifier Generation Algorithm**:
|
|
8
|
+
```text
|
|
9
|
+
1. Extract ALL existing <identifier> AND <name> values from XML
|
|
10
|
+
2. Generate base name: {namespace}_{componentType}_{context}
|
|
11
|
+
Examples: "lst_relatedList_contacts", "flexipage_richText_header"
|
|
12
|
+
3. Find first available number:
|
|
13
|
+
- Try "{base}_1"
|
|
14
|
+
- If exists, try "{base}_2", "{base}_3", etc.
|
|
15
|
+
- Use first available
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Examples**:
|
|
19
|
+
- First related list: `lst_relatedList_contacts`
|
|
20
|
+
- Second related list: `lst_relatedList_contacts_2`
|
|
21
|
+
- First rich text: `flexipage_richText_header`
|
|
22
|
+
- Second rich text: `flexipage_richText_header_2`
|
|
23
|
+
- Field section: `flexipage_fieldSection`
|
|
24
|
+
|
|
25
|
+
**Facet Naming - Two Patterns**:
|
|
26
|
+
|
|
27
|
+
1. **Named facets** (for major content areas):
|
|
28
|
+
- `detailTabContent` (detail tab content)
|
|
29
|
+
- `maintabs` (main tab container)
|
|
30
|
+
- `sidebartabs` (sidebar tab container)
|
|
31
|
+
- Use when facet represents meaningful content area
|
|
32
|
+
|
|
33
|
+
2. **UUID facets** (for internal structure):
|
|
34
|
+
- Format: `Facet-{8hex}-{4hex}-{4hex}-{4hex}-{12hex}`
|
|
35
|
+
- Example: `Facet-66d5a4b3-bf14-4665-ba75-1ceaa71b2cde`
|
|
36
|
+
- Use for field section columns, nested containers, anonymous slots
|
|
37
|
+
|
|
38
|
+
**When adding components to existing files:**
|
|
39
|
+
- Check if target facet name already exists
|
|
40
|
+
- If exists: Add new `<itemInstances>` to that existing region (see xml_rules.md section 5 for details)
|
|
41
|
+
- If doesn't exist: Create new region with unique name
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Region Selection
|
|
46
|
+
|
|
47
|
+
**Parse regions from file** - don't hardcode names. Templates vary:
|
|
48
|
+
- `flexipage:recordHomeTemplateDesktop` → `header`, `main`, `sidebar`
|
|
49
|
+
- `runtime_service_fieldservice:...` → `header`, `main`, `footer`
|
|
50
|
+
- Others may have different region names
|
|
51
|
+
|
|
52
|
+
**Default placement**: End of target region (after last `<itemInstances>`)
|
|
53
|
+
|
|
54
|
+
**Insertion pattern**:
|
|
55
|
+
```xml
|
|
56
|
+
<flexiPageRegions>
|
|
57
|
+
<name>main</name> <!-- or whatever region name exists -->
|
|
58
|
+
<type>Region</type>
|
|
59
|
+
<itemInstances><!-- Existing component 1 --></itemInstances>
|
|
60
|
+
<itemInstances><!-- Existing component 2 --></itemInstances>
|
|
61
|
+
<itemInstances>
|
|
62
|
+
<!-- INSERT NEW COMPONENT HERE -->
|
|
63
|
+
</itemInstances>
|
|
64
|
+
</flexiPageRegions>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Container Components with Facets
|
|
70
|
+
|
|
71
|
+
Components like tabs, accordions, and field sections require a **3-layer facet pattern**. There is NO single "tabs" component — you must use `flexipage:tabset` + `flexipage:tab` + content facets.
|
|
72
|
+
|
|
73
|
+
**The 3-layer tab pattern:**
|
|
74
|
+
|
|
75
|
+
```xml
|
|
76
|
+
<!-- LAYER 1: Content facets — one per tab's body -->
|
|
77
|
+
<flexiPageRegions>
|
|
78
|
+
<itemInstances>
|
|
79
|
+
<componentInstance>
|
|
80
|
+
<componentName>force:detailPanel</componentName>
|
|
81
|
+
<identifier>force_detailPanel1</identifier>
|
|
82
|
+
</componentInstance>
|
|
83
|
+
</itemInstances>
|
|
84
|
+
<name>detailTabContent</name>
|
|
85
|
+
<type>Facet</type>
|
|
86
|
+
</flexiPageRegions>
|
|
87
|
+
|
|
88
|
+
<flexiPageRegions>
|
|
89
|
+
<itemInstances>
|
|
90
|
+
<componentInstance>
|
|
91
|
+
<componentInstanceProperties>
|
|
92
|
+
<name>relatedListComponentOverride</name>
|
|
93
|
+
<value>NONE</value>
|
|
94
|
+
</componentInstanceProperties>
|
|
95
|
+
<componentName>force:relatedListContainer</componentName>
|
|
96
|
+
<identifier>force_relatedListContainer1</identifier>
|
|
97
|
+
</componentInstance>
|
|
98
|
+
</itemInstances>
|
|
99
|
+
<name>relatedTabContent</name>
|
|
100
|
+
<type>Facet</type>
|
|
101
|
+
</flexiPageRegions>
|
|
102
|
+
|
|
103
|
+
<!-- LAYER 2: Tab definitions facet — each flexipage:tab points to a content facet via "body" -->
|
|
104
|
+
<flexiPageRegions>
|
|
105
|
+
<itemInstances>
|
|
106
|
+
<componentInstance>
|
|
107
|
+
<componentInstanceProperties>
|
|
108
|
+
<name>active</name>
|
|
109
|
+
<value>true</value>
|
|
110
|
+
</componentInstanceProperties>
|
|
111
|
+
<componentInstanceProperties>
|
|
112
|
+
<name>body</name>
|
|
113
|
+
<value>detailTabContent</value>
|
|
114
|
+
</componentInstanceProperties>
|
|
115
|
+
<componentInstanceProperties>
|
|
116
|
+
<name>title</name>
|
|
117
|
+
<value>Standard.Tab.detail</value>
|
|
118
|
+
</componentInstanceProperties>
|
|
119
|
+
<componentName>flexipage:tab</componentName>
|
|
120
|
+
<identifier>flexipage_tab1</identifier>
|
|
121
|
+
</componentInstance>
|
|
122
|
+
</itemInstances>
|
|
123
|
+
<itemInstances>
|
|
124
|
+
<componentInstance>
|
|
125
|
+
<componentInstanceProperties>
|
|
126
|
+
<name>active</name>
|
|
127
|
+
<value>false</value>
|
|
128
|
+
</componentInstanceProperties>
|
|
129
|
+
<componentInstanceProperties>
|
|
130
|
+
<name>body</name>
|
|
131
|
+
<value>relatedTabContent</value>
|
|
132
|
+
</componentInstanceProperties>
|
|
133
|
+
<componentInstanceProperties>
|
|
134
|
+
<name>title</name>
|
|
135
|
+
<value>Standard.Tab.relatedLists</value>
|
|
136
|
+
</componentInstanceProperties>
|
|
137
|
+
<componentName>flexipage:tab</componentName>
|
|
138
|
+
<identifier>flexipage_tab2</identifier>
|
|
139
|
+
</componentInstance>
|
|
140
|
+
</itemInstances>
|
|
141
|
+
<name>maintabs</name>
|
|
142
|
+
<type>Facet</type>
|
|
143
|
+
</flexiPageRegions>
|
|
144
|
+
|
|
145
|
+
<!-- LAYER 3: Tabset in the template region — references the tabs facet -->
|
|
146
|
+
<flexiPageRegions>
|
|
147
|
+
<itemInstances>
|
|
148
|
+
<componentInstance>
|
|
149
|
+
<componentInstanceProperties>
|
|
150
|
+
<name>tabs</name>
|
|
151
|
+
<value>maintabs</value>
|
|
152
|
+
</componentInstanceProperties>
|
|
153
|
+
<componentName>flexipage:tabset</componentName>
|
|
154
|
+
<identifier>flexipage_tabset1</identifier>
|
|
155
|
+
</componentInstance>
|
|
156
|
+
</itemInstances>
|
|
157
|
+
<name>main</name>
|
|
158
|
+
<type>Region</type>
|
|
159
|
+
</flexiPageRegions>
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Critical rules:**
|
|
163
|
+
- Facet regions are **siblings** of template regions (same level), NEVER nested inside them
|
|
164
|
+
- Each `flexipage:tab` has `body` pointing to a content facet name, `title` for the label, and `active` (true/false)
|
|
165
|
+
- The `flexipage:tabset` has a single `tabs` property pointing to the tabs facet name
|
|
166
|
+
- Standard tab titles: `Standard.Tab.detail`, `Standard.Tab.relatedLists`, `Standard.Tab.activity`, `Standard.Tab.news`
|
|
167
|
+
- The component is `flexipage:tabset` — NOT `flexipage:tabs`, `flexipage:tabset2`, or `lightning:tabset`
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# MCP Action Integration — Examples & Reference
|
|
2
|
+
|
|
3
|
+
Two MCP actions provide component discovery and schema retrieval. Call them via `execute_metadata_action`.
|
|
4
|
+
|
|
5
|
+
## discoverUiComponents
|
|
6
|
+
|
|
7
|
+
Discovers components available for a page type in the user's org.
|
|
8
|
+
|
|
9
|
+
**When to call:** Tier 2 discovery — after local scan finds no match.
|
|
10
|
+
|
|
11
|
+
**Input:**
|
|
12
|
+
```json
|
|
13
|
+
execute_metadata_action({
|
|
14
|
+
"actionName": "DISCOVER_UI_COMPONENTS",
|
|
15
|
+
"metadataType": "FLEXI_PAGE",
|
|
16
|
+
"parameters": {
|
|
17
|
+
"pageType": "RECORD_PAGE",
|
|
18
|
+
"pageContext": { "entityName": "Account" },
|
|
19
|
+
"searchQuery": "related list"
|
|
20
|
+
}
|
|
21
|
+
})
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
**Parameters:**
|
|
25
|
+
|
|
26
|
+
| Param | Type | Required | Description |
|
|
27
|
+
|-------|------|----------|-------------|
|
|
28
|
+
| pageType | String | Yes | `RECORD_PAGE`, `APP_PAGE`, or `HOME_PAGE` |
|
|
29
|
+
| pageContext | JSON | Conditional | Required for RECORD_PAGE: `{"entityName": "ObjectApiName"}` |
|
|
30
|
+
| searchQuery | String | No | Natural language search from user intent |
|
|
31
|
+
|
|
32
|
+
**Output:**
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"componentDefinitions": [
|
|
36
|
+
{
|
|
37
|
+
"definition": "lst/dynamicRelatedList",
|
|
38
|
+
"label": "Dynamic Related List",
|
|
39
|
+
"description": "Shows related records...",
|
|
40
|
+
"attributes": [{"name": "parentFieldApiName", "description": "..."}]
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**Notes:**
|
|
47
|
+
- Output uses forward-slash delimiter (`namespace/blockName`), but XML uses colon (`namespace:blockName`)
|
|
48
|
+
- Only returns components compatible with the page type and accessible in the org
|
|
49
|
+
- May return empty list if no match — proceed to Tier 3
|
|
50
|
+
|
|
51
|
+
**When multiple components are returned:**
|
|
52
|
+
1. **Best-match selection:** If one component clearly matches user intent (label/description aligns with the request), auto-select it
|
|
53
|
+
2. **Ambiguous results:** If multiple components could satisfy the request, present the top candidates to the user with their labels and descriptions, and ask which one to use
|
|
54
|
+
3. **Refinement:** If results are too broad, refine the `searchQuery` parameter with more specific keywords from user intent and retry once before prompting the user
|
|
55
|
+
|
|
56
|
+
## getUiComponentSchemas
|
|
57
|
+
|
|
58
|
+
Retrieves the full property schema for one or more components.
|
|
59
|
+
|
|
60
|
+
**When to call:** Tier 2 (org-discovered) components only — skip for Tier 1 (local) and Tier 3 (generated) components; read @api properties from source instead.
|
|
61
|
+
|
|
62
|
+
**Input:**
|
|
63
|
+
```json
|
|
64
|
+
execute_metadata_action({
|
|
65
|
+
"actionName": "GET_UI_COMPONENT_SCHEMAS",
|
|
66
|
+
"metadataType": "FLEXI_PAGE",
|
|
67
|
+
"parameters": {
|
|
68
|
+
"pageType": "RECORD_PAGE",
|
|
69
|
+
"pageContext": { "entityName": "Account" },
|
|
70
|
+
"componentDefinitions": ["lst/dynamicRelatedList", "flexipage/richText"],
|
|
71
|
+
"includeKnowledge": true
|
|
72
|
+
}
|
|
73
|
+
})
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Parameters:**
|
|
77
|
+
|
|
78
|
+
| Param | Type | Required | Description |
|
|
79
|
+
|-------|------|----------|-------------|
|
|
80
|
+
| pageType | String | Yes | `RECORD_PAGE`, `APP_PAGE`, or `HOME_PAGE` |
|
|
81
|
+
| pageContext | JSON | Conditional | Required for RECORD_PAGE |
|
|
82
|
+
| componentDefinitions | List | Yes | Component FQNs (forward-slash format) |
|
|
83
|
+
| includeKnowledge | Boolean | No | Include component guidance text (default: true) |
|
|
84
|
+
|
|
85
|
+
**Output:**
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"componentSchemas": [
|
|
89
|
+
{
|
|
90
|
+
"definition": "lst/dynamicRelatedList",
|
|
91
|
+
"success": true,
|
|
92
|
+
"schema": "{...JSON Schema string...}",
|
|
93
|
+
"knowledge": "Optional guidance text for this component"
|
|
94
|
+
}
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Notes:**
|
|
100
|
+
- Supports **partial failures** — each component has its own `success` boolean
|
|
101
|
+
- On failure: `{"definition": "...", "success": false, "error": "reason"}`
|
|
102
|
+
- When a component schema fails, fall through to Step 3 (smart defaults + LLM inference)
|
|
103
|
+
- `knowledge` provides platform-curated guidance — use it alongside instructions files
|
|
104
|
+
- Component definition format: always `namespace/blockName` (forward-slash)
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# record_flexipage:dynamicHighlights — Dynamic Highlights Panel
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Displays the record highlights panel at the top of a record page with a primary identifying field, secondary summary fields, and configurable actions. Replaces the older static `force:highlightsPanel`.
|
|
6
|
+
|
|
7
|
+
## Supported Page Types
|
|
8
|
+
|
|
9
|
+
- RecordPage only (always in `header` region)
|
|
10
|
+
|
|
11
|
+
## Property Table
|
|
12
|
+
|
|
13
|
+
| Property | Type | Required | Default | Description |
|
|
14
|
+
|----------|------|----------|---------|-------------|
|
|
15
|
+
| primaryField | String (Facet ref) | Yes | — | Reference to a Facet containing the primary field (typically Record.Name) |
|
|
16
|
+
| secondaryFields | String (Facet ref) | No | — | Reference to a Facet containing secondary highlight fields |
|
|
17
|
+
| actionNames | valueList | No | — | Actions in the highlights panel: `Edit`, `Delete`, `ChangeOwnerOne`, `Share`, `RecordShareHierarchy` |
|
|
18
|
+
| numVisibleActions | Integer | No | 3 | Number of actions shown before overflow menu |
|
|
19
|
+
|
|
20
|
+
## Structural Pattern
|
|
21
|
+
|
|
22
|
+
This component uses an **indirect Facet reference** pattern. The `primaryField` and `secondaryFields` properties point to Facet regions that contain `fieldInstance` elements — they are NOT direct field API names.
|
|
23
|
+
|
|
24
|
+
**Required supporting structure:**
|
|
25
|
+
1. A Facet region for `primaryField` containing one `fieldInstance` (the identifying field)
|
|
26
|
+
2. A Facet region for `secondaryFields` containing multiple `fieldInstance` elements (summary fields)
|
|
27
|
+
|
|
28
|
+
## Property Inference Rules
|
|
29
|
+
|
|
30
|
+
| User Intent | Inferred Properties |
|
|
31
|
+
|-------------|-------------------|
|
|
32
|
+
| "highlights with {fields}" | Create secondaryFields facet with those fields as fieldInstances |
|
|
33
|
+
| "show actions: Edit, Delete" | `actionNames` = valueList with `Edit`, `Delete` |
|
|
34
|
+
| "show {N} actions" | `numVisibleActions` = `{N}` |
|
|
35
|
+
|
|
36
|
+
**Field selection:** Primary = `Record.Name` (or object's identifying field). Secondary = 4-6 useful fields (max 12). Prefer CLI `--secondary-fields` values if available.
|
|
37
|
+
|
|
38
|
+
## XML Example
|
|
39
|
+
|
|
40
|
+
```xml
|
|
41
|
+
<!-- Component in header region -->
|
|
42
|
+
<flexiPageRegions>
|
|
43
|
+
<itemInstances>
|
|
44
|
+
<componentInstance>
|
|
45
|
+
<componentInstanceProperties>
|
|
46
|
+
<name>actionNames</name>
|
|
47
|
+
<valueList>
|
|
48
|
+
<valueListItems>
|
|
49
|
+
<value>Edit</value>
|
|
50
|
+
</valueListItems>
|
|
51
|
+
<valueListItems>
|
|
52
|
+
<value>Delete</value>
|
|
53
|
+
</valueListItems>
|
|
54
|
+
<valueListItems>
|
|
55
|
+
<value>ChangeOwnerOne</value>
|
|
56
|
+
</valueListItems>
|
|
57
|
+
</valueList>
|
|
58
|
+
</componentInstanceProperties>
|
|
59
|
+
<componentInstanceProperties>
|
|
60
|
+
<name>numVisibleActions</name>
|
|
61
|
+
<value>3</value>
|
|
62
|
+
</componentInstanceProperties>
|
|
63
|
+
<componentInstanceProperties>
|
|
64
|
+
<name>primaryField</name>
|
|
65
|
+
<value>Facet-primary-field-001</value>
|
|
66
|
+
</componentInstanceProperties>
|
|
67
|
+
<componentInstanceProperties>
|
|
68
|
+
<name>secondaryFields</name>
|
|
69
|
+
<value>Facet-secondary-fields-001</value>
|
|
70
|
+
</componentInstanceProperties>
|
|
71
|
+
<componentName>record_flexipage:dynamicHighlights</componentName>
|
|
72
|
+
<identifier>record_flexipage_dynamicHighlights</identifier>
|
|
73
|
+
</componentInstance>
|
|
74
|
+
</itemInstances>
|
|
75
|
+
<name>header</name>
|
|
76
|
+
<type>Region</type>
|
|
77
|
+
</flexiPageRegions>
|
|
78
|
+
|
|
79
|
+
<!-- Primary field Facet -->
|
|
80
|
+
<flexiPageRegions>
|
|
81
|
+
<itemInstances>
|
|
82
|
+
<fieldInstance>
|
|
83
|
+
<fieldInstanceProperties>
|
|
84
|
+
<name>uiBehavior</name>
|
|
85
|
+
<value>none</value>
|
|
86
|
+
</fieldInstanceProperties>
|
|
87
|
+
<fieldItem>Record.Name</fieldItem>
|
|
88
|
+
<identifier>RecordNameField</identifier>
|
|
89
|
+
</fieldInstance>
|
|
90
|
+
</itemInstances>
|
|
91
|
+
<name>Facet-primary-field-001</name>
|
|
92
|
+
<type>Facet</type>
|
|
93
|
+
</flexiPageRegions>
|
|
94
|
+
|
|
95
|
+
<!-- Secondary fields Facet (same structure as primary, multiple fieldInstances) -->
|
|
96
|
+
<flexiPageRegions>
|
|
97
|
+
<itemInstances>
|
|
98
|
+
<fieldInstance>
|
|
99
|
+
<fieldInstanceProperties>
|
|
100
|
+
<name>uiBehavior</name>
|
|
101
|
+
<value>none</value>
|
|
102
|
+
</fieldInstanceProperties>
|
|
103
|
+
<fieldItem>Record.Phone</fieldItem>
|
|
104
|
+
<identifier>RecordPhoneField</identifier>
|
|
105
|
+
</fieldInstance>
|
|
106
|
+
</itemInstances>
|
|
107
|
+
<name>Facet-secondary-fields-001</name>
|
|
108
|
+
<type>Facet</type>
|
|
109
|
+
</flexiPageRegions>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Edge Cases
|
|
113
|
+
|
|
114
|
+
- Only ONE per page — never multiple instances
|
|
115
|
+
- Always in `header` region — never in `main` or sidebar
|
|
116
|
+
- Facet names must be unique UUIDs or descriptive names
|
|
117
|
+
- Primary field `uiBehavior` is `none`; secondary fields also use `none`
|
|
118
|
+
- If CLI already generated highlights, modify existing — do not add a duplicate
|
|
119
|
+
- Identifier is always `record_flexipage_dynamicHighlights` (singular, never numbered)
|