field-service-data-capture-form-editor-configure
Patch an existing Data Capture Flow that's already deployed in a connected Salesforce org. Retrieves the live Flow Metadata JSON via the Tooling API…
它会碰到什么
这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。
技能内容
Edit a Data Capture Form (in an org)
This skill patches a flow that already exists in a connected org. The source of truth is the deployed flow's Metadata JSON, retrieved live from the Tooling Flow sObject — there is no spec file, no .flow-meta.xml, no zip, no SFDX project. The skill retrieves the JSON, edits it in memory, and PATCHes it back.
> Runtime contract: every org interaction in this skill is a REST call
> dispatched through the Codey runtime (dispatch locally / the hosted
> Headless 360 MCP in shared surfaces). This skill has **no dependency on the
> execution environment** — no sf CLI, no local Python, no temp files, no
> scratch SFDX project. Auth probes, the flow retrieve, and the redeploy are
> single REST calls; the JSON patch is authored by the agent inline. Do not
> shell out.
When this skill fires
- The user names an existing flow (
Inventory_Transfer,Asset_Inspection, etc.) and asks for a change. - The user pastes a Flow Builder URL and asks for a change.
- The user describes a deploy error or runtime bug in a deployed flow.
If the user is starting from scratch (prose, PDF, image), route to a design-* skill instead.
Workflow
1. Verify org auth
Confirm the connected org is reachable with a cheap auth probe — dispatch SELECT Id FROM Organization LIMIT 1 (GET /services/data/vXX.0/query):
- 2xx with
totalSize=1→ the session token is live; continue. - 401/403 → the org needs re-authentication. Surface that to the user and stop. (The Codey runtime resolves and refreshes the connected org — this skill does not manage org aliases.)
2. Retrieve the live flow's Metadata JSON
The Tooling Flow sObject exposes the flow definition as a JSON Metadata field — the same shape the deployer assembles and POSTs. Retrieving is a two-call round-trip, no CLI and no file:
- Resolve the latest version id from the API name. Dispatch
GET /services/data/vXX.0/tooling/querywith:
SELECT Id, ActiveVersionId, LatestVersionId FROM FlowDefinition WHERE DeveloperName = '<FlowApiName>'
Edit the latest version (LatestVersionId) so the patch builds on the newest draft, not a stale active version. If LatestVersionId is null, fall back to ActiveVersionId.
- Read the Metadata blob. Dispatch
GET /services/data/vXX.0/tooling/sobjects/Flow/<versionId>and take theMetadataobject from the response. This JSON is the flow — screens, choices, decisions, variables, and the post-screen chain. See [../fs-data-capture-form-deployer/reference/flow-metadata-json.md](../fs-data-capture-form-deployer/reference/flow-metadata-json.md) for the shape.
If the FlowDefinition query returns zero rows, the API name is wrong or the user is pointed at the wrong org. Confirm with the user before retrying. List the candidate flows in the org if useful — dispatch GET /services/data/vXX.0/tooling/query with SELECT DeveloperName FROM FlowDefinition ORDER BY DeveloperName.
3. Read the retrieved Metadata JSON and the rule sheet
Before patching, read the retrieved Metadata JSON to understand the current structure, then read [fs-data-capture-reference/SKILL.md](../fs-data-capture-reference/SKILL.md) for the platform's hard constraints. The constraints are identical whether the flow is expressed as XML or JSON — a repeated XML element is a JSON array, so "grouping" becomes "the array" (see the JSON↔XML mapping rule in [../fs-data-capture-form-deployer/reference/flow-metadata-json.md](../fs-data-capture-form-deployer/reference/flow-metadata-json.md)). Pay particular attention to:
- Element arrays:
screens,choices,decisions,recordLookups,recordCreates,recordUpdates,loops,assignments,variablesare each a single JSON array. Add a new element by appending to the right array — never introduce a duplicate top-level key. - CUD ordering: no record-lookup or screen after any CUD (recordCreate/recordUpdate/recordDelete) in the connector chain. No decision between sequential CUDs.
.AllItemsvs.AddedItemsRepeater accessor — use what the deployed flow uses, don't change it.- Visibility rules: in a
visibilityRule.conditionsentry,leftValueReferenceis the choice api-name, not the parent field's name. - Required-field behind visibility-rule anti-pattern (see
fs-data-capture-referenceSKILL.md). isLlmTargetable: carried as a{ "stringValue": "true" }-style wrapper, not a raw JSON boolean — match whatever the retrieved flow uses.
The prohibited-patterns table at the bottom of [fs-data-capture-reference/SKILL.md](../fs-data-capture-reference/SKILL.md) is the fastest reference for "what would break this patch".
4. Plan the patch and confirm with the user
Before editing, tell the user:
- What you're going to change — specific element, specific lines (cite
path:linereferences), and what the result will look like. - Whether the change requires schema reordering — e.g. adding a new
<recordLookups>element when none exist requires placing it in the right group. Call this out. - Activation status risk — patches deploy as a new draft version of the flow. The active version (if any) keeps running until the user activates the new draft in Flow Builder. Tell the user this.
- Anything you noticed that's worth flagging — pre-existing issues, deprecated patterns, validation rules that look broken. Don't auto-fix unrelated issues; surface them.
Use AskUserQuestion to gate the edit. Options:
- Apply and deploy — proceed.
- Show me the change first — present the before/after of just the edited JSON subtree (the specific field, screen, or rule you're touching) inline in the chat, then ask again. No file is written; the patch lives in memory until the user approves the PATCH.
- Cancel — stop without deploying.
Do not proceed to step 5 without explicit approval.
5. Apply the patch
Edit the in-memory Metadata JSON object retrieved in step 2. Some specific guidelines:
- Append to the right array. If you're adding a screen, append to the
screensarray; a choice, tochoices; a variable, tovariables. Never create a second top-level key of the same name. - Booleans and numbers stay JSON scalars.
"isRequired": true,"locationX": 0— not strings. Typed value wrappers keep their key ({ "stringValue": "X" },{ "booleanValue": true },{ "elementReference": "Foo" }). - Preserve
locationX/locationYfor existing elements. For new elements set both to0— Flow Builder re-layouts on open. - If the change touches a Repeater, preserve the existing
.AllItems/.AddedItemsaccessor in any loops — switching accessors will break runtime behavior. - If you add a new field, copy the shape from a sibling field in the same flow (label inputParameter,
inputsOnNextNavToAssocScrn,storeOutputAutomatically,styleProperties,isRequired). Don't compose from memory — the rules at [fs-data-capture-reference/SKILL.md](../fs-data-capture-reference/SKILL.md) show what's required per component, but the deployed flow already has working examples. - If the change requires a new
choicesentry, dedupe — check whether a choice with the samevaluealready exists in thechoicesarray. - Never emit a
requiredinputParameter on a screen component — somedc*components (dcName,dcSignature) reject it. Carry requiredness via the field'sisRequiredkey only.
6. Redeploy via a Tooling PATCH
Push the edited flow back as a new draft version with a single Tooling API call — dispatch PATCH /services/data/vXX.0/tooling/sobjects/Flow/<versionId> with body:
{ "Metadata": { "...the full edited Metadata object..." } }
- Send the complete
Metadataobject, not a partial patch — Tooling replaces the whole blob. - A 204 (No Content) is success. On a 400, the response body's
messagecarries the Flow validation error — diagnose against step 7's table. - This creates a new draft version of the flow. Existing active versions keep running until the user activates the new draft in Flow Builder. (To activate on save instead, set
Metadata.status: "Active"— default is to leave it Draft.)
7. Report back
On success:
- State plainly what changed (e.g. "Added
NotesShortText field toHeader_Informationscreen"). - Print the Flow Builder URL so the user can review and activate. Look up the FlowDefinition Id with a Tooling API query — dispatch
GET /services/data/vXX.0/tooling/querywithSELECT Id, ActiveVersionId FROM FlowDefinition WHERE DeveloperName = '<FlowApiName>'→<instanceUrl>/builder_platform_interaction/flowBuilder.app?flowId=<id> - Remind the user the active version hasn't changed yet — they need to activate the new draft in Flow Builder.
On failure (the PATCH returned a 400 — read the error from the response body's message):
- Cross-reference the prohibited-patterns table at [fs-data-capture-reference/SKILL.md](../fs-data-capture-reference/SKILL.md). Common diagnoses for edits: element-array grouping violation, CUD ordering,
Element X doesn't exist(typo'd reference),extension not found(wrong component name),'Range' is not a valid value(slider not supported),We can't find this input attribute: 'required'(drop therequiredinputParameter — useisRequired). - If the error is about an element you didn't touch, the retrieved flow might have been in a broken state already. Re-read the current version's Metadata and compare against the active version (
GET /tooling/sobjects/Flow/<ActiveVersionId>). - Don't loop more than twice without showing the user.
Out of scope
- Building a new flow —
fs-data-capture-form-designer+fs-data-capture-form-deployer. - Bulk migrations across many flows.
- Replacing a flow with a wholly different structure (delete + rebuild is cleaner).
- Editing flows that aren't
processType=DataCaptureFlow— this skill assumes the FSL Mobile runtime.
Related skills
fs-data-capture-reference(library) — read this before every edit. Source of truth for valid flow patterns, prohibited patterns + exact deploy errors, visual polish HTML, supporting CustomObject/PermissionSet/CustomTab deploy.fs-data-capture-form-deployer— creates flows via the same ToolingFlowJSON round-trip this skill uses to patch them. Its [reference/flow-metadata-json.md](../fs-data-capture-form-deployer/reference/flow-metadata-json.md) is the authoritativeMetadatashape for both skills.
Files in this skill
This skill has no executable scripts. The auth probe, the flow retrieve (GET /tooling/sobjects/Flow/{id}), and the redeploy (PATCH /tooling/sobjects/Flow/{id}) are all single REST calls dispatched through the Codey runtime. The JSON patch is authored by the agent inline against [../fs-data-capture-form-deployer/reference/flow-metadata-json.md](../fs-data-capture-form-deployer/reference/flow-metadata-json.md).
想直接用这个技能?
本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。
它属于哪个仓库
skills/field-service-data-capture-form-editor-configure/SKILL.md同一个仓库里的其他技能
- commerce-b2b-open-code-components-integrate
- commerce-b2b-open-code-components-replace
- dx-devops-conflict-resolve
- dx-devops-pipeline-manage
- dx-devops-test-failures-analyze
- dx-devops-test-pipeline-configure
- dx-devops-test-suite-assignments-configure
- dx-devops-test-suite-run
- dx-devops-work-item-manage
- dx-app-analytics-query
- platform-agentexchange-partner-offers-configure
- automation-sandbox-post-copy-config-generate