@uipath/skills 1.204.0 → 1.204.1
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/CODEOWNERS +12 -14
- package/package.json +1 -1
- package/skills/uipath-agents/references/coded/embedding-in-flows.md +1 -3
- package/skills/uipath-agents/references/coded/quickstart.md +0 -2
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +10 -8
- package/skills/uipath-agents/references/lowcode/prompting/autonomous-agent-prompting-guide.md +1 -1
- package/skills/uipath-human-in-the-loop/SKILL.md +1 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +0 -2
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +2 -2
- package/skills/uipath-maestro-flow/.maintenance/README.md +265 -0
- package/skills/uipath-maestro-flow/.maintenance/check-all.sh +40 -0
- package/skills/uipath-maestro-flow/.maintenance/check-anchors.sh +101 -0
- package/skills/uipath-maestro-flow/.maintenance/check-depth.sh +132 -0
- package/skills/uipath-maestro-flow/.maintenance/check-link-text.sh +123 -0
- package/skills/uipath-maestro-flow/.maintenance/check-links.sh +73 -0
- package/skills/uipath-maestro-flow/.maintenance/check-orphans.sh +93 -0
- package/skills/uipath-maestro-flow/.maintenance/check-plugin-pairs.sh +39 -0
- package/skills/uipath-maestro-flow/.maintenance/check-template.sh +42 -0
- package/skills/uipath-maestro-flow/.maintenance/check-uip-commands.sh +270 -0
- package/skills/uipath-maestro-flow/.maintenance/check-versions.sh +160 -0
- package/skills/uipath-maestro-flow/SKILL.md +69 -886
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +207 -0
- package/skills/uipath-maestro-flow/references/author/brownfield.md +91 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-cli.md +190 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations-json.md +374 -0
- package/skills/uipath-maestro-flow/references/author/editing-operations.md +104 -0
- package/skills/uipath-maestro-flow/references/author/greenfield.md +420 -0
- package/skills/uipath-maestro-flow/references/author/planning-arch.md +364 -0
- package/skills/uipath-maestro-flow/references/author/planning-impl.md +291 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/impl.md +237 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agent/planning.md +97 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/agentic-process/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/impl.md +108 -0
- package/skills/uipath-maestro-flow/references/author/plugins/api-workflow/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/impl.md +171 -0
- package/skills/uipath-maestro-flow/references/author/plugins/batch-transform/planning.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl-inline.md +120 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/impl.md +463 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector/planning.md +186 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/impl.md +517 -0
- package/skills/uipath-maestro-flow/references/author/plugins/connector-trigger/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/impl.md +309 -0
- package/skills/uipath-maestro-flow/references/author/plugins/conversational-agent/planning.md +133 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/impl.md +428 -0
- package/skills/uipath-maestro-flow/references/author/plugins/data-fabric/planning.md +188 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/impl.md +83 -0
- package/skills/uipath-maestro-flow/references/author/plugins/decision/planning.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/impl.md +38 -0
- package/skills/uipath-maestro-flow/references/author/plugins/delay/planning.md +53 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/end/planning.md +28 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/impl.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/flow/planning.md +58 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/impl.md +181 -0
- package/skills/uipath-maestro-flow/references/author/plugins/hitl/planning.md +166 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-connector.md +86 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl-manual.md +68 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/impl.md +173 -0
- package/skills/uipath-maestro-flow/references/author/plugins/http/planning.md +107 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/impl.md +540 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-agent/planning.md +115 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/impl.md +269 -0
- package/skills/uipath-maestro-flow/references/author/plugins/inline-voice-agent/planning.md +128 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/impl.md +424 -0
- package/skills/uipath-maestro-flow/references/author/plugins/ixp/planning.md +95 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/impl.md +403 -0
- package/skills/uipath-maestro-flow/references/author/plugins/loop/planning.md +60 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/impl.md +43 -0
- package/skills/uipath-maestro-flow/references/author/plugins/merge/planning.md +24 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/impl.md +82 -0
- package/skills/uipath-maestro-flow/references/author/plugins/queue/planning.md +44 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/impl.md +117 -0
- package/skills/uipath-maestro-flow/references/author/plugins/rpa/planning.md +61 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/impl.md +56 -0
- package/skills/uipath-maestro-flow/references/author/plugins/scheduled-trigger/planning.md +93 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/impl.md +98 -0
- package/skills/uipath-maestro-flow/references/author/plugins/script/planning.md +42 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/impl.md +164 -0
- package/skills/uipath-maestro-flow/references/author/plugins/subflow/planning.md +35 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/impl.md +189 -0
- package/skills/uipath-maestro-flow/references/author/plugins/summarize/planning.md +66 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/impl.md +72 -0
- package/skills/uipath-maestro-flow/references/author/plugins/switch/planning.md +34 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/impl.md +48 -0
- package/skills/uipath-maestro-flow/references/author/plugins/terminate/planning.md +29 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/impl.md +252 -0
- package/skills/uipath-maestro-flow/references/author/plugins/transform/planning.md +47 -0
- package/skills/uipath-maestro-flow/references/diagnose/CAPABILITY.md +73 -0
- package/skills/uipath-maestro-flow/references/diagnose/failure-modes.md +353 -0
- package/skills/uipath-maestro-flow/references/diagnose/troubleshooting-guide.md +174 -0
- package/skills/uipath-maestro-flow/references/evaluate/CAPABILITY.md +134 -0
- package/skills/uipath-maestro-flow/references/evaluate/commands-reference.md +376 -0
- package/skills/uipath-maestro-flow/references/evaluate/eval-sets-guide.md +227 -0
- package/skills/uipath-maestro-flow/references/evaluate/evaluators-guide.md +143 -0
- package/skills/uipath-maestro-flow/references/evaluate/running-guide.md +215 -0
- package/skills/uipath-maestro-flow/references/evaluate/upload-safety.md +94 -0
- package/skills/uipath-maestro-flow/references/operate/CAPABILITY.md +77 -0
- package/skills/uipath-maestro-flow/references/operate/manage.md +39 -0
- package/skills/uipath-maestro-flow/references/operate/run.md +121 -0
- package/skills/uipath-maestro-flow/references/operate/ship.md +57 -0
- package/skills/uipath-maestro-flow/references/shared/action-nodes.md +100 -0
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +269 -0
- package/skills/uipath-maestro-flow/references/shared/cli-conventions.md +178 -0
- package/skills/uipath-maestro-flow/references/shared/file-format.md +582 -0
- package/skills/uipath-maestro-flow/references/shared/node-output-wiring.md +86 -0
- package/skills/uipath-maestro-flow/references/shared/ux-narration-and-todos.md +113 -0
- package/skills/uipath-maestro-flow/references/shared/variables-and-expressions.md +787 -0
- package/skills/uipath-platform/references/integration-service/activities.md +2 -2
- package/skills/uipath-platform/references/integration-service/activity-generation.md +8 -1
- package/skills/uipath-platform/references/integration-service/triggers.md +1 -3
- package/version-manifest.json +1 -1
- package/skills/uipath-maestro-flow/examples/AquariumSafetyStop.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/ArchiveCardExtract.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/BakeOffEntryForm.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/BeeHiveLedger.flow.ts +0 -61
- package/skills/uipath-maestro-flow/examples/BeltProgression.flow.ts +0 -53
- package/skills/uipath-maestro-flow/examples/BirdCountLookup.flow.ts +0 -24
- package/skills/uipath-maestro-flow/examples/ClubDirectory.flow.ts +0 -56
- package/skills/uipath-maestro-flow/examples/ConcertSoundcheck.flow.ts +0 -59
- package/skills/uipath-maestro-flow/examples/DoorbellLog.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FestivalMapScaffold.flow.ts +0 -22
- package/skills/uipath-maestro-flow/examples/FieldTripQuickForm.flow.ts +0 -45
- package/skills/uipath-maestro-flow/examples/FossilCatalogEnrich.flow.ts +0 -26
- package/skills/uipath-maestro-flow/examples/GallerySubmission.flow.ts +0 -67
- package/skills/uipath-maestro-flow/examples/GreenhouseWatering.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/HarbourRadioLine.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/HerbariumDispatch.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/KilnReview.flow.ts +0 -38
- package/skills/uipath-maestro-flow/examples/LibraryDeskChat.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/LighthouseSignal.flow.ts +0 -30
- package/skills/uipath-maestro-flow/examples/MeteorShowerPages.flow.ts +0 -39
- package/skills/uipath-maestro-flow/examples/NeighborhoodWalkPlanner.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/ObservatorySeeing.flow.ts +0 -51
- package/skills/uipath-maestro-flow/examples/OralHistoryDigest.flow.ts +0 -31
- package/skills/uipath-maestro-flow/examples/PlanetariumConfirmation.flow.ts +0 -34
- package/skills/uipath-maestro-flow/examples/PlantNameAdvisor.flow.ts +0 -28
- package/skills/uipath-maestro-flow/examples/PostcardCaption.flow.ts +0 -44
- package/skills/uipath-maestro-flow/examples/PotteryStudioCallback.flow.ts +0 -41
- package/skills/uipath-maestro-flow/examples/RecipeScaler.flow.ts +0 -62
- package/skills/uipath-maestro-flow/examples/SeedPacketReader.flow.ts +0 -49
- package/skills/uipath-maestro-flow/examples/TideTableConverter.flow.ts +0 -35
- package/skills/uipath-maestro-flow/examples/TrailLogSummary.flow.ts +0 -75
- package/skills/uipath-maestro-flow/examples/WorkshopInventory.flow.ts +0 -27
- package/skills/uipath-maestro-flow/examples/bindings.json +0 -85
- package/skills/uipath-maestro-flow/references/CLI-LOOP.md +0 -309
- package/skills/uipath-maestro-flow/references/agent-resources.md +0 -74
- package/skills/uipath-maestro-flow/references/agent.md +0 -175
- package/skills/uipath-maestro-flow/references/agentic-process.md +0 -41
- package/skills/uipath-maestro-flow/references/api-workflow.md +0 -29
- package/skills/uipath-maestro-flow/references/author.md +0 -178
- package/skills/uipath-maestro-flow/references/batch-transform.md +0 -23
- package/skills/uipath-maestro-flow/references/bindings.md +0 -178
- package/skills/uipath-maestro-flow/references/branch.md +0 -18
- package/skills/uipath-maestro-flow/references/brownfield.md +0 -152
- package/skills/uipath-maestro-flow/references/connector-params.md +0 -624
- package/skills/uipath-maestro-flow/references/conversational.md +0 -77
- package/skills/uipath-maestro-flow/references/data-fabric.md +0 -268
- package/skills/uipath-maestro-flow/references/delay.md +0 -26
- package/skills/uipath-maestro-flow/references/diagnose.md +0 -141
- package/skills/uipath-maestro-flow/references/document-pipeline.md +0 -47
- package/skills/uipath-maestro-flow/references/error-handling.md +0 -75
- package/skills/uipath-maestro-flow/references/evaluate.md +0 -168
- package/skills/uipath-maestro-flow/references/event-trigger.md +0 -155
- package/skills/uipath-maestro-flow/references/form-trigger.md +0 -41
- package/skills/uipath-maestro-flow/references/hitl.md +0 -169
- package/skills/uipath-maestro-flow/references/http.md +0 -105
- package/skills/uipath-maestro-flow/references/inline-agent.md +0 -132
- package/skills/uipath-maestro-flow/references/ixp.md +0 -167
- package/skills/uipath-maestro-flow/references/loops.md +0 -77
- package/skills/uipath-maestro-flow/references/manual-trigger.md +0 -39
- package/skills/uipath-maestro-flow/references/operate.md +0 -204
- package/skills/uipath-maestro-flow/references/or-processes.md +0 -91
- package/skills/uipath-maestro-flow/references/parallel-merge.md +0 -21
- package/skills/uipath-maestro-flow/references/placeholder.md +0 -70
- package/skills/uipath-maestro-flow/references/published-function.md +0 -66
- package/skills/uipath-maestro-flow/references/queue.md +0 -53
- package/skills/uipath-maestro-flow/references/return.md +0 -20
- package/skills/uipath-maestro-flow/references/rpa-workflow.md +0 -27
- package/skills/uipath-maestro-flow/references/scheduled-trigger.md +0 -34
- package/skills/uipath-maestro-flow/references/script.md +0 -52
- package/skills/uipath-maestro-flow/references/subflow.md +0 -33
- package/skills/uipath-maestro-flow/references/summarize.md +0 -20
- package/skills/uipath-maestro-flow/references/switch.md +0 -20
- package/skills/uipath-maestro-flow/references/terminate.md +0 -22
- package/skills/uipath-maestro-flow/references/transform.md +0 -32
- package/skills/uipath-maestro-flow/references/voice.md +0 -70
|
@@ -1,624 +0,0 @@
|
|
|
1
|
-
# Integration Service Connectors
|
|
2
|
-
|
|
3
|
-
*Exact signatures, fields, and defaults: `connector()`.*
|
|
4
|
-
|
|
5
|
-
Call a curated or generic Integration Service operation.
|
|
6
|
-
|
|
7
|
-
**Some Data Fabric entity operations are Integration Service connector actions.**
|
|
8
|
-
"Data Fabric" and "Data Service" name one product — the tenant displays connector
|
|
9
|
-
key `uipath-uipath-dataservice` as *UiPath Data Fabric*. CRUD is NATIVE:
|
|
10
|
-
`core.datafabric.*` has all four verbs (`dataFabricRead()`,
|
|
11
|
-
`dataFabricCreate()`, `dataFabricUpdate()`, `dataFabricDelete()`), and the read
|
|
12
|
-
verb covers filters, paging, sort, and get-by-id (filter on `Id`). What still
|
|
13
|
-
routes here is the file record fields and the Record Created / Updated events;
|
|
14
|
-
see [`data-fabric.md`](data-fabric.md) for the routing table.
|
|
15
|
-
|
|
16
|
-
Signatures:
|
|
17
|
-
|
|
18
|
-
- `connector(descriptor, inputs, opts?)`
|
|
19
|
-
- `connector(key, action, inputs?, { connection, folder, object?, version? })` (`connection` and `folder` are required: `check` reports `BINDING_MISSING` without them)
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
.step('issue', connector('uipath-atlassian-jira', 'get-issue',
|
|
23
|
-
{ issueId: input('issueId'), project: 'IN', issuetype: 'Task' },
|
|
24
|
-
{ connection: 'jira', folder: 'shared' }))
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Author first — `check` names every prepare you owe
|
|
28
|
-
|
|
29
|
-
Authoring never waits on `prepare`, and no discovery command precedes the
|
|
30
|
-
source. The loop is:
|
|
31
|
-
|
|
32
|
-
1. **Search** the library and read the operation's page.
|
|
33
|
-
2. **Author** the step from the task's own words — the fields you intend,
|
|
34
|
-
`lookup()` tokens for ids, `{ object: '<name-as-the-task-said-it>' }` for a
|
|
35
|
-
generic operation.
|
|
36
|
-
3. **Check**: `uip maestro flow check .flow-sdk/<Name>.flow.ts --source`. It names each
|
|
37
|
-
gap with the exact command — `LOOKUP_UNRESOLVED`, `OBJECT_UNPREPARED`,
|
|
38
|
-
`CUSTOM_FIELDS_UNPREPARED`, `CONNECTOR_INPUT`.
|
|
39
|
-
4. **Prepare once** — `--object`, `--resolve` and `-f` compose in a single
|
|
40
|
-
invocation, and it finds the connection itself and writes `bindings.json`.
|
|
41
|
-
`prepare` repoints the import itself; it only asks when two flows
|
|
42
|
-
import the same connector, or you passed `--no-source-rewrite`.
|
|
43
|
-
5. **Check again, then compile.**
|
|
44
|
-
|
|
45
|
-
Every prepare command below is the one `check` prints at step 3 — shown here
|
|
46
|
-
so its flags are documented, not as a step to run before the source exists.
|
|
47
|
-
|
|
48
|
-
## Three contracts to settle before authoring
|
|
49
|
-
|
|
50
|
-
Check these before the first connector call; they are the common places where a
|
|
51
|
-
plausible Flow compiles but loses the intended runtime or Studio Web contract:
|
|
52
|
-
|
|
53
|
-
1. **Runtime strings use `tmpl`, not `js`.** For example,
|
|
54
|
-
``where: tmpl`invoiceNumber = '${input('invoiceNumber')}'` `` builds a string.
|
|
55
|
-
``js`invoiceNumber = '${input('invoiceNumber')}'` `` is JavaScript assignment
|
|
56
|
-
syntax and evaluates to only the assigned value. See
|
|
57
|
-
[Structured filters](#structured-filters-ceql).
|
|
58
|
-
2. **Schema-dynamic fields require a prepared descriptor.** Resolving parent
|
|
59
|
-
values is not enough: run `registry prepare` with those values and import the
|
|
60
|
-
generated descriptor so the Flow retains its schema-replay metadata. See
|
|
61
|
-
[the parent-field loop](#schema-dynamic-operations-the-parent-field-loop).
|
|
62
|
-
3. **Paged reference lookups use exactly `nextPage`.** When
|
|
63
|
-
`Pagination.HasMore` is true, pass `Pagination.NextPageToken` as
|
|
64
|
-
`--query "nextPage=<token>"`; do not guess `page`, `pageToken`, or
|
|
65
|
-
`nextPageToken`. See
|
|
66
|
-
[Resolving connection-scoped reference values](#resolving-connection-scoped-reference-values).
|
|
67
|
-
|
|
68
|
-
## Discovering operations and fields
|
|
69
|
-
|
|
70
|
-
`$FLOW_SDK_LIBRARY_MD` (markdown, for reading) and `$FLOW_SDK_LIBRARY_JSON`
|
|
71
|
-
(machine-readable, for compiling) point at a connector library staged by the
|
|
72
|
-
environment. It is not baked into the npm package, so when those variables are
|
|
73
|
-
unset, fetch one into the project:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
uip maestro registry pull
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
The library and its Markdown go to a shared cache
|
|
80
|
-
(`~/.uipath/cache/flow-sdk/library/current/`), and `compile`, `check` and
|
|
81
|
-
`registry search` resolve them from there with no flag. The project gets only
|
|
82
|
-
`.flow-sdk/connectors/`, holding a descriptor per connector it references.
|
|
83
|
-
|
|
84
|
-
To read the Markdown directly, ask where it is:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
87
|
-
FLOW_SDK_LIBRARY_MD="$(uip maestro registry path --library-md --output plain)" \
|
|
88
|
-
|| echo "no connector library yet: run uip maestro registry pull" >&2
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
The four library verbs are `pull`, `search`, `path` and `prepare`.
|
|
92
|
-
Like the authoring verbs they need a prerelease `@uipath/cli`, and they hold no logic of their own — each one runs the `@uipath/maestro-builder-sdk` installed in this workspace.
|
|
93
|
-
`uip` is the entry point and is what delivers these skills, so it is present wherever this guidance is being read.
|
|
94
|
-
(The package also exposes a `flow-sdk` bin for invoking the same commands directly, which is what the printed remedies fall back to when nothing sets `FLOW_SDK_INVOKED_AS`.)
|
|
95
|
-
|
|
96
|
-
**`uip maestro registry` is not `uip maestro flow registry`.** The names are one
|
|
97
|
-
word apart and the jobs are unrelated: this one is the connector library the
|
|
98
|
-
compilers resolve operations against, while `uip maestro flow registry
|
|
99
|
-
pull|search|get` syncs the tenant's **node manifests** — the node types other
|
|
100
|
-
references reach for (`uipath.core.function`, `uipath.core.agent.<name>`). A
|
|
101
|
-
connector operation is never in the node registry and a node type is never in
|
|
102
|
-
the library, so a miss in one is not evidence about the other.
|
|
103
|
-
|
|
104
|
-
Search that library for static contracts:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
jq '.entries[] | select(.label | test("send email"; "i")) | {label,nodeType,path}' \
|
|
108
|
-
"$FLOW_SDK_LIBRARY_MD/index.json"
|
|
109
|
-
sed -n '1,220p' "$FLOW_SDK_LIBRARY_MD/<path-from-index>"
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
When `check` refuses a connection-specific field as unknown — or warns the
|
|
113
|
-
schema is unprepared — materialize the live schema rather than guessing or
|
|
114
|
-
hand-editing the emitted Flow; its diagnostic names this command. It reads the
|
|
115
|
-
schema through the tenant, so it needs a live Integration Service connection
|
|
116
|
-
and a logged-in `uip`; without one, fall back to the curated operation in the
|
|
117
|
-
markdown library.
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
uip maestro registry prepare <connector-key> <action>
|
|
121
|
-
# Generic operation: materialize the one connected object the task uses.
|
|
122
|
-
uip maestro registry prepare <connector-key> <action> --object <api-object-name>
|
|
123
|
-
# Use --all-objects only when the task truly needs the full connected catalog.
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
The result lands in `.flow-sdk/connectors-local/`, which the compilers union over the
|
|
127
|
-
library. Calls accumulate, so preparing a second operation keeps the first.
|
|
128
|
-
|
|
129
|
-
`prepare` picks the connection itself (see below). Pass `--connection-id <id>`
|
|
130
|
-
only to pin a specific one, and expect it to be checked: a connection whose
|
|
131
|
-
`State` is not `Enabled` is refused, naming the enabled alternatives. A `Failed`
|
|
132
|
-
connection answers field discovery with an empty schema, so preparing through
|
|
133
|
-
it would write an overlay with no fields and the next compile would still
|
|
134
|
-
reject every input as unknown — the refusal is the only signal that says
|
|
135
|
-
"connection", not "field".
|
|
136
|
-
|
|
137
|
-
Descriptors from either tree are imported with their real `.ts` extension — a
|
|
138
|
-
`.js` specifier does not resolve, because these are sources rather than compiled
|
|
139
|
-
output. The paths are relative to the source, which sits in `.flow-sdk/` beside
|
|
140
|
-
both trees:
|
|
141
|
-
|
|
142
|
-
```ts
|
|
143
|
-
import { CreateInvoiceShare } from './connectors-local/uipath-salesforce-sfdc.ts';
|
|
144
|
-
import { SendMessageToChannel } from './connectors/uipath-salesforce-slack.ts';
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
Older environments provide the same tool as a bare `prepare-connector` on
|
|
148
|
-
`PATH`. The arguments are identical apart from one name: a connector version is
|
|
149
|
-
`--connector-version` here, because `--version` is Commander's own flag and
|
|
150
|
-
would print the CLI version instead of reaching the generator.
|
|
151
|
-
|
|
152
|
-
For many connectors that first command is **not enough on its own** — see the
|
|
153
|
-
parent-field loop below before concluding a field does not exist.
|
|
154
|
-
|
|
155
|
-
### A Generic operation is authored from the LIBRARY, not through registry prepare
|
|
156
|
-
|
|
157
|
-
Author it directly, with the **library's** action id and the object as an option:
|
|
158
|
-
|
|
159
|
-
```ts
|
|
160
|
-
.step('users', connector('uipath-servicenow-servicenow', 'list-all-records',
|
|
161
|
-
{}, { connection: 'sn', folder: 'shared', object: 'acr_user' }))
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
That is the generic form, and it needs no live resolution: it compiles off the
|
|
165
|
-
baked library, validates, and runs. `registry prepare` is for a **curated,
|
|
166
|
-
schema-dynamic** op whose real fields the connection decides (Jira create-issue
|
|
167
|
-
and friends) — a generic list usually has no connection-specific input fields at
|
|
168
|
-
all, so preparing one resolves nothing and costs a round trip.
|
|
169
|
-
|
|
170
|
-
Reach for it here only when a field you need is genuinely missing, and know what
|
|
171
|
-
it changes. The two namespaces differ: the library calls this `list-all-records`
|
|
172
|
-
and materializes it per object, while the registry serves `list-records`, so
|
|
173
|
-
`registry get` finds nothing under the library id and `registry prepare` reports
|
|
174
|
-
the connector's real action list with the closest matches first. Re-running with
|
|
175
|
-
the registry id succeeds — and yields a CURATED descriptor pinned to one object
|
|
176
|
-
(`ListAccountRecoveryEnrolledUser`), whose node type is `…list-records`. That is
|
|
177
|
-
a different node from the generic one you were asked for. Author the generic call
|
|
178
|
-
above unless you specifically want that.
|
|
179
|
-
|
|
180
|
-
### Finding the object id for a Generic operation
|
|
181
|
-
|
|
182
|
-
Do not hunt for it, and do not resolve it before authoring: write the step
|
|
183
|
-
with `{ object: '<name-as-the-task-said-it>' }` and let `check` name this
|
|
184
|
-
command (`OBJECT_UNPREPARED`). `--object` matches, it does not equality-test —
|
|
185
|
-
any casing, resolved against the connected catalog (exact, then
|
|
186
|
-
case-insensitive on API name and display name, narrowed to objects that
|
|
187
|
-
support the action's verb):
|
|
188
|
-
|
|
189
|
-
```bash
|
|
190
|
-
uip maestro registry prepare <connector-key> <action> --object Company__C
|
|
191
|
-
# object: matched "Company__C" -> Company__c
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
When the name matches **several** objects, the command refuses and prints the
|
|
195
|
-
candidates (API name, display name, custom, operations). `Custom: yes` marks a
|
|
196
|
-
tenant-only object, so a task that says "custom" means one of those rows. Pick
|
|
197
|
-
by the task's wording, or present the candidates and let the user choose —
|
|
198
|
-
never pick for them — then re-run with the chosen `Name`. When **nothing**
|
|
199
|
-
matches, the command has already retried a refreshed catalog: the object is
|
|
200
|
-
not on this connection, so surface that rather than inventing a name. Do not
|
|
201
|
-
hand-filter the catalog with `uip is resources list` + `--output-filter` — the
|
|
202
|
-
matching, the verb narrowing and the staleness retry are prepare's job now,
|
|
203
|
-
and the match is recorded in `.flow-sdk/connectors-local/resolutions.json` (the
|
|
204
|
-
`objects` section) beside the lookup resolutions.
|
|
205
|
-
|
|
206
|
-
## Structured filters (CEQL)
|
|
207
|
-
|
|
208
|
-
An Integration Service list operation takes a server-side filter through a
|
|
209
|
-
FilterBuilder parameter — usually `where`, sometimes `q`. **Write the CEQL
|
|
210
|
-
string; the SDK derives the tree.**
|
|
211
|
-
|
|
212
|
-
```ts
|
|
213
|
-
connector('uipath-microsoft-azureactivedirectory', 'list-groups',
|
|
214
|
-
{ where: "displayName = 'active' AND createdDateTime >= '2026-01-01T00:00:00Z'" },
|
|
215
|
-
{ connection: 'entra', folder: 'shared' })
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
That emits BOTH halves the artifact must carry: the runtime query at
|
|
219
|
-
`inputs.detail.queryParameters.where`, and the design-time tree at
|
|
220
|
-
`essentialConfiguration.savedFilterTrees.where` inside the node's
|
|
221
|
-
`configuration`. Studio Web renders the FilterBuilder from the tree; product
|
|
222
|
-
validation rejects a filter that has only one of the two, so a string alone
|
|
223
|
-
fails `validate` even though the run would have worked.
|
|
224
|
-
|
|
225
|
-
If the task also asks for the filter tree as a separate review artifact,
|
|
226
|
-
compile first and copy the emitted
|
|
227
|
-
`configuration.essentialConfiguration.savedFilterTrees.<parameter>` value
|
|
228
|
-
verbatim into that file (directly or under a named top-level property). Do not
|
|
229
|
-
replace it with an ad hoc `{ field, operator, value }` object or only the CEQL
|
|
230
|
-
string. The serialized tree must retain its numeric `groupOperator` and
|
|
231
|
-
`filters` array.
|
|
232
|
-
|
|
233
|
-
Supported: `=` `!=` `<` `<=` `>` `>=`, `Contains`, `Starts With`, `Ends With`,
|
|
234
|
-
`Like`, their `Not` forms, and `Is Null` / `Is Not Null`. Combine with `AND` or
|
|
235
|
-
`OR`, and parenthesise to nest — `(a = 1 OR b = 2) AND c = 'x'`. Mixing `AND`
|
|
236
|
-
and `OR` at one level is refused rather than guessed, because a tree carries one
|
|
237
|
-
operator per level.
|
|
238
|
-
|
|
239
|
-
Three spellings are compile errors here rather than a tenant-side
|
|
240
|
-
`[102003] Integration Services bad request`:
|
|
241
|
-
|
|
242
|
-
| Wrong | Why | Right |
|
|
243
|
-
|---|---|---|
|
|
244
|
-
| `'accountNumber' = 'ACC123'` | a quoted token is a VALUE to CEQL | `accountNumber = 'ACC123'` |
|
|
245
|
-
| `accountNumber = "ACC123"` | double quotes mark a COLUMN reference | `accountNumber = 'ACC123'` |
|
|
246
|
-
| `status eq 'Open'` | `eq`/`ne`/`gt`/`ge`/`lt`/`le` are OData | `status = 'Open'` |
|
|
247
|
-
|
|
248
|
-
**A filter built from a runtime value keeps the runtime half only.** The tree
|
|
249
|
-
holds literals, so a `js` template in `where` emits the query and no tree — which
|
|
250
|
-
`validate` rejects. Where the filter must vary per run, filter server-side on
|
|
251
|
-
what is constant and narrow the rest downstream, or accept the design-time gap
|
|
252
|
-
deliberately.
|
|
253
|
-
|
|
254
|
-
## Schema-dynamic operations: the parent-field loop
|
|
255
|
-
|
|
256
|
-
A connection alone does not resolve these operations. Their real field set is a
|
|
257
|
-
function of the **values** of a few *parent* fields, so the same operation on the
|
|
258
|
-
same connection has many different shapes. Measured on one live Jira tenant,
|
|
259
|
-
`create-issue`:
|
|
260
|
-
|
|
261
|
-
| parent values | fields |
|
|
262
|
-
| --- | --- |
|
|
263
|
-
| none | **2** — just the parents themselves |
|
|
264
|
-
| project `IN` + issue type `Task` | **19** |
|
|
265
|
-
| project `IN` + issue type `Epic` | **22**, a different set |
|
|
266
|
-
| project `AP` + issue type `Task` | **15** |
|
|
267
|
-
|
|
268
|
-
Both dimensions matter independently, and `fields.summary` — *required* — appears
|
|
269
|
-
in none of the snapshot's static inputs.
|
|
270
|
-
|
|
271
|
-
**The parents are themselves lookups, and the id `--resolve` records is the
|
|
272
|
-
very value `-f` wants.** Do not run one prepare to resolve them and retype the
|
|
273
|
-
ids into a second command: pass both flags together —
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
uip maestro registry prepare uipath-atlassian-jira create-issue \
|
|
277
|
-
--resolve fields.project.key:key=UIP --resolve fields.issuetype.id:name=Bug \
|
|
278
|
-
-f fields.project.key=UIP -f fields.issuetype.id=10732
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
— or run the resolve-only prepare and paste the re-run it prints: when every
|
|
282
|
-
parent has a recorded resolution, its closing note carries the exact
|
|
283
|
-
`-f NAME=VALUE` command with the resolved ids filled in.
|
|
284
|
-
|
|
285
|
-
**Two ways to get this wrong, and only one of them is loud.**
|
|
286
|
-
|
|
287
|
-
*Naming too few parents is refused*, clearly:
|
|
288
|
-
|
|
289
|
-
```
|
|
290
|
-
Result: Failure
|
|
291
|
-
Message: No api-type ObjectAction matched for fields [fields.project.key]
|
|
292
|
-
on operation 'Create'
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
*Naming them all but passing a value the connection does not have is not.* The
|
|
296
|
-
shape is accepted, the describe succeeds, and it resolves to exactly the parent
|
|
297
|
-
fields again — the same 2-field answer as passing no `-f` at all, with no error.
|
|
298
|
-
Treat "I passed `-f` and still got only the parents" as a wrong value, never as
|
|
299
|
-
"this operation has no other inputs." `registry prepare` fails on both cases
|
|
300
|
-
rather than writing the overlay.
|
|
301
|
-
|
|
302
|
-
**1. Find the parents.** Describe with no values and read the reference block of
|
|
303
|
-
each input. A parent is any input whose `Reference.Path` contains a
|
|
304
|
-
`{placeholder}` naming another field:
|
|
305
|
-
|
|
306
|
-
```bash
|
|
307
|
-
uip is resources describe <connector-key> <object> \
|
|
308
|
-
--connection-id <connection-id> --operation <Operation> --output json
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
```jsonc
|
|
312
|
-
{ "Name": "fields.issuetype.id",
|
|
313
|
-
"Reference": { "ObjectName": "project",
|
|
314
|
-
"Path": "/project/{fields.project.key}/issuetypes" } }
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
That placeholder is also the **ordering**: resolve `fields.project.key` before
|
|
318
|
-
you can resolve `fields.issuetype.id`.
|
|
319
|
-
|
|
320
|
-
**A second declaration shape has no placeholder.** Data Service
|
|
321
|
-
(`uipath-uipath-dataservice`) operations such as `create-entity-record`,
|
|
322
|
-
`update-entity-record` and the file-record-field operations declare their parent
|
|
323
|
-
through the registry's schema action (`GenerateSchema` over `entityName`), not
|
|
324
|
-
through a reference path. Their describe with no values returns only the static
|
|
325
|
-
inputs (`entityName`, `expansionLevel`) — not one field of the entity — so
|
|
326
|
-
`compile` refuses `title`, `description`, … as unknown. `prepare` names the
|
|
327
|
-
parent when you omit it; the fix is always the entity name:
|
|
328
|
-
|
|
329
|
-
```bash
|
|
330
|
-
uip maestro registry prepare uipath-uipath-dataservice create-entity-record \
|
|
331
|
-
-f entityName=FlowCodeEvalEntity
|
|
332
|
-
# → 8 input field(s): entityName, expansionLevel + the entity's own fields
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
Do not work around the refusal — not with `rawNode`, not by editing the emitted
|
|
336
|
-
`.flow`, not by hand-writing a `connectors-local/` overlay. Each produces a node
|
|
337
|
-
the platform cannot run.
|
|
338
|
-
|
|
339
|
-
Parent-field names are operation-specific. Copy each `Name` exactly from this
|
|
340
|
-
operation's describe response; do not reuse the dotted names from the
|
|
341
|
-
`create-issue` example for another action (for example, Jira `get-issue` uses
|
|
342
|
-
`project` and `issuetype`).
|
|
343
|
-
|
|
344
|
-
**2. Resolve a value for each, outermost first.** Match the collection on
|
|
345
|
-
`Reference.Path`, *not* on `Reference.ObjectName` — `ObjectName` is often the
|
|
346
|
-
root resource shared by several fields (both Jira parents above report
|
|
347
|
-
`project`), and the sub-collection the path names may not be a listable object at
|
|
348
|
-
all. When it is not, find the object whose own path covers it:
|
|
349
|
-
|
|
350
|
-
```bash
|
|
351
|
-
uip is resources list <connector-key> --connection-id <connection-id> --output json # find the object
|
|
352
|
-
uip is resources describe <connector-key> <object> --connection-id <connection-id> # confirm its Path
|
|
353
|
-
uip is resources run list <connector-key> <object> --connection-id <connection-id> \
|
|
354
|
-
--query "<path-param>=<value-from-the-previous-parent>" --output json
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
For Jira, `/project/{key}/issuetypes` has no object of its own; `project_statuses`
|
|
358
|
-
(`/project/{projectIdOrKey}/statuses`) covers it and returns the ids.
|
|
359
|
-
|
|
360
|
-
**3. Prepare with every parent.** Pass them all as `-f NAME=VALUE`:
|
|
361
|
-
|
|
362
|
-
```bash
|
|
363
|
-
uip maestro registry prepare <connector-key> <action> \
|
|
364
|
-
-f fields.project.key=IN -f fields.issuetype.id=10620
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
`prepare` quotes the service's rejection, and separately fails when the
|
|
368
|
-
values were accepted but resolved to nothing beyond the parents — so both
|
|
369
|
-
mistakes surface here rather than as a puzzling compile error later.
|
|
370
|
-
|
|
371
|
-
**Values are parent-scoped and non-portable.** A Jira issue-type id is valid only
|
|
372
|
-
inside its project (`Task` is `10620` in `IN` and `10005` in `AP`), so ids cannot
|
|
373
|
-
be copied between projects, connections, or tasks — resolve them against the
|
|
374
|
-
connection the flow actually binds. The materialized field set is likewise
|
|
375
|
-
tenant-specific: custom fields captured from one connection
|
|
376
|
-
(`fields.storyPointEstimate_Customfield10016`) may not exist on another at deploy.
|
|
377
|
-
Standard fields (`summary`, `description`) are portable.
|
|
378
|
-
|
|
379
|
-
The command prints the generated descriptor import and `connector(...)` call.
|
|
380
|
-
Use that descriptor directly: it carries the connection-resolved operation and
|
|
381
|
-
object identity even when the live action id differs from the baked catalog.
|
|
382
|
-
The `connectors-local/` overlay is authoring input; emitted Flow is self-contained.
|
|
383
|
-
Prefer curated operations for their stable contract. Use the connector's raw
|
|
384
|
-
`*-http-request` operation only for raw/generic needs the curated surface lacks.
|
|
385
|
-
|
|
386
|
-
File uploads are multipart Flow inputs. If the static catalog omits an upload
|
|
387
|
-
field, prepare the operation against its connection, then pass the upstream file
|
|
388
|
-
like any other connector input:
|
|
389
|
-
|
|
390
|
-
```ts
|
|
391
|
-
.step('upload', connector(SendFileToChannel, {
|
|
392
|
-
file: out('download', 'Response'),
|
|
393
|
-
channels: channelId,
|
|
394
|
-
send_as: 'user',
|
|
395
|
-
}, { connection: 'slack', folder: 'shared' }))
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
The compiler emits the product's `multipartParameters` envelope. This is a Flow
|
|
399
|
-
artifact transport; the separate `uip is resources run` command does not expose
|
|
400
|
-
a multipart flag and is not the execution surface for this wiring.
|
|
401
|
-
|
|
402
|
-
Only a **file** part is an input. A string-typed part (Teams `body`, Gmail
|
|
403
|
-
`body`, GenAI `RagRequest`) is the container the runtime composes from the
|
|
404
|
-
operation's body fields — write those (`'body.content'`, `Body`, `prompt`), never
|
|
405
|
-
the part itself; the compiler lists the part without a value, as the designer does.
|
|
406
|
-
|
|
407
|
-
```ts
|
|
408
|
-
.step('notify', connector(SendChannelMessage, {
|
|
409
|
-
team_id: lookup(SendChannelMessage, 'team_id').byDisplayName('Sales'),
|
|
410
|
-
channel_id: lookup(SendChannelMessage, 'channel_id').byDisplayName('alerts'),
|
|
411
|
-
body: { content: 'A request was routed to Sales.' }, // or 'body.content': …
|
|
412
|
-
}, { connection: 'teams', folder: 'shared' }))
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
Preparation requires a working live connection. When a task explicitly uses
|
|
416
|
-
offline/validate-only evidence and does not require connection-specific fields,
|
|
417
|
-
use the baked descriptor with its published static inputs; do not run discovery
|
|
418
|
-
with a placeholder connection or invent fields that were not measured. If the
|
|
419
|
-
published input list is empty, pass `{}`; offline evidence then proves operation
|
|
420
|
-
identity and control-flow routing, not the provider payload or dispatch.
|
|
421
|
-
|
|
422
|
-
[`bindings.json`](bindings.md) names symbolic connection/folder bindings used by
|
|
423
|
-
the source. Its reference defines the schema, compile-time resolution rules,
|
|
424
|
-
and boundary with emitted-artifact bindings. Populate its resource keys from
|
|
425
|
-
the live connection and folder listings. A plausible GUID is not proof that a
|
|
426
|
-
resource exists or belongs to the intended tenant; resource refresh and product
|
|
427
|
-
debug are the evidence.
|
|
428
|
-
|
|
429
|
-
## Resolving connection-scoped reference values
|
|
430
|
-
|
|
431
|
-
Fields such as Slack channels and mailbox folders store ids, not display names.
|
|
432
|
-
|
|
433
|
-
**If a field is marked LOOKUP, do not guess it and do not resolve it by hand.**
|
|
434
|
-
Author the field's helper call and keep going:
|
|
435
|
-
|
|
436
|
-
```ts
|
|
437
|
-
channel: lookup(SendMessageToUser, 'channel').byEmail('dustin@example.com')
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
`.byEmail` is an **alias**, and aliases are generated onto the descriptor.
|
|
441
|
-
`lookup()` takes two forms, and only one of them carries them:
|
|
442
|
-
|
|
443
|
-
| form | when | helpers |
|
|
444
|
-
| --- | --- | --- |
|
|
445
|
-
| `lookup(SendMessageToUser, 'channel')` | you imported the descriptor `prepare` generated | `.byEmail(v)`, `.byRealName(v)`, … plus `.by(name, v)` |
|
|
446
|
-
| `lookup('uipath-salesforce-slack', 'send-message-to-user', 'channel')` | Generic CRUD, or no descriptor in hand | `.by(name, v)` only |
|
|
447
|
-
|
|
448
|
-
Do not carry an alias from the first row into the second.
|
|
449
|
-
There is no table to generate it from, so `lookup('k', 'a', 'f').byEmail(…)` throws.
|
|
450
|
-
Write `.by('profile.email', …)` there instead — the names a field is searchable by are in the descriptor's `LOOKUP:` header and in every `check` diagnostic about the field.
|
|
451
|
-
|
|
452
|
-
When the flow is written, `check` reports each token still unresolved
|
|
453
|
-
(`LOOKUP_UNRESOLVED`) with exactly this command — one prepare records them all,
|
|
454
|
-
and it is the only tenant call the whole loop needs:
|
|
455
|
-
|
|
456
|
-
```bash
|
|
457
|
-
uip maestro registry prepare uipath-salesforce-slack send-message-to-user \
|
|
458
|
-
--resolve channel:profile.email=dustin@example.com
|
|
459
|
-
```
|
|
460
|
-
|
|
461
|
-
**You do not need to find the connection first.** `prepare` discovers it from
|
|
462
|
-
`uip is connections list` — your own folder first, the tenant second — and writes
|
|
463
|
-
both the connection id AND its folder key into `bindings.json`. So one command
|
|
464
|
-
covers the lookup, the connection binding and the folder binding. Pass
|
|
465
|
-
`--connection <name>` only when several connections match the same connector;
|
|
466
|
-
it reports the candidates rather than guessing, because connections for one
|
|
467
|
-
connector are not interchangeable.
|
|
468
|
-
|
|
469
|
-
**And you do not need to find the RIGHT connection first either.** A value can
|
|
470
|
-
exist on one connection and not another — a project in a team's Jira but not in
|
|
471
|
-
your personal workspace — so when a `--resolve` reads a collection to the end
|
|
472
|
-
without a match, `prepare` tries the other enabled connections for that
|
|
473
|
-
connector before failing, and re-runs itself against the one that resolves
|
|
474
|
-
everything:
|
|
475
|
-
|
|
476
|
-
```
|
|
477
|
-
fields.project.key: not on this connection; trying 1 other uipath-atlassian-jira connection(s)
|
|
478
|
-
connection: is-sandboxes-test@…-sandbox-380 (uipath-maestro-flow) resolves fields.project.key;
|
|
479
|
-
re-running against it (--connection-id f5273a4d-…)
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
`bindings.json` ends up naming the connection that was actually used. Three
|
|
483
|
-
things it will not do: it does not retry a connection you PINNED with
|
|
484
|
-
`--connection-id` / `--connection` (your choice stands, and the message names
|
|
485
|
-
the alternatives so you can re-run), it does not retry a transport or permission
|
|
486
|
-
failure (that says nothing about whether the value exists), and it does not pick
|
|
487
|
-
between two connections that both resolve — the ids they return differ per
|
|
488
|
-
connection, so that is reported for you to choose.
|
|
489
|
-
|
|
490
|
-
**So do not go crawling Integration Service when a lookup fails.** The failure
|
|
491
|
-
message names the connection it read and, once every candidate has been tried,
|
|
492
|
-
the one command that shows what the collection holds. Tenant discovery is still
|
|
493
|
-
not a phase of this loop. When the candidates share a name, pick one
|
|
494
|
-
by the `--connection-id <id>` each candidate line prints; `bindings.json` is
|
|
495
|
-
written on that route too. The entries are named after the `connection:` and
|
|
496
|
-
`folder:` labels your source already uses for this connector (for example
|
|
497
|
-
`is-sandboxes`); a source that uses none gets `<connector's last segment>`
|
|
498
|
-
(`slack`) and `shared`; `--bind-connection` / `--bind-folder` override both.
|
|
499
|
-
A label `prepare` cannot read without running the source (a computed value, or
|
|
500
|
-
a step whose connector it cannot trace) is never guessed: `prepare` prints a
|
|
501
|
-
`bindings:` line naming that step, and binds the one label it did read for the
|
|
502
|
-
connector, or the default when it read none.
|
|
503
|
-
`prepare` refuses, before it writes anything, a source that gives one connector
|
|
504
|
-
several labels, or gives two connectors the same connection label (one label
|
|
505
|
-
binds one connection). The `next:` line prints the names it bound. `compile`
|
|
506
|
-
refuses a label that a `bindings.json` with entries does not declare
|
|
507
|
-
(`BINDING_UNDECLARED`), and warns `CONNECTION_STUB` when a declared one does not
|
|
508
|
-
resolve to a tenant id.
|
|
509
|
-
|
|
510
|
-
`check` names the exact command when a lookup is unresolved, and warns when a
|
|
511
|
-
lookup field is given a literal id. It also speaks up when a lookup field is
|
|
512
|
-
bound to a runtime expression (`LOOKUP_RUNTIME_VALUE`): a warning that states
|
|
513
|
-
the id the field sends (`reporter.accountId`, not a name), and an error when
|
|
514
|
-
the expression reads an e-mail field into a lookup that neither sends nor
|
|
515
|
-
searches by e-mail — there an address is never that id, and the provider
|
|
516
|
-
refuses it only once the flow runs. (A field that sends an e-mail, such as
|
|
517
|
-
SendGrid's `from`, takes one silently.) A required lookup field you have no
|
|
518
|
-
value for is resolved with its helper, not filled from a look-alike input. Run
|
|
519
|
-
`check` before compiling: it finds everything else that is wrong first, so the
|
|
520
|
-
one expensive call is spent last.
|
|
521
|
-
|
|
522
|
-
**When the task names nobody for a person-shaped required field** (`reporter`,
|
|
523
|
-
`requester`, `owner`), the value is the connection's own user: take the account
|
|
524
|
-
from `uip login status` and resolve by **display name**. Search only by the
|
|
525
|
-
names the field's "matches on" list declares — do not improvise queries against
|
|
526
|
-
raw collections. Jira in particular hides e-mail addresses from user search, so
|
|
527
|
-
an `emailAddress=` query returns nothing for a user that plainly exists, while
|
|
528
|
-
`displayName=` finds them; the field's spec (`matches on displayName |
|
|
529
|
-
accountId`) already told you e-mail was not searchable.
|
|
530
|
-
|
|
531
|
-
Each operation's markdown page lists its lookup fields, the helper for each, and
|
|
532
|
-
what it can be searched by. The generated descriptor carries the same facts as a
|
|
533
|
-
comment above the `export const`, so `grep -B6 'export const SendMessageToUser'`
|
|
534
|
-
answers it too.
|
|
535
|
-
|
|
536
|
-
Two cases have **no** helper on purpose, and for them a plain string is correct:
|
|
537
|
-
a field whose `reference` merely enumerates legal values (what you send back is
|
|
538
|
-
what you searched for), and a collection that is the same in every tenant
|
|
539
|
-
(country lists, timezones). Their pages say so and print the command that shows
|
|
540
|
-
the accepted values.
|
|
541
|
-
|
|
542
|
-
The rest of this section is the manual route — needed only when a field carries
|
|
543
|
-
no lookup, or when you are inspecting a collection rather than resolving a value.
|
|
544
|
-
Resolve against the same connection the flow binds, never by copying an id from
|
|
545
|
-
another connection or session:
|
|
546
|
-
|
|
547
|
-
**Choose the collection from the prepared action definition before the first
|
|
548
|
-
`resources run list` call.** Run `registry prepare` first and find the target
|
|
549
|
-
input's `reference` block in its generated `.flow-sdk/connectors-local/*.v1def.json`.
|
|
550
|
-
`reference.path` is the contract — it names the exact collection, and any
|
|
551
|
-
`{placeholder}` in it names a field whose value must be resolved first.
|
|
552
|
-
`reference.objectName` is only a starting point: it is frequently the shared root
|
|
553
|
-
resource (several Jira inputs report `project` while their paths differ), so it
|
|
554
|
-
cannot by itself identify the collection.
|
|
555
|
-
|
|
556
|
-
Use `objectName` as `<object-name>` below **only when** `uip is resources
|
|
557
|
-
describe <connector-key> <objectName>` reports a `Path` matching
|
|
558
|
-
`reference.path`. When it does not — a sub-collection often has no listable
|
|
559
|
-
object of its own — find the object whose declared `Path` covers
|
|
560
|
-
`reference.path` and use that, passing the placeholder as a `--query` parameter.
|
|
561
|
-
Do not substitute a similar generic collection on name resemblance alone: two
|
|
562
|
-
collections can return the same records while only the one on `reference.path`
|
|
563
|
-
is the action's contract.
|
|
564
|
-
|
|
565
|
-
```bash
|
|
566
|
-
uip is resources run list <connector-key> <object-name> \
|
|
567
|
-
--connection-id <connection-id> \
|
|
568
|
-
--output-filter '{items:items[].{Id:Id,Name:Name},page:Pagination.{HasMore:HasMore,NextPageToken:NextPageToken}}' \
|
|
569
|
-
--output json
|
|
570
|
-
```
|
|
571
|
-
|
|
572
|
-
`--output-filter` selects from `Data`; list responses place both `items` and
|
|
573
|
-
`Pagination` there. Replace `Id` and `Name` with the exact id/display fields in
|
|
574
|
-
the prepared reference contract. Keep the page fields in the same projection
|
|
575
|
-
so a match read does not need a second `cat`/`jq` pass.
|
|
576
|
-
|
|
577
|
-
When `Data.Pagination.HasMore` is `"true"`, keep the operation and connection
|
|
578
|
-
unchanged and pass `Data.Pagination.NextPageToken` as `nextPage` on the next
|
|
579
|
-
call:
|
|
580
|
-
|
|
581
|
-
```bash
|
|
582
|
-
uip is resources run list <connector-key> <object-name> \
|
|
583
|
-
--connection-id <connection-id> \
|
|
584
|
-
--query "nextPage=<value-from-NextPageToken>" \
|
|
585
|
-
--output-filter '{items:items[].{Id:Id,Name:Name},page:Pagination.{HasMore:HasMore,NextPageToken:NextPageToken}}' \
|
|
586
|
-
--output json
|
|
587
|
-
```
|
|
588
|
-
|
|
589
|
-
Stop early when the target record appears. Otherwise continue until
|
|
590
|
-
`Data.Pagination.HasMore` is `"false"`; a first-page miss is not evidence that
|
|
591
|
-
the record does not exist. The parameter name is `nextPage`, not
|
|
592
|
-
`nextPageToken`.
|
|
593
|
-
|
|
594
|
-
## Response judgments
|
|
595
|
-
|
|
596
|
-
A get-by-id not-found is a service error. Add `.onError(...)` when the scenario
|
|
597
|
-
wants a not-found answer; otherwise failing loud can be intentional.
|
|
598
|
-
|
|
599
|
-
For a response with no declared fields, read the whole output into a script
|
|
600
|
-
local before inspecting service-specific properties:
|
|
601
|
-
|
|
602
|
-
```ts
|
|
603
|
-
.step('report', script({ code: `
|
|
604
|
-
const issue = $vars.issue.output;
|
|
605
|
-
return { key: issue.key, status: issue.fields.status.name };
|
|
606
|
-
` }))
|
|
607
|
-
```
|
|
608
|
-
|
|
609
|
-
Every measured list operation has returned the bare array, so prefer that shape
|
|
610
|
-
for an unmeasured list too, while allowing live evidence to disprove it. Add a
|
|
611
|
-
new measurement to the list-envelope ledger when product debug shows a genuine
|
|
612
|
-
wrapper. One call is one page; use the operation's filtering/paging inputs when
|
|
613
|
-
the business operation needs a narrower or later page.
|
|
614
|
-
|
|
615
|
-
## Scenario and evidence boundary
|
|
616
|
-
|
|
617
|
-
Include every input named by the scenario even when the provider schema marks
|
|
618
|
-
it optional. Replay proves values are threaded. Integration Service live mode
|
|
619
|
-
proves the connector dispatch and service response. Only product Flow debug
|
|
620
|
-
proves the deployed runtime can resolve the emitted bindings and execute the
|
|
621
|
-
whole graph.
|
|
622
|
-
|
|
623
|
-
Generated descriptors provide a typed alternative: `connector(CreateIssue, inputs, opts)`.
|
|
624
|
-
Use `opts.object` to disambiguate a generic operation covering several objects.
|