生成与解读 YIGO Form XML 中的 OperationCollection(操作集合)、ScriptCollection(脚本集合)和 MacroCollection(宏公式集合)
本 Skill 负责生成 YIGO Form XML 中的操作定义(OperationCollection)、脚本集合(ScriptCollection)和宏公式集合(MacroCollection)。这三个组件定义了表单的业务逻辑行为。
所有
Action、ExceptionHandler、Macro内容、OnLoad/OnClose等公式体都必须用<![CDATA[]]>包裹。
yigo-Operation-Attr<OperationCollection>
<!-- 直接的操作 -->
<Operation Key="optKey" Caption="操作名称">
<Action><![CDATA[操作执行的公式内容]]></Action>
<ExceptionHandler><![CDATA[异常处理公式]]></ExceptionHandler>
<!-- 子操作(可嵌套) -->
<Operation Key="subOpt" Caption="子操作">
<Action><![CDATA[子操作公式]]></Action>
</Operation>
</Operation>
<!-- 分组的操作集合 -->
<OperationCollection Key="groupKey" Caption="操作分组">
<Operation Key="opt1" Caption="操作1">
<Action><![CDATA[公式]]></Action>
</Operation>
<Operation Key="opt2" Caption="操作2">
<Action><![CDATA[公式]]></Action>
</Operation>
</OperationCollection>
</OperationCollection>
yigo-Operation-Attr 属性,用于分组| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
Key | string | ✅ | 操作唯一标识(同级唯一) |
Caption | string | ❌ | 操作显示名称 |
CaptionEn | string | ❌ | 英文名称 |
Visible | Boolean/Formula | ❌ | 是否可见 |
Enable | Boolean/Formula | ❌ | 是否可用 |
VisibleDependency | string | ❌ | 可见性依赖项 |
EnableDependency | string | ❌ | 可用性依赖项 |
RefKey | string | ❌ | 引用标识(引用公共操作) |
Icon | string | ❌ | 图标 |
ShortCuts | string | ❌ | 快捷键(如 Ctrl+S) |
SelfDisable | Boolean | ❌ | 是否自动禁用(防连点) |
NeedAccessLog | Boolean | ❌ | 是否需要访问日志 |
CssClass | string | ❌ | CSS 类名 |
IconCode | string | ❌ | 图标编码 |
TCode | string | ❌ | 交易码 |
Activity | string | ❌ | 活动标识 |
Tag | string | ❌ | 标签 |
ExpandSource | string | ❌ | 展开来源 |
Expand | Boolean | ❌ | 是否展开 |
IsTransfer | Boolean | ❌ | 是否转换 |
| 子元素 | 说明 |
|---|---|
Action | 操作执行的公式/脚本内容 |
ExceptionHandler | 异常处理公式 |
Operation | 嵌套的子操作 |
<ScriptCollection>
<!-- 脚本内容,Type 可选 Formula/Java 等(默认 Formula,可省略) -->
</ScriptCollection>
| 属性 | 说明 |
|---|---|
Type | 脚本类型(Formula 为默认值,ERP 中通常都是 Formula) |
Form 中有多个使用脚本类型的地方:
ScriptCollection — 脚本集合OnLoad — 表单加载事件OnClose — 表单关闭事件OnPostShow — 表单显示后事件RowClick/RowDblClick/RowInsert/RowDelete 等OnClickKeyEnter这些元素都使用 yigo-BaseScript2 类型(mixed content,脚本内容直接写在元素体内):
<OnLoad><![CDATA[初始化公式内容]]></OnLoad>
<OnClick><![CDATA[按钮点击公式]]></OnClick>
<RowDblClick><![CDATA[SetFormState("Edit")]]></RowDblClick>
<MacroCollection>
<Macro Key="宏标识" Args="参数列表">
<![CDATA[宏公式内容]]>
</Macro>
</MacroCollection>
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
Key | string | ✅ | 宏唯一标识(集合内唯一) |
Args | string | ❌ | 参数列表 |
内容:宏的公式体,直接作为元素的文本内容。
<OperationCollection>
<Operation Key="New" Caption="新增" ShortCuts="Ctrl+N">
<Action><![CDATA[New()]]></Action>
</Operation>
<Operation Key="Edit" Caption="编辑">
<Action><![CDATA[Edit()]]></Action>
</Operation>
<Operation Key="Save" Caption="保存" ShortCuts="Ctrl+S" SelfDisable="true">
<Action><![CDATA[Save()]]></Action>
<ExceptionHandler><![CDATA[ShowMessage(GetLastError())]]></ExceptionHandler>
</Operation>
<Operation Key="Delete" Caption="删除">
<Action><![CDATA[if(Confirm("确定要删除吗?")) { Delete() }]]></Action>
</Operation>
<Operation Key="Cancel" Caption="取消">
<Action><![CDATA[Cancel()]]></Action>
</Operation>
<!-- 审核分组 -->
<OperationCollection Key="ApproveGroup" Caption="审核">
<Operation Key="Submit" Caption="提交" Enable="GetFieldValue("Status")==0">
<Action><![CDATA[Submit()]]></Action>
</Operation>
<Operation Key="Approve" Caption="审批" Enable="GetFieldValue("Status")==1">
<Action><![CDATA[Approve()]]></Action>
</Operation>
</OperationCollection>
<Operation Key="Close" Caption="关闭">
<Action><![CDATA[CloseForm()]]></Action>
</Operation>
</OperationCollection>
<OperationCollection>
<Operation Key="Query" Caption="查询" Icon="query.png">
<Action>Query()</Action>
</Operation>
<Operation Key="New" Caption="新增" Icon="new.png">
<Action>OpenForm("PurchaseOrder", "New")</Action>
</Operation>
<Operation Key="Edit" Caption="编辑" Icon="edit.png">
<Action>OpenForm("PurchaseOrder", "Edit")</Action>
</Operation>
<Operation Key="Delete" Caption="删除" Icon="delete.png">
<Action>DeleteSelected()</Action>
</Operation>
<Operation Key="Export" Caption="导出" Icon="export.png">
<Action>Export("Excel")</Action>
</Operation>
<Operation Key="Close" Caption="关闭" Icon="close.png">
<Action>CloseForm()</Action>
</Operation>
</OperationCollection>
<MacroCollection>
<Macro Key="CalcAmount" Args="qty,price">
<![CDATA[SetFieldValue("Amount", qty * price)]]>
</Macro>
<Macro Key="ValidateBeforeSave">
<![CDATA[IIF(IsEmpty(GetFieldValue("PONo")), ShowMessage("订单编号不能为空"), true)]]>
</Macro>
</MacroCollection>
<Form Key="PurchaseOrder" Caption="采购订单" FormType="Entity">
<!-- ... -->
<OnLoad><![CDATA[IIF(GetFormState()=="New", SetFieldValue("PODate", Today()), '')]]></OnLoad>
<OnClose><![CDATA[IIF(IsModified(), IIF(Confirm("数据已修改,是否保存?"), Save(), ''), '')]]></OnClose>
</Form>
CommonDef 定义的是公共操作,可被多个表单引用(通过 RefKey):
<CommonDef>
<OperationCollection>
<Operation Key="CommonSave" Caption="保存">
<Action>Save()</Action>
</Operation>
</OperationCollection>
<StatusCollection>...</StatusCollection>
<ScriptCollection>...</ScriptCollection>
<MacroCollection>...</MacroCollection>
</CommonDef>
在 Form 中引用公共操作:
<Operation Key="Save" RefKey="CommonSave" />
yigo-form-scaffold 中 Form 的子元素Action 公式可能引用 yigo-dataobject-generator 定义的字段OnClick 事件内容格式与此相同 → 参考 yigo-control-generatoryigo-expression-helper