开发一个业务场景脚本实例
场景说明
根据对象的数据生成资源列表数据,用于前台数据呈现,启用本脚本后,可实现数据导入模板使用。
创建脚本前,需要先创建脚本中操作的对象ApprovedResource,其字段如表1所示。
字段标签 |
字段名称 |
字段类型 |
取值 |
读写权限 |
含义 |
---|---|---|---|---|---|
ownerId |
ownerId |
文本 |
长度:255 |
全选 |
资源拥有者ID |
ResourceName |
ResourceName |
文本 |
长度:255 |
全选 |
资源名称 |
Type |
Type |
选项列表 |
枚举值如下:
|
全选 |
资源类型 |
SubmitDate |
SubmitDate |
日期/时间 |
不涉及 |
全选 |
资源提交时间 |
ApproveDate |
ApproveDate |
日期/时间 |
不涉及 |
全选 |
资源审批时间 |
Status |
Status |
选项列表 |
枚举值如下:
|
全选 |
审批状态 |
开发一个业务场景脚本实例
- 参考登录经典应用设计器中操作,登录经典版应用设计器。
- 创建一个脚本操作的对象ApprovedResource。
- 将光标放在一个存放对象的应用目录(例如Model)上,单击,选择“对象”。
- 设置对象的标签和名称为“ApprovedResource”,单击“添加”。
图1 添加对象ApprovedResource
- 导入字段模板,创建字段模板。
请单击import-fields-template.zip,下载并解压获取“import-fields-template.xlsm”,将待导入字段模板到本地。
- 在自定义对象的“自定义字段”页签,单击“批量创建 > 批量导入字段”,选择上一步下载的字段模板,单击“确定”。
图2 批量导入字段
- 将光标放在某个文件夹(例如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 }
- 单击代码编辑器上方的,启用脚本。
后续在新版本功能中如果需要更新该脚本,可单击编辑器上方的,选择“新建版本”。在新建的版本中更改脚本并保存、测试及启用。单击编辑器上方的,选择对比版本,可将当前版本与历史版本进行比对。