@salesforce/afv-skills 1.59.0 → 1.60.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-architecture-analyze/SKILL.md +66 -17
- package/skills/agentforce-architecture-analyze/assets/cli/show_access_token.yaml +4 -7
- package/skills/agentforce-architecture-analyze/references/contract.json +1 -1
- package/skills/agentforce-architecture-analyze/scripts/emit_env.py +2 -2
- package/skills/agentforce-architecture-analyze/scripts/main.py +40 -44
- package/skills/agentforce-architecture-analyze/scripts/rest_client.py +11 -3
- package/skills/agentforce-architecture-analyze/scripts/sf_cli.py +77 -10
- package/skills/agentforce-architecture-analyze/scripts/tests/test_end_to_end_fixture.py +1 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_flow_children_inflation.py +1 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_main_pipeline.py +53 -2
- package/skills/agentforce-architecture-analyze/scripts/tests/test_resolve_creds.py +184 -36
- package/skills/agentforce-architecture-analyze/scripts/tests/test_rest_client.py +17 -0
- package/skills/agentforce-architecture-analyze/scripts/tests/test_sf_cli.py +165 -11
- package/skills/agentforce-architecture-analyze/scripts/tests/test_skill_md_pipeline_block.py +319 -0
- package/skills/agentforce-d360-analyze/SKILL.md +28 -10
- package/skills/agentforce-d360-analyze/scripts/dc.py +200 -50
- package/skills/agentforce-d360-analyze/scripts/discover_sessions.py +10 -6
- package/skills/agentforce-d360-analyze/scripts/fetch_dc.py +22 -6
- package/skills/agentforce-d360-analyze/scripts/resolve_session.py +21 -13
- package/skills/agentforce-d360-analyze/scripts/tests/test_dc_and_resolve_session.py +298 -76
- package/skills/agentforce-d360-analyze/scripts/tests/test_default_target_org.py +432 -0
- package/skills/agentforce-d360-analyze/scripts/tests/test_discover_sessions.py +1 -1
- package/skills/agentforce-d360-analyze/scripts/tests/test_resolve_session_main.py +9 -3
- package/skills/agentforce-d360-analyze/scripts/tests/test_skill_md_prefix_block.py +176 -0
- package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +17 -27
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +7 -17
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +47 -63
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +10 -13
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -46
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +4 -21
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +58 -82
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +16 -315
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +9 -24
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -44
- package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +11 -63
- package/skills/consumer-goods-rtr-datacloud-export-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-dashboard-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/SKILL.md +2 -1
- package/skills/consumer-goods-tpe-datakit-deploy/SKILL.md +2 -1
- package/skills/data360-schema-get/SKILL.md +3 -3
- package/skills/design-systems-slds-validate/references/report-format.md +1 -1
- package/skills/dx-org-manage/SKILL.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +1 -0
- package/skills/dx-org-snapshot-manage/SKILL.md +172 -0
- package/skills/dx-org-snapshot-manage/examples/create_error_output.json +16 -0
- package/skills/dx-org-snapshot-manage/examples/create_success_output.json +19 -0
- package/skills/dx-org-snapshot-manage/examples/delete_output.json +9 -0
- package/skills/dx-org-snapshot-manage/examples/get_output.json +19 -0
- package/skills/dx-org-snapshot-manage/examples/list_output.json +36 -0
- package/skills/dx-org-snapshot-manage/references/cli_flags.md +179 -0
- package/skills/dx-org-snapshot-manage/references/snapshot_usage.md +55 -0
- package/skills/dx-org-trial-expiration-check/SKILL.md +1 -1
- package/skills/dx-org-trial-expiration-check/scripts/check_expiration.sh +2 -2
- package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +7 -5
- package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +11 -11
- package/skills/experience-content-media-image-generate/SKILL.md +83 -0
- package/skills/experience-content-media-image-generate/scripts/download-image.sh +84 -0
- package/skills/external-diagram-mermaid-generate/SKILL.md +12 -12
- package/skills/field-service-data-capture-migrate/references/component-mapping.md +1 -1
- package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +1 -2
- package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +1 -0
- package/skills/field-service-data-capture-migrate/references/transformer-rules.md +1 -1
- package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +12 -1
- package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +4 -1
- package/skills/field-service-setup-orchestrator-get/SKILL.md +0 -1
- package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +233 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/accounting-setup.md +117 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/billing-rules-config.md +237 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/billing-settings.md +271 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/demo-policy-config.md +138 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/org-defaults.md +64 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/permissions-config.md +226 -0
- package/skills/insurance-brokerage-agency-billing-configure/references/prerequisites.md +142 -0
- package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +3 -2
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +3 -3
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +68 -45
- package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +17 -18
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +16 -3
- package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +16 -13
- package/skills/marketing-message-test/SKILL.md +194 -0
- package/skills/marketing-message-test/references/api-contract.md +333 -0
- package/skills/omnistudio-callable-apex-generate/SKILL.md +3 -3
- package/skills/omnistudio-datamapper-generate/SKILL.md +6 -6
- package/skills/omnistudio-datapacks-deploy/SKILL.md +11 -11
- package/skills/omnistudio-dependencies-analyze/SKILL.md +5 -5
- package/skills/omnistudio-epc-catalog-generate/SKILL.md +6 -6
- package/skills/omnistudio-flexcard-generate/SKILL.md +6 -6
- package/skills/omnistudio-integration-procedure-generate/SKILL.md +6 -6
- package/skills/omnistudio-omniscript-generate/SKILL.md +6 -5
- package/skills/platform-apex-logs-debug/SKILL.md +1 -0
- package/skills/platform-metadata-deploy/SKILL.md +1 -0
- package/skills/platform-models-api-configure/SKILL.md +5 -5
- package/skills/platform-soql-query/SKILL.md +1 -0
- package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +17 -6
- package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +107 -192
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone-action.json +6 -6
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +49 -20
- package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +4 -4
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +224 -290
- package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +295 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -1
- package/skills/service-itsm-slack-itservice-configure/SKILL.md +2 -1
- package/skills/service-itsm-slack-itservice-configure/references/manage-slack-connection.md +2 -2
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +20 -13
- package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +5 -55
- package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +0 -38
- package/skills/service-omni-command-center-analyze/SKILL.md +2 -3
- package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
- package/skills/tableau-next-asset-create/README.md +65 -0
- package/skills/tableau-next-asset-create/SKILL.md +409 -0
- package/skills/tableau-next-asset-create/references/admin-users.md +149 -0
- package/skills/tableau-next-asset-create/references/ai-readiness.md +355 -0
- package/skills/tableau-next-asset-create/references/alerts.md +111 -0
- package/skills/tableau-next-asset-create/references/build-workflow.md +819 -0
- package/skills/tableau-next-asset-create/references/dashboard-authoring.md +302 -0
- package/skills/tableau-next-asset-create/references/dashboard-design-principles.md +352 -0
- package/skills/tableau-next-asset-create/references/data-transform-gotchas.md +210 -0
- package/skills/tableau-next-asset-create/references/data-understanding.md +387 -0
- package/skills/tableau-next-asset-create/references/deep-reference-index.md +74 -0
- package/skills/tableau-next-asset-create/references/destructive-operations.md +62 -0
- package/skills/tableau-next-asset-create/references/edit-dashboard.md +273 -0
- package/skills/tableau-next-asset-create/references/edit-visualization.md +529 -0
- package/skills/tableau-next-asset-create/references/empty-source-handling.md +104 -0
- package/skills/tableau-next-asset-create/references/ingest-and-metric-gotchas.md +638 -0
- package/skills/tableau-next-asset-create/references/insight-bundle.md +69 -0
- package/skills/tableau-next-asset-create/references/large-flat-file-handling.md +331 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_envelope.json +54 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_shared-widget-fields.json +122 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/add_page.json +29 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/delete_page.json +27 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/discard_dashboard.json +11 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget_to_page.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/place_widget_on_page.json +30 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_dashboard.json +16 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_page.json +26 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/rename_page.json +28 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/save_dashboard.json +18 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/undo.json +11 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_button_widget.json +69 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_container_widget.json +88 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_filter_widget.json +146 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_metric_widget.json +78 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_navigation_widget.json +80 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_parameter_widget.json +160 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_text_widget.json +103 -0
- package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_visualization_widget.json +68 -0
- package/skills/tableau-next-asset-create/references/sdm-tool-reference.md +721 -0
- package/skills/tableau-next-asset-create/references/semantic-query-and-enrichment.md +355 -0
- package/skills/tableau-next-asset-create/references/shared-gates.md +322 -0
- package/skills/tableau-next-asset-create/references/sharing-and-promotion.md +306 -0
- package/skills/tableau-next-asset-create/references/tasks/ai-readiness-audit.md +51 -0
- package/skills/tableau-next-asset-create/references/tasks/analyze-data.md +48 -0
- package/skills/tableau-next-asset-create/references/tasks/build-dashboard.md +66 -0
- package/skills/tableau-next-asset-create/references/tasks/build-end-to-end.md +73 -0
- package/skills/tableau-next-asset-create/references/tasks/create-data-transform.md +51 -0
- package/skills/tableau-next-asset-create/references/tasks/create-viz.md +58 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-dashboard.md +80 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-sdm.md +106 -0
- package/skills/tableau-next-asset-create/references/tasks/edit-viz.md +40 -0
- package/skills/tableau-next-asset-create/references/tasks/enrich-model.md +68 -0
- package/skills/tableau-next-asset-create/references/tasks/ingest-flat-file.md +68 -0
- package/skills/tableau-next-asset-create/references/tasks/manage-alert.md +35 -0
- package/skills/tableau-next-asset-create/references/tasks/profile-dataset.md +47 -0
- package/skills/tableau-next-asset-create/references/tasks/promote-or-reuse.md +46 -0
- package/skills/tableau-next-asset-create/references/tasks/provision-user.md +39 -0
- package/skills/tableau-next-asset-create/references/tasks/query-model.md +92 -0
- package/skills/tableau-next-asset-create/references/tasks/review-verified-questions.md +42 -0
- package/skills/tableau-next-asset-create/references/tasks/share-asset.md +37 -0
- package/skills/tableau-next-asset-create/references/verified-questions.md +125 -0
- package/skills/tableau-next-asset-create/references/viz-authoring.md +992 -0
- package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +0 -102
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "move_widget",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "pageName", "placement"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "move_widget" },
|
|
8
|
+
"pageName": { "type": "string", "description": "Dev name of the page the widget is on." },
|
|
9
|
+
"placement": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "New grid coordinates for the widget on the same page.",
|
|
12
|
+
"required": ["name"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": { "type": "string", "description": "Optional placement id (rarely needed to author; usually server-assigned)." },
|
|
15
|
+
"name": { "type": "string", "description": "Name of the widget to reposition." },
|
|
16
|
+
"label": { "type": "string", "description": "Optional placement-level label override." },
|
|
17
|
+
"description": { "type": "string", "description": "Optional placement-level description." },
|
|
18
|
+
"row": { "type": "integer", "description": "New 1-based grid row." },
|
|
19
|
+
"column": { "type": "integer", "description": "New 1-based grid column." },
|
|
20
|
+
"rowspan": { "type": "integer", "description": "New height in rows." },
|
|
21
|
+
"colspan": { "type": "integer", "description": "New width in columns." }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"example": {
|
|
26
|
+
"operation": "move_widget",
|
|
27
|
+
"pageName": "page_1",
|
|
28
|
+
"placement": { "name": "viz_1", "row": 5, "column": 25, "rowspan": 20, "colspan": 24 }
|
|
29
|
+
}
|
|
30
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget_to_page.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "move_widget_to_page",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "pageName", "placement"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "move_widget_to_page" },
|
|
8
|
+
"pageName": { "type": "string", "description": "Dev name of the TARGET page the widget is moved to." },
|
|
9
|
+
"placement": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "The widget to move (by name) and its placement on the target page.",
|
|
12
|
+
"required": ["name"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": { "type": "string", "description": "Optional placement id (rarely needed to author; usually server-assigned)." },
|
|
15
|
+
"name": { "type": "string", "description": "Name of the widget to move." },
|
|
16
|
+
"label": { "type": "string", "description": "Optional placement-level label override." },
|
|
17
|
+
"description": { "type": "string", "description": "Optional placement-level description." },
|
|
18
|
+
"row": { "type": "integer", "description": "1-based grid row on the target page." },
|
|
19
|
+
"column": { "type": "integer", "description": "1-based grid column on the target page." },
|
|
20
|
+
"rowspan": { "type": "integer", "description": "Height in rows." },
|
|
21
|
+
"colspan": { "type": "integer", "description": "Width in columns." }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"example": {
|
|
26
|
+
"operation": "move_widget_to_page",
|
|
27
|
+
"pageName": "page_2",
|
|
28
|
+
"placement": { "name": "viz_1", "row": 1, "column": 1, "rowspan": 20, "colspan": 24 }
|
|
29
|
+
}
|
|
30
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/place_widget_on_page.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "place_widget_on_page",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "pageName", "placement"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "place_widget_on_page" },
|
|
8
|
+
"pageName": { "type": "string", "description": "Dev name of the page to place the widget on, e.g. \"page_1\"." },
|
|
9
|
+
"placement": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "Grid placement referencing an already-built widget by name.",
|
|
12
|
+
"required": ["name"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": { "type": "string", "description": "Optional placement id (rarely needed to author; usually server-assigned)." },
|
|
15
|
+
"name": { "type": "string", "description": "Name of the widget to place (the key set when it was built)." },
|
|
16
|
+
"label": { "type": "string", "description": "Optional placement-level label override." },
|
|
17
|
+
"description": { "type": "string", "description": "Optional placement-level description." },
|
|
18
|
+
"row": { "type": "integer", "description": "1-based grid row." },
|
|
19
|
+
"column": { "type": "integer", "description": "1-based grid column." },
|
|
20
|
+
"rowspan": { "type": "integer", "description": "Height in rows." },
|
|
21
|
+
"colspan": { "type": "integer", "description": "Width in columns (grid is 48 wide)." }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"example": {
|
|
26
|
+
"operation": "place_widget_on_page",
|
|
27
|
+
"pageName": "page_1",
|
|
28
|
+
"placement": { "name": "text_1", "row": 1, "column": 1, "rowspan": 4, "colspan": 24 }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "remove_widget_from_dashboard",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "widgetName"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "remove_widget_from_dashboard" },
|
|
8
|
+
"widgetName": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"minLength": 1,
|
|
11
|
+
"pattern": "\\S",
|
|
12
|
+
"description": "Name/key of the widget definition to remove, including every placement across all dashboard pages. Source it the same way as widget.name elsewhere: read it back via render_dashboard, or reuse the widget.name supplied to an earlier upsert_*_widget in this same draft/batch. Never invent it. Distinct from remove_widget_from_page, which only unplaces one page's placement and leaves the definition behind (see edit-dashboard.md §6)."
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"example": { "operation": "remove_widget_from_dashboard", "widgetName": "text_1" }
|
|
16
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "remove_widget_from_page",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "pageName", "placement"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "remove_widget_from_page" },
|
|
8
|
+
"pageName": { "type": "string", "description": "Dev name of the page to remove the widget placement from." },
|
|
9
|
+
"placement": {
|
|
10
|
+
"type": "object",
|
|
11
|
+
"description": "Identifies the placement to remove by widget name.",
|
|
12
|
+
"required": ["name"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"id": { "type": "string", "description": "Optional placement id (rarely needed to author; usually server-assigned)." },
|
|
15
|
+
"name": { "type": "string", "description": "Name of the widget whose placement is removed from this page." },
|
|
16
|
+
"label": { "type": "string", "description": "Optional placement-level label (not required to identify the placement — name is sufficient)." },
|
|
17
|
+
"description": { "type": "string", "description": "Optional placement-level description." }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"example": {
|
|
22
|
+
"operation": "remove_widget_from_page",
|
|
23
|
+
"pageName": "page_1",
|
|
24
|
+
"placement": { "name": "text_1" }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "rename_page",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "page"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "rename_page" },
|
|
8
|
+
"layoutName": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "Dev name of the layout the page is in. Optional; defaults to the first layout."
|
|
11
|
+
},
|
|
12
|
+
"page": {
|
|
13
|
+
"type": "object",
|
|
14
|
+
"description": "Identifies the page by name and sets its new label.",
|
|
15
|
+
"required": ["name", "label"],
|
|
16
|
+
"properties": {
|
|
17
|
+
"id": { "type": "string", "description": "Optional page id (rarely needed to author; usually server-assigned)." },
|
|
18
|
+
"name": { "type": "string", "description": "Existing page dev name to rename." },
|
|
19
|
+
"label": { "type": "string", "description": "New display label / tab title." },
|
|
20
|
+
"description": { "type": "string", "description": "Optional page description." }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"example": {
|
|
25
|
+
"operation": "rename_page",
|
|
26
|
+
"page": { "name": "page_2", "label": "Regional detail" }
|
|
27
|
+
}
|
|
28
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/save_dashboard.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "save_dashboard",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "save_dashboard" },
|
|
8
|
+
"dashboardIdOrApiName": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The id (0FK...) or apiName of the dashboard to save. Optional; defaults to the dashboard the batch targets."
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"description": "Control operation. Standalone (sole operation in the batch): commits whatever draft is already staged on the dashboard. In a mixed batch: persists once after the other operations in that same batch succeed. The top-level autosave flag is ignored when save_dashboard is present.",
|
|
14
|
+
"example": {
|
|
15
|
+
"operation": "save_dashboard",
|
|
16
|
+
"dashboardIdOrApiName": "0FK000000000123"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "undo",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "undo" }
|
|
8
|
+
},
|
|
9
|
+
"description": "Control operation. Standalone (sole operation in the batch): reverts the last staged change. In a mixed batch: cancels all incoming operations in that batch (nothing else in the batch takes effect).",
|
|
10
|
+
"example": { "operation": "undo" }
|
|
11
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_button_widget.json
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "upsert_button_widget",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "widget"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "upsert_button_widget" },
|
|
8
|
+
"widget": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"description": "Complete button widget definition for create or full replacement. Omitted fields are dropped on replacement. No data source. Upsert defines the widget only; it neither places it nor changes existing placements.",
|
|
11
|
+
"required": ["type", "name"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Existing widget ID. Required when fully replacing a persisted widget; omit when creating a widget. Never invent this value. An unsaved draft widget has no ID and may be replaced by matching widget.name."
|
|
16
|
+
},
|
|
17
|
+
"type": { "const": "button" },
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Stable widget key, e.g. \"button_1\". On persisted replacement, it must match the widget identified by id."
|
|
21
|
+
},
|
|
22
|
+
"label": { "type": "string", "description": "Display label." },
|
|
23
|
+
"description": { "type": "string", "description": "Optional widget description (distinct from label)." },
|
|
24
|
+
"actions": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"description": "Optional click/select interactions (navigate, run a flow, set a parameter, set a filter, record action) — the button's primary use case. Full per-type shape: _shared-widget-fields.json.",
|
|
27
|
+
"items": { "type": "object", "required": ["actionType", "eventType"] }
|
|
28
|
+
},
|
|
29
|
+
"dynamicTokens": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"description": "Optional dynamic value bindings keyed by token name. Full shape: _shared-widget-fields.json.",
|
|
32
|
+
"additionalProperties": { "type": "object" }
|
|
33
|
+
},
|
|
34
|
+
"parameters": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Button widget parameters.",
|
|
37
|
+
"properties": {
|
|
38
|
+
"text": { "type": "string", "description": "Button caption, e.g. \"View Details\"." },
|
|
39
|
+
"alignmentX": { "type": "string", "description": "Horizontal text alignment, e.g. \"center\"." },
|
|
40
|
+
"alignmentY": { "type": "string", "description": "Vertical text alignment, e.g. \"middle\"." },
|
|
41
|
+
"fontSize": { "type": "integer", "description": "Font size, e.g. 14." },
|
|
42
|
+
"symbol": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "Optional icon shown alongside the caption.",
|
|
45
|
+
"properties": {
|
|
46
|
+
"name": { "type": "string", "description": "Icon name." },
|
|
47
|
+
"position": { "type": "string", "description": "Icon position relative to the caption, e.g. \"left\"." }
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"widgetStyle": { "type": "object", "description": "ButtonStyle (WidgetStyle + fontColor/textStyle). Full shape: _shared-widget-fields.json#/styleBlocks/ButtonStyle." },
|
|
51
|
+
"hoverStyle": { "type": "object", "description": "ButtonStyle applied on hover. Full shape: _shared-widget-fields.json#/styleBlocks/ButtonStyle." }
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"example": {
|
|
58
|
+
"operation": "upsert_button_widget",
|
|
59
|
+
"widget": {
|
|
60
|
+
"type": "button",
|
|
61
|
+
"name": "button_1",
|
|
62
|
+
"parameters": {
|
|
63
|
+
"text": "View Details",
|
|
64
|
+
"alignmentX": "center",
|
|
65
|
+
"alignmentY": "middle"
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "upsert_container_widget",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "widget"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "upsert_container_widget" },
|
|
8
|
+
"widget": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"description": "Complete container (layout grouping) widget definition for create or full replacement. Omitted fields are dropped on replacement. Styling lives under parameters.widgetStyle. An optional backgroundSource sets a background image asset { id, name }. Upsert defines the widget only; it neither places it nor changes existing placements.",
|
|
11
|
+
"required": ["type", "name"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Existing widget ID. Required when fully replacing a persisted widget; omit when creating a widget. Never invent this value. An unsaved draft widget has no ID and may be replaced by matching widget.name."
|
|
16
|
+
},
|
|
17
|
+
"type": { "const": "container" },
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Stable widget key, e.g. \"container_1\". On persisted replacement, it must match the widget identified by id."
|
|
21
|
+
},
|
|
22
|
+
"label": { "type": "string", "description": "Display label." },
|
|
23
|
+
"description": { "type": "string", "description": "Optional widget description (distinct from label)." },
|
|
24
|
+
"actions": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"description": "Optional click/select interactions (navigate, run a flow, set a parameter, set a filter, record action). Full per-type shape: _shared-widget-fields.json.",
|
|
27
|
+
"items": { "type": "object", "required": ["actionType", "eventType"] }
|
|
28
|
+
},
|
|
29
|
+
"dynamicTokens": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"description": "Optional dynamic value bindings keyed by token name. Full shape: _shared-widget-fields.json.",
|
|
32
|
+
"additionalProperties": { "type": "object" }
|
|
33
|
+
},
|
|
34
|
+
"backgroundSource": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Optional background image asset reference.",
|
|
37
|
+
"properties": {
|
|
38
|
+
"id": { "type": "string", "description": "Asset record id." },
|
|
39
|
+
"name": { "type": "string", "description": "Asset apiName." }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"parameters": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "Container widget parameters. widgetStyle carries the container's fill, border, and background-image styling.",
|
|
45
|
+
"properties": {
|
|
46
|
+
"widgetStyle": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"description": "Container styling.",
|
|
49
|
+
"properties": {
|
|
50
|
+
"backgroundColor": { "type": "string", "description": "Background fill color hex, e.g. \"#F3F3F3\"." },
|
|
51
|
+
"borderColor": { "type": "string", "description": "Border color hex." },
|
|
52
|
+
"borderWidth": { "type": "integer", "description": "Border width in px." },
|
|
53
|
+
"borderRadius": { "type": "integer", "description": "Border corner radius in px." },
|
|
54
|
+
"borderEdges": {
|
|
55
|
+
"type": "array",
|
|
56
|
+
"items": { "type": "string" },
|
|
57
|
+
"description": "Which edges show a border, e.g. [\"top\", \"bottom\", \"left\", \"right\"]."
|
|
58
|
+
},
|
|
59
|
+
"background": {
|
|
60
|
+
"type": "object",
|
|
61
|
+
"description": "Background-image styling (applies to backgroundSource).",
|
|
62
|
+
"properties": {
|
|
63
|
+
"alignmentX": { "type": "string", "description": "Horizontal alignment of the background image." },
|
|
64
|
+
"alignmentY": { "type": "string", "description": "Vertical alignment of the background image." },
|
|
65
|
+
"imageScale": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"enum": ["fitToWidth", "fitToHeight", "fill", "original"],
|
|
68
|
+
"description": "Background image scale mode."
|
|
69
|
+
},
|
|
70
|
+
"opacity": { "type": "integer", "description": "Background image opacity 0-100." }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
"example": {
|
|
81
|
+
"operation": "upsert_container_widget",
|
|
82
|
+
"widget": {
|
|
83
|
+
"type": "container",
|
|
84
|
+
"name": "container_1",
|
|
85
|
+
"label": "KPI group"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_filter_widget.json
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "upsert_filter_widget",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "widget"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "upsert_filter_widget" },
|
|
8
|
+
"widget": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"description": "Complete filter widget definition for create or full replacement. Omitted fields are dropped on replacement. source is the data source { id, name }; parameters carry the view type and the field to filter on. Upsert defines the widget only; it neither places it nor changes existing placements.",
|
|
11
|
+
"required": ["type", "name"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Existing widget ID. Required when fully replacing a persisted widget; omit when creating a widget. Never invent this value. An unsaved draft widget has no ID and may be replaced by matching widget.name."
|
|
16
|
+
},
|
|
17
|
+
"type": { "const": "filter" },
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Stable widget key, e.g. \"filter_1\". On persisted replacement, it must match the widget identified by id."
|
|
21
|
+
},
|
|
22
|
+
"label": { "type": "string", "description": "Display label, e.g. \"Region\"." },
|
|
23
|
+
"description": { "type": "string", "description": "Optional widget description (distinct from label)." },
|
|
24
|
+
"actions": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"description": "Optional click/select interactions. Full per-type shape: _shared-widget-fields.json.",
|
|
27
|
+
"items": { "type": "object", "required": ["actionType", "eventType"] }
|
|
28
|
+
},
|
|
29
|
+
"dynamicTokens": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"description": "Optional dynamic value bindings keyed by token name. Full shape: _shared-widget-fields.json.",
|
|
32
|
+
"additionalProperties": { "type": "object" }
|
|
33
|
+
},
|
|
34
|
+
"source": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Data source reference.",
|
|
37
|
+
"properties": {
|
|
38
|
+
"id": { "type": "string", "description": "Data source record id." },
|
|
39
|
+
"name": { "type": "string", "description": "Data source apiName." }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"initialValues": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "Optional default filter state applied when the dashboard loads.",
|
|
45
|
+
"properties": {
|
|
46
|
+
"details": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"description": "FilterDetails[] — { fieldName, operator, values }. operator is a large enum (Equals, Contains, Between, In, IsEmpty, LastNDays, PreviousQuarter, StartsWith, …, ~60 values covering text/date/numeric comparisons); read this field's live schema for the exact enum before authoring one rather than guessing a value.",
|
|
49
|
+
"items": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"properties": {
|
|
52
|
+
"fieldName": { "type": "string" },
|
|
53
|
+
"operator": { "type": "string", "description": "See field description above — large enum, don't guess a value." },
|
|
54
|
+
"values": { "type": "array" }
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"parameters": {
|
|
61
|
+
"description": "Filter widget parameters — shape depends on viewType. oneOf ListFilterParameters | ListCardFilterParameters | ToggleFilterParameters. Send only the fields for your chosen viewType.",
|
|
62
|
+
"oneOf": [
|
|
63
|
+
{
|
|
64
|
+
"title": "ListFilterParameters",
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": ["viewType", "isLabelHidden"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"viewType": { "const": "list" },
|
|
69
|
+
"isLabelHidden": { "type": "boolean", "description": "Show or hide the filter widget's label. REQUIRED for viewType list/listcard." },
|
|
70
|
+
"filterOption": {
|
|
71
|
+
"type": "object",
|
|
72
|
+
"description": "Which field the filter targets and how it selects.",
|
|
73
|
+
"properties": {
|
|
74
|
+
"objectName": { "type": "string", "description": "Table/view name, e.g. \"Opportunity\"." },
|
|
75
|
+
"fieldName": { "type": "string", "description": "Field to filter on, e.g. \"StageName\"." },
|
|
76
|
+
"dataType": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"enum": ["Text", "Boolean", "Geo", "Date", "DateTime", "Number", "Currency", "Percentage"],
|
|
79
|
+
"description": "Semantic data type of the filtered field (case-sensitive; must be one of the enum values). It selects the filter UI at render time: Text/Boolean/Geo render a value list, Date/DateTime a date picker, Number/Currency/Percentage a numeric range. Any other value (e.g. the JSON type \"string\") is rejected at render with \"Unsupported data type for filter\"."
|
|
80
|
+
},
|
|
81
|
+
"selectionType": { "type": "string", "enum": ["single", "multiple"], "description": "Single- or multi-select." }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"widgetStyle": { "type": "object", "description": "WidgetStyle. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetStyle." },
|
|
85
|
+
"titleStyle": { "type": "object", "description": "WidgetTextStyle for the label. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetTextStyle." },
|
|
86
|
+
"valueStyle": { "type": "object", "description": "WidgetTextStyle for the values. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetTextStyle." },
|
|
87
|
+
"receiveFilterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveFilterSource." },
|
|
88
|
+
"receiveParameterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveParameterSource." }
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"title": "ListCardFilterParameters",
|
|
93
|
+
"type": "object",
|
|
94
|
+
"required": ["viewType", "isLabelHidden"],
|
|
95
|
+
"properties": {
|
|
96
|
+
"viewType": { "const": "listcard" },
|
|
97
|
+
"isLabelHidden": { "type": "boolean", "description": "Show or hide the filter widget's label. REQUIRED for viewType list/listcard." },
|
|
98
|
+
"filterOption": { "type": "object", "description": "Same shape as ListFilterParameters.filterOption above." },
|
|
99
|
+
"widgetStyle": { "type": "object", "description": "WidgetStyle. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetStyle." },
|
|
100
|
+
"titleStyle": { "type": "object", "description": "WidgetTextStyle. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetTextStyle." },
|
|
101
|
+
"valueStyle": { "type": "object", "description": "WidgetTextStyle. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetTextStyle." },
|
|
102
|
+
"receiveFilterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveFilterSource." },
|
|
103
|
+
"receiveParameterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveParameterSource." }
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"title": "ToggleFilterParameters",
|
|
108
|
+
"type": "object",
|
|
109
|
+
"required": ["viewType"],
|
|
110
|
+
"description": "isLabelHidden is NOT used by toggle — omit it here.",
|
|
111
|
+
"properties": {
|
|
112
|
+
"viewType": { "const": "toggle" },
|
|
113
|
+
"filterOption": { "type": "object", "description": "Same shape as ListFilterParameters.filterOption above." },
|
|
114
|
+
"widgetStyle": { "type": "object", "description": "WidgetStyle. Full shape: _shared-widget-fields.json#/styleBlocks/WidgetStyle." },
|
|
115
|
+
"textStyle": { "type": "object", "description": "ToggleTextStyle. Full shape: _shared-widget-fields.json#/styleBlocks/ToggleTextStyle." },
|
|
116
|
+
"defaultStyle": { "type": "object", "description": "ToggleDefaultStyle. Full shape: _shared-widget-fields.json#/styleBlocks/ToggleDefaultStyle." },
|
|
117
|
+
"selectedStyle": { "type": "object", "description": "ToggleSelectedStyle. Full shape: _shared-widget-fields.json#/styleBlocks/ToggleSelectedStyle." },
|
|
118
|
+
"receiveFilterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveFilterSource." },
|
|
119
|
+
"receiveParameterSource": { "type": "object", "description": "Full shape: _shared-widget-fields.json#/receiveSources/receiveParameterSource." }
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
"example": {
|
|
128
|
+
"operation": "upsert_filter_widget",
|
|
129
|
+
"widget": {
|
|
130
|
+
"type": "filter",
|
|
131
|
+
"name": "filter_1",
|
|
132
|
+
"label": "Stage",
|
|
133
|
+
"source": { "id": "0Fb000000000123", "name": "OpportunityDataSource" },
|
|
134
|
+
"parameters": {
|
|
135
|
+
"viewType": "list",
|
|
136
|
+
"filterOption": {
|
|
137
|
+
"objectName": "Opportunity",
|
|
138
|
+
"fieldName": "StageName",
|
|
139
|
+
"dataType": "Text",
|
|
140
|
+
"selectionType": "multiple"
|
|
141
|
+
},
|
|
142
|
+
"isLabelHidden": false
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_metric_widget.json
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
{
|
|
2
|
+
"title": "upsert_metric_widget",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"additionalProperties": false,
|
|
5
|
+
"required": ["operation", "widget"],
|
|
6
|
+
"properties": {
|
|
7
|
+
"operation": { "const": "upsert_metric_widget" },
|
|
8
|
+
"widget": {
|
|
9
|
+
"type": "object",
|
|
10
|
+
"description": "Complete metric widget definition for create or full replacement. Omitted fields are dropped on replacement. source may reference the metric; parameters.metricOption carries the SDM identifiers. Upsert defines the widget only; it neither places it nor changes existing placements.",
|
|
11
|
+
"required": ["type", "name"],
|
|
12
|
+
"properties": {
|
|
13
|
+
"id": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Existing widget ID. Required when fully replacing a persisted widget; omit when creating a widget. Never invent this value. An unsaved draft widget has no ID and may be replaced by matching widget.name."
|
|
16
|
+
},
|
|
17
|
+
"type": { "const": "metric" },
|
|
18
|
+
"name": {
|
|
19
|
+
"type": "string",
|
|
20
|
+
"description": "Stable widget key, e.g. \"metric_1\". On persisted replacement, it must match the widget identified by id."
|
|
21
|
+
},
|
|
22
|
+
"label": { "type": "string", "description": "Display label." },
|
|
23
|
+
"description": { "type": "string", "description": "Optional widget description (distinct from label)." },
|
|
24
|
+
"actions": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"description": "Optional click/select interactions. Full per-type shape: _shared-widget-fields.json.",
|
|
27
|
+
"items": { "type": "object", "required": ["actionType", "eventType"] }
|
|
28
|
+
},
|
|
29
|
+
"dynamicTokens": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"description": "Optional dynamic value bindings keyed by token name (e.g. referenced from metricOption.layout). Full shape: _shared-widget-fields.json.",
|
|
32
|
+
"additionalProperties": { "type": "object" }
|
|
33
|
+
},
|
|
34
|
+
"source": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"description": "Optional metric data source reference.",
|
|
37
|
+
"properties": {
|
|
38
|
+
"id": { "type": "string", "description": "Metric record id." },
|
|
39
|
+
"name": { "type": "string", "description": "Metric apiName." }
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"parameters": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"description": "Metric widget parameters.",
|
|
45
|
+
"properties": {
|
|
46
|
+
"metricOption": {
|
|
47
|
+
"type": "object",
|
|
48
|
+
"description": "Metric layout and SDM information.",
|
|
49
|
+
"properties": {
|
|
50
|
+
"sdmApiName": { "type": "string", "description": "Semantic data model apiName, e.g. \"Revenue_SDM\"." },
|
|
51
|
+
"sdmId": { "type": "string", "description": "Semantic data model id (2SM...)." },
|
|
52
|
+
"showForecast": { "type": "boolean", "description": "Whether to show a forecast on the metric card." },
|
|
53
|
+
"layout": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": true,
|
|
56
|
+
"description": "Metric layout settings keyed by setting name. No fixed schema — pass through settings as given rather than inventing keys."
|
|
57
|
+
},
|
|
58
|
+
"metricCardVersion": { "type": "integer", "description": "Metric card rendering version." }
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"widgetStyle": { "type": "object", "description": "MetricStyle (WidgetStyle + textColor). Full shape: _shared-widget-fields.json#/styleBlocks/MetricStyle." },
|
|
62
|
+
"receiveFilterSource": { "type": "object", "description": "Which published filters this widget listens to. Full shape: _shared-widget-fields.json#/receiveSources/receiveFilterSource." }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"example": {
|
|
69
|
+
"operation": "upsert_metric_widget",
|
|
70
|
+
"widget": {
|
|
71
|
+
"type": "metric",
|
|
72
|
+
"name": "metric_1",
|
|
73
|
+
"parameters": {
|
|
74
|
+
"metricOption": { "sdmApiName": "Revenue_SDM", "sdmId": "2SM000000000123" }
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|