跳转至

iScript 使用场景速查

目标:在 generate-* 落盘过程中,按场景写出合法 iScript。本 skill 不落盘 XML;文件结构以对应 generate-*-file 为准。

常量源:ScriptLabel.TYPE(obpm-core/.../macro/runner/ScriptLabel.java)。

通则

  1. IIFE 硬规则(所有含 return 的 iScript):必须写成立即执行函数表达式,禁止顶层裸 return。
  2. 规范形态:(function () { ... return ...; })()
  3. 须明确 return(无返回值的副作用脚本可省略 return,但仍建议包进 IIFE)
  4. **禁止**写入:return getWebUser().getId();、return true;、return ""; 等裸语句(GraalVM 报 SyntaxError: Invalid return statement,表单可能空白)
  5. **正确**示例(默认当前用户 id):
(function () { return getWebUser().getId(); })()
  • 空脚本 "" 除外;纯表达式且引擎约定不需要 return 的场景仍优先用 IIFE 包一层以免踩坑。
  • 属性大小写:
  • Form/View/Activity/Flow 等 XML:camelCase(如 valueScript),脚本用 CDATA。
  • JsonTemplate 字段节点:全小写(如 valuescript、hiddenscript、optionsscript)。
  • 布尔契约:隐藏/只读 → true/false(true = 隐藏或只读)。
  • 校验契约:失败 → 提示字符串;成功 → ""。
  • 选项契约:Options(createOptions() / $TOOLS.createOptions()),或 "值:文本;..." / "文本;..."。表单优先:库存英文码、界面显示中文 — opts.add(显示中文, 存值英文)(见 form.md#选项脚本)。
  • 运行时 GraalVM JS(非 Rhino):详见 graalvm.md。要点:
  • 禁止顶层裸 return(同本条 IIFE 硬规则)。
  • 字符串比较用 === / !==,禁止 "x".equals(v) / v.equals("x")。
  • 字符串长度用 s.length(属性),禁止 s.length();JSONArray.length() 除外。
  • 新建 Java 类用 Java.type('...');Packages... 仅作兼容。
  • Java List/Collection 用 .size();JS 数组用 .length。
  • 查法:定域 → 打开下表对应文件 → 按场景组找卡 → 填入正在写的属性。
  • 边界:场景契约以本 skill 为准;函数细节见 iscript-guid/functions / iscript-guid/api;引擎差异见 graalvm.md。QLExpress 公式求值用全局函数 executeQLExpress(见 system-functions、appendix-toolbox)。

按场景种类(跨域)

种类 打开
值脚本 form.md#值脚本、view.md#值脚本、excelimport.md
选项脚本 form.md#选项脚本、view.md#excel-选项
隐藏脚本 form.md#隐藏脚本、view.md#隐藏脚本、activity.md#隐藏只读
只读脚本 form.md#只读脚本、activity.md#隐藏只读
校验脚本 form.md#校验脚本、flow.md#路径、excelimport.md
必填 / 空值 / 校验库 / .valid form.md#校验库validatelibs;系统默认 checkEmpty_system;自定义库落盘 generate-valid-file;字段勾选写入 validatelibs
字段唯一 / 映射表编码重复 form.md#字段唯一编码重复、activity.md#映射表单唯一-保存前置(queryBySQL;禁 $SQL / 映射上禁 checkFieldUnique)
映射表列表列空白 view.md#值脚本(禁止 FIELD;双读字段名/物理列);落盘 generate-view-file「映射表列表列」
业务引用主数据(编码非 XXID) activity.md#业务引用键用编码查主数据;规划见 plan-application
过滤/数据脚本 view.md#数据过滤、report.md、chart.md
操作前后置 activity.md、form.md#按钮与确认
流程审批人/条件 flow.md
定时/API/菜单链接 task.md、api.md、menu.md
Widget 内容 widget.md

按域

域 文件 Label 前缀
表单 form.md FORM:*
视图 view.md VIEW:*
操作 activity.md ACTIVITY:*
流程 flow.md WORKFLOW:*
Widget widget.md WIDGET:*
定时任务 task.md TASK:*
API api.md API:*
Excel 导入 excelimport.md EXCELIMPORT:*
统计图 chart.md CHART:*
报表 report.md REPORT:*
菜单 menu.md MENU:*
其它 other.md BIGSCREEN / KMS / DATAMODULE / LIB / PAGE / SCRIPT
引擎差异 graalvm.md GraalVM JS vs Rhino/Java

配套

正在写 读本 skill
.form / 字段 / .activity form.md、activity.md ← 由 generate-form-file 落盘
.view / .column view.md、activity.md ← generate-view-file
.flow flow.md ← generate-flow-file
.task task.md ← generate-task-file
.api api.md ← generate-api-file
.chart chart.md ← generate-chart-file
.widget widget.md ← generate-widget-file
.excelconfig excelimport.md ← generate-excelconfig-file
.valid form.md#校验库validatelibs ← generate-valid-file
.menu / .mobilemenu 脚本链接 menu.md ← generate-menu-file / generate-mobilemenu-file
任意 iScript 写法 先读 SKILL.md 通则 · IIFE + graalvm.md(IIFE / === / .length / Java.type)

本文件只定**场景契约**;文件结构与属性全集以对应 generate-* 为准。引擎差异以 graalvm.md 为准。