更新时间:2024-07-11 GMT+08:00
分享

开发一个业务场景脚本实例

场景说明

根据对象的数据生成资源列表数据,用于前台数据呈现,启用本脚本后,可实现数据导入模板使用。

创建脚本前,需要先创建脚本中操作的对象ApprovedResource,其字段如表1所示。

表1 对象说明

字段标签

字段名称

字段类型

取值

读写权限

含义

ownerId

ownerId

文本

长度:255

全选

资源拥有者ID

ResourceName

ResourceName

文本

长度:255

全选

资源名称

Type

Type

选项列表

枚举值如下:

  • File
  • Folder

全选

资源类型

SubmitDate

SubmitDate

日期/时间

不涉及

全选

资源提交时间

ApproveDate

ApproveDate

日期/时间

不涉及

全选

资源审批时间

Status

Status

选项列表

枚举值如下:

  • Waiting
  • Submitted
  • Approved

全选

审批状态

开发一个业务场景脚本实例

  1. 参考登录经典应用设计器中操作,登录经典版应用设计器。
  2. 创建一个脚本操作的对象ApprovedResource。

    1. 将光标放在一个存放对象的应用目录(例如Model)上,单击,选择“对象”。
    2. 设置对象的标签和名称为“ApprovedResource”,单击“添加”。
      图1 添加对象ApprovedResource
    3. 导入字段模板,创建字段模板。

      请单击import-fields-template.zip,下载并解压获取“import-fields-template.xlsm”,将待导入字段模板到本地。

    4. 在自定义对象的“自定义字段”页签,单击“批量创建 > 批量导入字段”,选择上一步下载的字段模板,单击“确定”。
      图2 批量导入字段

  3. 将光标放在某个文件夹(例如Logic)上,单击,选择“脚本”。
  4. 选择“创建一个新脚本”,设置脚本名称为“ResourceListScript”,单击“添加”,进入脚本编辑器页面。

    图3 新增脚本
    • 名称:新增脚本的名称,设置为ResourceListScript。
    • 模板:脚本模板,用于生成不同类型的脚本,本示例设置为“空脚本”。
      • 空脚本:创建一个空脚本。
      • 空白测试脚本:创建一个空测试脚本。
      • 示例服务脚本:对外提供服务的脚本,可通过restful直接调用。
      • 示例内部脚本:是内部库代码,只能被其它脚本import使用。
      • 示例安装脚本:在安装或升级应用/BO包时,在导入实例化配置数据之前或者之后执行的脚本。一般用于预清理数据、删除和更新数据等。
      • 示例自定义接口前置/后置脚本:在开放低代码平台的服务编排、脚本或者操作对象数据接口给第三方系统调用时,通过该示例脚本可实现在第三方系统配置这些接口的访问权限。
    • 描述:新建脚本的描述信息,建议设置为脚本的功能。

  5. 在脚本编辑器中,将以下脚本代码粘贴到代码编辑区。

    其中,“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);
            }
    
        }
    }

  6. 单击代码编辑器上方的,保存脚本。
  7. 运行测试脚本。

    1. 单击编辑器上方的,执行脚本。
    2. 在页面底部“输入参数”页签中,输入请求报文,单击测试窗口右上角的
      { 
         "ownerId":"123", 
         "limit":3, 
         "offset":1
      }

      脚本的入参支持写入http-header参数,如下所示。

      {
        "http-header": {
          "header1": "value1"
        }
      }
    3. 检查输出参数中的结果,是否符合预期。
      {
          "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
      }

  8. 单击代码编辑器上方的,启用脚本。

    后续在新版本功能中如果需要更新该脚本,可单击编辑器上方的,选择“新建版本”。在新建的版本中更改脚本并保存、测试及启用。单击编辑器上方的,选择对比版本,可将当前版本与历史版本进行比对。

相关文档