更新时间:2025-08-20 GMT+08:00
开发一个业务场景脚本实例
开发一个业务场景脚本实例
- 参考登录经典应用设计器中操作,登录经典版应用设计器。
- 创建一个脚本操作的对象ApprovedResource。
- 将光标放在一个存放对象的应用目录(例如Model)上,单击
,选择“对象”。 - 设置对象的标签和名称为“ApprovedResource”,单击“添加”。 图1 添加对象ApprovedResource

- 导入字段模板,创建字段模板。
请单击import-fields-template.zip,下载并解压获取“import-fields-template.xlsm”,将待导入字段模板到本地。
- 在自定义对象的“自定义字段”页签,单击“批量创建 > 批量导入字段”,选择上一步下载的字段模板,单击“确定”。 图2 批量导入字段

- 将光标放在一个存放对象的应用目录(例如Model)上,单击
- 将光标放在某个文件夹(例如Logic)上,单击
,选择“脚本”。 - 选择“创建一个新脚本”,设置脚本名称为“ResourceListScript”,单击“添加”,进入脚本编辑器页面。图3 新增脚本

- 名称:新增脚本的名称,设置为ResourceListScript。
- 模板:脚本模板,用于生成不同类型的脚本,本示例设置为“空脚本”。
- 空脚本:创建一个空脚本。
- 空白测试脚本:创建一个空测试脚本。
- 示例服务脚本:对外提供服务的脚本,可通过restful直接调用。
- 示例内部脚本:是内部库代码,只能被其它脚本import使用。
- 示例安装脚本:在安装或升级应用/BO包时,在导入实例化配置数据之前或者之后执行的脚本。一般用于预清理数据、删除和更新数据等。
- 示例自定义接口前置/后置脚本:在开放低代码平台的服务编排、脚本或者操作对象数据接口给第三方系统调用时,通过该示例脚本可实现在第三方系统配置这些接口的访问权限。
- 描述:新建脚本的描述信息,建议设置为脚本的功能。
- 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。其中,“CNAME__”替换为实际的命名空间、对象名、字段名。
//导入该脚本所依赖的标准库文件,decimal和context是系统预置的标准库。 import * as db from 'db'; import * as decimal from 'decimal'; import * as context from 'context'; //声明该脚本中所应用到的ApprovedResource__CST对象 @useObject(['CNAME__ApprovedResource__CST']) //定义入参变量ownerId、limit、offset,分别表示资源拥有者ID、每页展示的资源条数、每页展示第一条资源的偏移量,即从offset+1条资源开始展示。 @action.object({ type: 'param' }) export class Input { @action.param({ type: 'string', required: true }) ownerId: string; @action.param({ type: 'number', required: true }) limit: number; @action.param({ type: 'number', required: true }) offset: number; } //定义出参变量resource和totalCount,分别表示资源数组集合和资源总数(固定100)。 @action.object({ type: 'param' }) export class Output { @action.param({ type: 'any', isCollection: true, label: "object" }) resource: object[]; @action.param({ type: 'number' }) totalCount: number; } //定义查询SQL语句,用于查询某条资源审批详情;SQL语句中的表名和字段名要和预定义的对象名和字段名保持一致。 class querySql { static queryRecord = "select CNAME__Status__CST, CNAME__SubmitDate__CST, CNAME__ApproveDate__CST from CNAME__ApprovedResource__CST where CNAME__ownerId__CST=? and CNAME__ResourceName__CST=?"; } //定义数据源方法体,用于模拟数据源,并支持状态检查和分页功能。 @action.object({ type: 'method' }) export class getFileList { @action.method({ input: "Input", output: "Output", label: "getFileList" }) getFileList(input: Input): Output { let outResult = new Output() let resource: Array<Object> = []; let resourceLimit: Array<Object> = []; outResult.totalCount = 100; try { let sequence = ""; for (let i = 1; i < 51; i++) { if (i < 10) { sequence = "0" + i; } else { sequence = "" + i; } let file = { "ownerId": input.ownerId, "approveDate": null, "resourceName": "File" + sequence, "status": "Waiting", "submitDate": null, "type": "File" } let folder = { "ownerId": input.ownerId, "approveDate": null, "resourceName": "Folder" + sequence, "status": "Waiting", "submitDate": null, "type": "Folder" } resource.push(file); resource.push(folder); } if (resource.length > 0) { for (let i = 0; i < resource.length; i++) { let s = db.sql() let query = s.exec(querySql.queryRecord, { params: [input.ownerId, resource[i].resourceName] }); if (query.length == 1) { resource[i].status = query[0]["CNAME__Status__CST"]; resource[i].submitDate = query[0]["CNAME__SubmitDate__CST"]; resource[i].approveDate = query[0]["CNAME__ApproveDate__CST"]; } } } for (let j = 0; j < decimal.toNumber(input.limit); j++) { console.log(decimal.toNumber(input.offset) + j); resourceLimit.push(resource[decimal.toNumber(input.offset) + j]); outResult.resource = resourceLimit; } return outResult; } catch (error) { console.log(error.name, error.message); error.Error(error.name, error.message); } } } - 单击代码编辑器上方的
,保存脚本。 - 运行测试脚本。
- 单击编辑器上方的
,执行脚本。 - 在页面底部“输入参数”页签中,输入请求报文,单击测试窗口右上角的
。 { "ownerId":"123", "limit":3, "offset":1 }脚本的入参支持写入http-header参数,如下所示。
{ "http-header": { "header1": "value1" } } - 检查输出参数中的结果,是否符合预期。
{ "resource": [ { "approveDate": null, "ownerId": "123", "resourceName": "Folder01", "status": "Waiting", "submitDate": null, "type": "Folder" }, { "approveDate": null, "ownerId": "123", "resourceName": "File02", "status": "Waiting", "submitDate": null, "type": "File" }, { "approveDate": null, "ownerId": "123", "resourceName": "Folder02", "status": "Waiting", "submitDate": null, "type": "Folder" } ], "totalCount": 100 }
- 单击编辑器上方的
- 单击代码编辑器上方的
,启用脚本。后续在新版本功能中如果需要更新该脚本,可单击编辑器上方的
,选择“新建版本”。在新建的版本中更改脚本并保存、测试及启用。单击编辑器上方的
,选择对比版本,可将当前版本与历史版本进行比对。

