关于 uipath-api-workflow
用于创建、编辑、运行、验证和打包 API Workflow 的 UiPath 技能,工作流采用 CNCF Serverless Workflow DSL 1.0.0 和 UiPath 扩展。还涵盖连接器活动、触发器,以及通过 Solutions 发布。
主要功能
- 01创建和编辑工作流 JSON
- 02运行并验证工作流
- 03构建和打包项目
- 04发现连接器活动
- 05配置事件触发器
适用场景
- 01使用 HTTP 或连接器活动构建工作流
- 02在本地测试工作流
- 03通过连接器事件启动工作流
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ uipath/ skills --skill uipath-api-workflow安装后在 Claude Code 中输入/uipath-api-workflow确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/templates/api-workflow-template.jsonconditional-workflow-example.jsonconnector-call-example.jsonfile-base64-roundtrip-example.jsonloop-aggregation-example.jsonnested-control-flow-example.jsonsolution-connection-resource-template.jsontrigger-workflow-template.jsonvendor-curated-call-example.jsonreferences/cli-reference.mdconnector-activity-discovery.mdcontrol-flow-patterns.mdexpressions-and-context.mdfiles-and-base64.mdhttp-retry-config.mdoperating-published-workflows.mdtask-types.mdtesting-and-evals.mdtrigger-authoring-guide.mdtroubleshooting.mdworkflow-file-format.md详细介绍
UiPath API Workflow 助手
构建、运行和发布 UiPath API 工作流:符合 CNCF Serverless Workflow DSL 1.0.0 并包含 UiPath 活动扩展的 JSON。工作流通过 @uipath/api-workflow-executor 和 uip api-workflow run 运行,并通过 uip solution pack 打包为 Type: "Api" 项目。
TDD 闸门——请先阅读(规则 22)。 对于创建或编辑请求,请检查
Workflow.json同级的<project>/evals/,不要检查工作区或解决方案根目录。如果该目录不存在,则关闭 Evaluations:不要询问测试或循环模式,照常编写。如果该目录存在,则先暂停编写,并询问是保留/更改现有行,还是添加空测试;还要询问是运行/重试直到全部通过,还是只编写一次。得到这两个回答后,声明架构,先编写/更新 evals,然后再编写工作流。用户要求不提问时,只跳过这些问题,不代表已同意运行时操作;仅在用户请求时运行各行测试。之后如果行为发生变化,需询问是否应更改受影响的预期结果。
何时使用此技能
用于创建/编辑 API 工作流 JSON,以及处理 Sequence、Assign、JavaScript、Log Message、If、ForEach、DoWhile、Break、TryCatch、Wait、Response、HTTP Request 和连接器活动。对于 Studio Web 连接器工作流和项目 evals/ 布局,请参考连接器和测试相关文档。
-
本地运行、验证、构建/打包、发布
-
用户想在 API 工作流中处理文件——接收文件输入、将文件作为 base64 发送到 API、将 base64 负载转换回文件,或询问
JobAttachment、$helpers.file、serializeData()、--input-file/--output-dir。请参阅 references/files-and-base64.md -
从连接器事件启动工作流(点击 Slack 按钮、新建 Outlook 日历条目),或检查/更改现有触发器(
call: "UiPath.IntSvcEvent")。请参阅 references/trigger-authoring-guide.md -
操作已发布的工作流
不要将此技能用于 .flow Maestro 流程(uipath-maestro-flow)、.xaml 或代码化 RPA(uipath-rpa)、代码化 Agent(uipath-agents)或代码化 Web 应用(uipath-coded-apps)。API 工作流 evals 仅适用于与 Workflow.json 同级的 evals/,并使用 evals/<scope>/eval-sets/;evals/eval-sets/ 用于低代码 Agent,Flow evals 用于 uipath-maestro-flow。
核心原则
-
构建前先处理需要判断的分支。 如果连接不可用、没有精选活动、需要使用未记录的 HTTP 后备方案、缺少假定的输入,或存在结构不同的可行工作流,则只进行共通的探索,然后停下并说明权衡及建议。不要构建所有分支。机械性选择无需升级处理。
-
先了解,再编写。 编辑前先阅读现有工作流;创建前先阅读相关模板。
-
从最小实现开始,逐步迭代至正确。 一次添加一个活动。每次添加后使用
--no-auth --output json运行。修复出错之处,然后重复。 -
运行前先验证。
uip api-workflow validate是自主/离线操作。run是运行时验证,可能访问 HTTP 或连接,并且需要获得同意。 -
按类别修复: 结构 > 表达式 > 活动配置 > 逻辑。
关键规则
-
工作流 JSON。 顶层包含
document(其dsl: "1.0.0")、evaluate(其language: "javascript"和mode: "strict"),以及包含一个根序列的do。根序列名称可以不同;请阅读文件。请参阅 references/workflow-file-format.md。 -
WorkflowStart。 它是根序列中的第一个活动,会将变量默认值填充到
$context.variables,将输入转发到$input,且不得删除、重命名或修改。只有它使用isTransparent: true。 -
活动对象和键。
do数组中的每个活动都是一个单键对象。键必须全局唯一,包括#Wrapper、#Then、#Else和#Body等包装器后缀。 -
导出。 除 Log Message 外,每个活动都应导出输出。Assign 使用
{ ...$context, variables: { ...$context.variables, ...$output } };其他活动使用{ ...$context, outputs: { ...$context?.outputs, "<ActivityKey>": $output } }。请参阅 references/expressions-and-context.md。 -
字面量表达式。 在 Assign
set、Response、Ifwhen和变量上下文中,字符串字面量必须写成"${'literal'}"这样的表达式,因为 Studio Web 保存时会将裸写的"literal"改写为"${literal}",导致运行时失败;数字、布尔值和引用无需包装。Connector 的bodyParameters、queryParameters和pathParameters则使用裸字面量;引用仍使用表达式。请参阅 references/connector-activity-discovery.md 和 references/troubleshooting.md。 -
Assign。 每个 Assign 只设置一个变量。Studio Web 会折叠包含多个键的
set;请使用连续的 Assign 活动,并通过变量导出合并每个单键。 -
If。 使用包含
If_N、If_N#Then和If_N#Else的If_N#Wrapper。两个分支都以then: "exit"结束;when使用${...}包装。请参阅 references/control-flow-patterns.md。 -
循环。 ForEach 和 DoWhile 都需要
#Body。ForEach 使用带索引的累积方式,并在迭代 0 时重置;DoWhile 使用简单累积方式。each和at是普通名称,不是表达式。 -
DoWhile。
for.in始终为"${ [1] }";重复执行由doWhile控制。循环体必须更新条件变量,否则循环可能无限执行。 -
嵌套循环。 为每个循环使用不同的迭代器名称和索引名称。
-
循环/catch 绑定。 声明
for.each、for.at和catch.as时不要加$,但在表达式/脚本中引用时要加$:"row"绑定$row,"idx"绑定$idx,"err"绑定$err。省略$会导致名称未定义错误。 -
Break。 它只退出最内层循环,且仅在
#Body内有效。将其放在 If 内;break必须是字符串"true",并使用then: "exit"和set: "${$input}"。要退出嵌套循环,请设置一个标志,并在外层循环中检查该标志。请参阅 references/control-flow-patterns.md。 -
工作流输入。 使用
$workflow.input.<name>;在非首个活动中,切勿使用$input.<name>;$input是当前任务输入,可能是先前活动的输出。 -
JavaScript。 脚本将
$context、$workflow和$input作为全局变量读取,并且必须返回一个值。保留标准的 Studio Webrun.script.arguments框架:"${{ \"$context\": $context, \"$workflow\": $workflow, \"$input\": $input }}";运行时会忽略它。记录日志时使用 Log Message,切勿在脚本中使用console.*;其代码必须严格为console.log|warn|error(<message>),不得包含return、export或结尾的;。请参阅 references/task-types.md。 -
Response。
markJobAsFailed与response同级。始终使用then: "end";then: "exit"用于分支/循环。对象响应使用一个表达式,例如"${{ key: $context.variables.value }}",而不是分别插值各个字段。单个值可以使用"${$context.outputs.Activity}"或"${'done'}"。${ { ... } }和${{ ... }}都有效;请保持一致。切勿混用:${{ { ... } }}虽能通过validate,但运行时会因Unexpected token '{'而失败。- 以磁盘文件为准。 Studio Web 保存后,以磁盘文件为准;重新应用所需的规避方案后,再运行
uip api-workflow run --no-auth。
- 以磁盘文件为准。 Studio Web 保存后,以磁盘文件为准;重新应用所需的规避方案后,再运行
-
连接器和 HTTP 只能通过注册表生成。 运行
uip api-workflow registry resolve,然后运行stub;切勿猜测uiPathActivityTypeId、metadata.configuration、活动类型、端点、SlotKey或ExportBucketKey;原样使用 stub 输出。
-
关键词
resolve未匹配到结果,并不能证明没有精选活动,因为它会对令牌进行 AND 匹配。使用uip is connectors list --filter确定产品/供应商,然后在回退前使用uip is activities list <connector-key>枚举活动。 -
IntSvc/供应商活动要求
uip is connections ping <uuid>成功。如果列表为空或失败,尝试不带筛选条件的列表,然后尝试--all-folders,并 ping 另一个匹配的连接。 -
如果没有任何连接 ping 成功,请停止并询问用户是同意使用明确的占位符继续,还是等待修复连接。切勿擅自选择。
-
切勿在
with.connectionId、connectionResourceId或 HTTP URL 中使用替代哨兵值。写入前,使用真实值重新生成 stub。 -
每次生成 stub 后,都要根据资源描述或 stub 输入检查必填字段;如有需要,使用
--inputs重新生成 stub。 -
连接器参数使用扁平的点分隔键和不加引号的字面值;不要使用
${'literal'}。 -
不要将
UiPath.Http与供应商连接 UUID 一起使用。IntSvc 结果会被包装;读取$context.outputs.<ExportBucketKey>.content.<field>。 -
接受
nextPage参数的 IntSvc 列表和搜索活动每次调用只返回一页。当 stub 的with.method为GET且.content是数组时,在 stub 的with中添加"maximumRecordsReturned": -1(或一个正数上限),并且不要编写循环:运行时会获取各页内容,并在达到上限前将其合并到一个.content列表中。手动将其添加为数字字面值;stub 会省略它,--inputs会将其丢弃,而其中的表达式不会被求值。对于其他方法,或需要单独处理每一页的情况,请循环处理活动的.page输出,并在.page不存在或.page.hasMorePages为 false 时停止。切勿根据原始的elements-next-page-token标头判断:每一页(包括最后一页)都会包含该标头。请参阅 references/connector-activity-discovery.md。 -
在 Solutions 模式下,使用
uip api-workflow bindings sync --workflow <Workflow.json>同步 IntSvc 绑定,并使用uip solution resources refresh --solution-folder <path>刷新。HTTP、非连接器和独立项目不需要执行这些操作。 -
有关发现流程、字段格式规则、分页和 multipart,请参阅 references/connector-activity-discovery.md。
16a. 连接器事件触发器属于单独的目录,使用单独的活动结构,并且需要第二个产物。 当工作流必须由事件启动时(例如 Slack 按钮被点击、新建 Outlook 日历条目),运行 uip api-workflow registry resolve "<keyword>" --kind trigger,然后运行 registry stub——切勿手动编写。将 stub 放入且只放入一个位置:根 Sequence 的 do 数组中,紧接 WorkflowStart 之后(do[0].Sequence_1.do[1])——切勿放在 If/ForEach/TryCatch 内、其他活动之后,也不要放置第二个触发器。validate 会拒绝位置错误或多出的触发器。GenericTrigger 需要 --object-name。完整流程、筛选语法和反模式请参阅 references/trigger-authoring-guide.md。
- **每次添加或编辑触发器后都要运行 `uip api-workflow bindings sync`。** 此命令会在 `bindings_v2.json` 中写入 `EventTrigger` 条目,以便在部署时注册 Orchestrator 事件触发器。**如果不运行此命令,工作流仍可通过验证、打包、发布和部署,却永远不会触发。** 没有任何检查机制会捕获这一问题。在 Solutions 模式下,随后还要运行 `uip solution resources refresh`(规则 16)。
- **`webhooks` 触发器无法在本地无输入运行。** `uip api-workflow run` 仅会为 `polling` 重放实时事件(根据规则 21,这会产生副作用);对于任一模式,使用事件负载格式的 `--input-arguments` 都可以离线测试工作流的其余部分。
17. CLI 输入。 将 JSON 作为字符串传入:--input-arguments '{"key":"value"}';JSON 无效时以状态码 1 退出。
-
CLI 输出。 使用
--output json解析。成功:{ "Result": "Success", "Code": "WorkflowRun", "Data": {...} };失败:{ "Result": "Failure", "Message": "...", "Instructions": "..." },并以状态码 1 退出。 -
项目创建与发布。 使用
uip api-workflow init <name>搭建项目框架;不要手动拼装项目文件。项目命令包括build <projectDir>和pack <projectDir> <outputDir>。使用uip solution pack和uip solution publish;不存在uip api-workflow publish。解决方案类型为"Api"。
19a. 初始化结构与注册。 在解决方案目录中运行 uip api-workflow init <name> --output json。此命令会创建 project.uiproj、Workflow.json、entry-points.json 和 bindings_v2.json,并在最近的 .uipx 中注册该项目。仅在明确要求创建独立 CLI/本地项目时使用 --skip-solution-registration。始终创建完整项目,不要只创建单个工作流文件。在项目和解决方案文件夹之外(例如 /tmp 下)构建临时探测工作流,例如仅用于检查连接器数据的工作流,并在完成前将其删除;不要在解决方案中留下额外项目。不要使用解决方案项目的 add/remove 命令,也不要更改现有项目 ID。对于旧版 project.json,请初始化一个新的同级项目并将内容移入其 Workflow.json,或在原处转换;请参阅 references/troubleshooting.md。运行时成功并不能证明与 Studio Web 兼容;由 init 生成的结构才能证明。
-
静态验证。 在每次创建/编辑周期中,将
uip api-workflow validate <Workflow.json> --output json作为最后一条自主执行的命令。如果Result: "Failure",请读取Instructions,修复其 JSON 路径所指向的活动,并重复验证,直到Data.Status: "Valid"。优先处理语义尾部错误,而不是重复的oneOf噪声。验证可以发现格式错误的 JSON、未知类型、必填字段错误、错误的 evaluate 设置、重复/空变量以及空任务列表;但无法发现已损坏的连接、错误的资源 ID、运行时表达式错误、未包装的字面量或包含多个键的 Assign 集合——这些需要在用户同意后使用
uip api-workflow run。 -
运行时授权。 未经明确同意,绝不运行
uip api-workflow run。验证完成后,询问用户是跳过、使用--no-auth运行,还是使用身份验证运行。对于仅涉及控制流的工作流以及使用ImplicitConnection的 HTTP,建议使用--no-auth;仅在确认真实副作用后,才建议对 IntSvc 进行身份验证执行。经过身份验证的调用可能会发送电子邮件、创建工单或上传文件。循环模式的授权允许使用--no-auth执行 eval 行,但经过身份验证的连接器运行仍需明确授权。此限制仅适用于uip api-workflow run,不适用于uip solution pack/publish:用户要求构建/打包/发布时,无需询问是否运行;本地运行属于单独的请求,只有用户提出时才执行。 -
TDD 门禁。 每次创建或编辑时都检查
<project>/evals/。如果不存在,不要提供测试、创建该目录或提及循环模式。如果存在,在修改Workflow.json或 evals 之前暂停,并询问是要更改现有用例还是添加新用例,以及要运行/重试直至全部通过,还是只编写一次。如果已有用例,报告数量并逐一概述;如果为空,提出 2–3 个用例。得到答复后,声明input.schema和output.schema,更新 evals,然后编写;仅在循环模式下运行用例,或在仅编写一次模式下交接。行为变更需要指出受影响的用例,并询问是否要更改预期结果。用户要求不要询问时,保留现有测试,且不代表授权运行。参见 references/testing-and-evals.md §3。 -
文件是引用,而非字节——base64 也是文件。 文件输入和输出是指向 Orchestrator blob 的
JobAttachment引用({ ID, FullName, MimeType, Metadata? });$workflow.input.<file>从来不是文件字节。- 两个活动。 两者都是由其
$helpers.file.*调用标识的run.script任务(validate会检查此调用):File to Base64 返回包含 base64 文本的新引用;Base64 to File 返回二进制引用。脚本必须且只能包含一个return表达式。Studio Web 会静默丢弃前置/尾随语句、第二个参数或额外的选项键;validate只会捕获额外语句,因此额外参数或键仍可能导致活动出错。将预处理放在单独的 JavaScript 活动中。准确格式和示例参见 references/files-and-base64.md。 - 读取结果。 使用
$context.outputs.<Key>.output。 - 内嵌内容。 在 HTTP 请求体或 Response 字段中直接使用
<ref>.serializeData();它是延迟读取标记,因此不要存储它或在脚本逻辑中使用它。在 JSON 请求体中嵌套时,它仅适用于 base64 引用(File to Base64 的输出);嵌套二进制文件的标记或裸引用会在发送时出错。将二进制文件作为整个请求体发送,或先转换它。 - 命名。
fileName和mimeType仅适用于原始 base64 字符串。引用会保留其名称,引擎则根据字节推断类型;因此,.txt往返转换后可能变成无扩展名。 - 运行。 这两个 helper 都需要 Orchestrator blob 存储:
uip api-workflow run --no-auth会在运行前拒绝此类工作流;请在登录状态下运行(使用uip login,不要使用--no-auth)——但仍需获得规则 21 中的“是”。使用--input-file <name>=<path>传入本地文件(上传后会以$workflow.input.<name>形式到达),使用--output-dir <dir>收集返回的文件(输出中的每个引用都会新增一个LocalPath),如果租户的 Attachments API 要求指定文件夹,则使用--folder-key <guid>。CLI 在打印的输出中会将键转换为 PascalCase(ID→Id)。格式、完整示例和注意事项:references/files-and-base64.md。
- 两个活动。 两者都是由其
工作流阶段
阶段 0:发现
检查项目目录中是否有 evals/,然后在其存在时读取 evals/<scope>/eval-sets/*.json 和评估器。编辑时,读取 Workflow.json、键、变量、架构和导出模式。创建时,按需读取 assets/templates/api-workflow-template.json、最接近的条件/循环/嵌套控制流模板,以及 references/control-flow-patterns.md。编写前应用规则 22。
阶段 1:规划
选择活动、唯一键、变量、输入、输出和嵌套结构。使用 Assign 设置变量,使用 JavaScript/JsInvoke 编写自定义逻辑,使用 Log Message 记录日志,使用 If 进行分支,使用 ForEach 遍历集合,使用 DoWhile 重复执行,使用 TryCatch 处理错误,使用 Wait 暂停,使用 Response 终止,使用 If 中的 Break 跳出循环,并使用注册表生成的 UiPath.Http 或 UiPath.IntSvc 处理 HTTP/连接器。对于文件/base64,File to Base64 会将文件(输入文件或下载的文件)编码为 base64,以便放入内联 API 正文中;Base64 to File 会将 base64 载荷转换回文件(规则 23)。只有在注册表中找不到精选操作时,才使用通用连接器活动。请阅读 references/task-types.md。
阶段 2:生成或编辑
从参考资料中复制最精简的结构。从模板创建,并将活动放在根序列的 WorkflowStart 之后。编辑时,保留既有约定,并使用足够独特的上下文。当规则 22 适用时,在 eval 行之前声明架构。骨架:
{
"document": { "dsl": "1.0.0", "name": "...", "version": "0.0.1", "namespace": "default", "metadata": { "variables": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Variables" } } } } },
"input": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Inputs" } } },
"output": { "schema": { "format": "json", "document": { "type": "object", "properties": {}, "title": "Outputs" } } },
"do": [{ "Sequence_1": { "do": [{ "WorkflowStart": {} }] } }],
"evaluate": { "mode": "strict", "language": "javascript" }
}
阶段 3:验证,然后征得同意后运行
uip api-workflow validate ./<project>/Workflow.json --output json
uip api-workflow run ./<project>/Workflow.json [--no-auth] --output json
自主验证并修复,直到验证通过;然后在运行前询问。问题中要明确说明具体副作用(例如发送邮件、创建工单),然后等待。如果跳过运行,请提供准确的命令。
按 Structure > Expression > Activity Config > Logic 的顺序排查故障;请参阅 references/troubleshooting.md。
阶段 4:打包、发布和运行
打包需要 validate 通过(规则 20),而不需要本地运行——收到构建/打包/发布请求时,立即打包(规则 21 限制的是 run,而非 pack)。确认 init 生成的结构,然后:
uip solution pack <solutionDir> <outputDir> --name <PACKAGE_NAME> --version 1.0.0 --output json
uip solution publish <outputDir>/<package>.zip --tenant <TENANT_NAME> --output json
发布需要 uip login。打包器会检测 Type: "Api",验证并复制工作流,生成部署元数据,并在 .zip 中生成 .nupkg。部署后,通过 Orchestrator/API 触发器、作业、连接、日志和跟踪信息运行;本地 uip api-workflow 动词不再用于运行已发布的工作流。请参阅 references/operating-published-workflows.md,并在适当时将更深入的处理委托给 uipath-platform 或 uipath-troubleshoot。
快速开始(从头开始创建)
uip solution init <SolutionName> --output json
cd <SolutionName>
uip api-workflow init <ProjectName> --output json
# If <ProjectName>/evals/ exists, stop and apply rule 22; otherwise edit after WorkflowStart.
uip api-workflow validate ./<ProjectName>/Workflow.json --output json
# Ask for consent, then run if approved:
uip api-workflow run ./<ProjectName>/Workflow.json --no-auth --output json
uip solution pack . ./build --name <PackageName> --version 1.0.0 --output json
uip login
uip solution publish ./build/<package>.zip --tenant <TenantName> --output json
参考导航
| 文件 | 用途 |
|---|---|
| references/workflow-file-format.md | JSON 骨架、架构、变量、WorkflowStart、Studio Web 结构 |
| references/http-retry-config.md | 工作流级别的 HTTP 重试/退避 |
| references/task-types.md | 活动结构、必需字段、导出、常见错误 |
| references/control-flow-patterns.md | 嵌套 If、循环、TryCatch、Break、分支、键唯一性 |
| references/connector-activity-discovery.md | 通过 uip api-workflow registry resolve + stub 编写 HTTP Request / Gmail / Outlook / GitHub / Slack 等活动——发现流程、连接验证、字段结构规则、分页、多部分数据 |
| references/trigger-authoring-guide.md | 连接器事件触发器:registry resolve --kind trigger + stub、UiPath.IntSvcEvent 结构、必需的 EventTrigger 绑定、JMESPath 过滤器、轮询与 Webhook |
| references/expressions-and-context.md | 表达式、上下文、输入、脚本、导出、严格模式 |
| references/files-and-base64.md | 文件与 base64——JobAttachment 引用、File to Base64 / Base64 to File 活动(准确的 JSON、$helpers.file.*)、用于内联正文/Responses 的 serializeData()、在本地传入文件并从运行中获取文件、注意事项 |
| references/cli-reference.md | API 工作流、解决方案、登录、构建、打包、验证、发布 |
| references/operating-published-workflows.md | 已发布的触发器、连接、作业、日志、跟踪 |
| references/troubleshooting.md | 运行时、结构、表达式、连接器、响应、打包、发布故障 | | references/testing-and-evals.md | 评估契约、评分、原始输出、测试直至通过的流程 |
模板
-
assets/templates/conditional-workflow-example.json — 条件分支/错误处理。
-
assets/templates/nested-control-flow-example.json — 深度嵌套的控制流。
-
assets/templates/file-base64-roundtrip-example.json — 文件——
document文件输入 → File to Base64 → Base64 to File → Response 返回这两种引用。Studio Web 为这两个活动写入的准确run.script结构(规则 23)。已通过登录后的运行进行端到端验证:传入本地文件 →.base64引用 → 解码后输出文件,字节完全一致。 -
assets/templates/trigger-workflow-template.json — 事件驱动骨架:
WorkflowStart→UiPath.IntSvcEvent触发器 → Response 读取负载。其中的<REPLACE_WITH_*>连接 UUID 和触发器类型 ID 是哨兵值;实际使用时请重新生成存根(规则 16、16a)。 -
assets/templates/connector-call-example.json — 由注册表生成的带有
ImplicitConnection的 HTTP。 -
assets/templates/vendor-curated-call-example.json — IntSvc 活动;写入前请替换其连接哨兵值。
-
assets/templates/solution-connection-resource-template.json — Solutions 模式的 IntSvc 连接资源。
反模式
-
不要使用
call: "http";应使用注册表生成的UiPath.Http。 -
不要将连接器参数字面量包装为
${'literal'}。 -
不要交付连接或 URL 替换哨兵值。
-
不要通过
$input.<name>读取后续工作流输入。 -
不要将文件输入或 File to Base64 的结果视为字符串——两者都是
JobAttachment引用。只有在 HTTP 正文 / Response 中才能使用<ref>.serializeData()内联文件内容,切勿在 Assign 或脚本中这样做;并且只能在 File to Base64 输出的 JSON 正文字段中使用(在正文中嵌套$workflow.input.document.serializeData()会失败,并提示 "Raw bytes cannot be embedded in JSON")。请参阅规则 23。 -
不要编写
$helpers.fileToBase64(...)/$helpers.base64ToFile(...)——这些辅助函数位于$helpers.file.下;validate会拒绝该任务,运行时则会提示is not a function。请参阅规则 23。 -
未经同意,不要自主运行或调用需要身份验证的供应商服务。
-
不要手动组装旧版项目、生成单独的
Workflow.json,或使用 solution 项目添加 / 移除功能。 -
不要将运行时、打包或发布成功视为与 Studio Web 兼容的证明。
-
不要从 PascalCase 格式的 CLI 显示数据中复制预期的 eval 输出;应根据
output.schema和 Response 推导键,并使用原始输出作为预期值。 -
如果存在
evals/,不要先编写内容;请遵循规则 22。如果不存在,不要创建或提供 evals。不要仅为满足过时的预期值而更改逻辑。
防止无限循环
如果命令连续两次因相同错误而失败,请先调查,不要重试。每项操作最多尝试三次,然后停止并报告已尝试的内容。
-
身份验证 / 组织错误:请用户运行
uip login。 -
找不到文件错误:使用
ls验证路径。 -
重复的结构错误:重新阅读工作流和相关参考资料。