华为云用户手册

  • 前提条件 已下载之前设计的Chart包。 在AstroZero开发环境的Native Service配置页面,选择“导航”。 在“Chart设计”页签版本列表区域,单击需要导出的Chart后的导出按钮。 图1 导出Chart包 操作列按钮分别提供编辑Chart包、修改Chart包状态(单击后,Chart包状态是“Published”,无法再编辑该Chart包。单击后,Chart包状态是“Draft”,可编辑该Chart包。该界面不提供发布功能,实际发布要去CCE部署和发布)、预览Chart配置、导出Chart包、克隆已有Chart包配置和删除功能。
  • 规则7:SELECT语句中严禁使用“select from...”形式查询语句 严禁使用“select ...”形式查询语句,请指出select的具体字段。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select from object_demo where object_name = 'test'") 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select id, object_type from object_demo where object_name = 'test'")
  • 规则10:SELECT语句中谨慎使用order by SELECT语句中,请谨慎使用order by。如果需要使用order by,请为排序字段增加索引,以提高查询效率。如果无法增加索引,需要关注是否存在查询性能低下的风险。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select object_name from object_demo where object_id = 'A' Orde by createdDate") 表“object_demo”中的“createdDate”,并没有创建索引。 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select object_name from object_demo where id = 'A' Order by createdDate") “object_demo”中的“createdDate”,创建了索引。
  • 规则4:SELECT语句中查询字段不在表的索引库中 如果SELECT语句where条件中,查询字段并未创建索引,请判断该字段是否需要创建索引,以提高代码查询效率。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select object_name from object_demo where object_id = ?") 表“object_demo”中的“object_id”并没有创建索引。 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select object_name from object_demo where id = ?") 表“object_demo”中的“id”创建了索引。
  • 规则6:SELECT语句中聚集函数必须增加别名 SELECT语句中,聚合函数必须使用别名方式存储查询结果,以免因聚合函数返回的结果不一致,导致存在兼容性问题。 错误代码示例 import * as db from 'db';let errorDemo = db.sql().exec("select count(*) from object_demo where object_name = 'A'") 正确代码示例 import * as db from 'db';let correctDemo = db.sql().exec("select count(*) as count from object_demo where object_name = 'A'") 推荐代码示例 ***聚合函数示例 ****select count(*) as count_res,select max(*) as max_res,select min(*) as min_res,select avg(*) as avg_res,select sum(*) as sum_res
  • 操作步骤 参考登录经典应用设计器中操作,登录经典版应用设计器。 打开某个BPM,单击编辑器上方的“运行”按钮,运行BPM,模拟与BPM的交互。 交互完成后,需要确认步骤操作的结果是否符合预期。 单击BPM编辑器页面右上方的“跟踪”,打开“日志跟踪器”页面。 在“日志跟踪器”页面,查看BPM执行的每一步的详细信息,例如查看变量传递是否符合预期。 图1 日志跟踪器 日志跟踪器界面分为两部分,即搜索框和流程日志跟踪记录表格。 搜索框 图2 搜索框 流程切换:用户可以根据时间筛选曾启动过的流程,每个流程的跟踪信息只保存半个小时。 搜索框:根据流程跟踪信息进行搜索。 下载:将当前完整的流程日志,以文件形式下载到本地,便于保存或查看。 表格:日志跟踪器表格记录了BPM流程流转的日志。其中包含时间戳、所属模块的类型、所属模块的名字、具体操作的图元类型、图元名称以及该操作的描述。模块在执行子流程时,会切换为子流程的类型和名称。 若不符合预期,则重新返回BPM修改,重复 2 。
  • 常见错误 变量赋值错误? 请检查输入参数的类型与定义是否匹配,必要时进行类型转换。 变量结构错误? 请检查输入参数的结构(属性名、取值类型)与目标结构是否一致。当出现大段JSON报错信息时,可借助JSON Viewer或在线JSON格式化工具进行对比。 没有走指定分支?流程意外终止? 由于流程的结束是隐含的,当没有下一步的内容时流程即结束。因此,在排他网关里如果没有设置默认分支,当所有分支的条件都不满足时,流程即进入结束状态。
  • 规则8:SELECT语句中拼接的参数值请谨慎使用入参变量 SELECT语句中,拼接的参数值请谨慎使用入参变量,以免引起SQL注入的风险。 错误代码示例 import * as db from 'db';let errorDemo = "select id,name from object_demo where id = ";errorDemo += input.parameter let errorDemoResult = db.sql().exec(errorDemo) 其中,“input.parameter”为脚本入参。 正确代码示例 import * as db from 'db';let correctDemo = "select id,name from object_demo where id = ?";let correctDemoResult = db.sql().exec(correctDemo, { params: [input.parameter] }) 其中,“input.parameter”为脚本入参。
  • 如何编译发布应用 在AstroZero低代码平台中,编译发布应用主要包括如下三步。 属性设置。 在应用中,单击左下角的,选择“设置”。 图2 编译前属性设置入口 请根据实际用途,设置需要编译的应用包类型(资产包、源码包)以及相关组件的属性(例如,是否组件代码受保护、是否只读可写等)。 图3 软件包设置 编译。 设置完成后,单击左下角的图标,选择“编译”,启动应用编译。如果编译错误,则需要对错误组件进行修复,完成后才可进行下一步。 图4 编译成功页面 打包发布。 编译(资产包)完成后,单击,会出现如图5所示页面。请根据实际需要,选择发布方式。例如,发布到AstroZero下的“我的仓库”,也可以发布到其他平台。其中,发布到“我的仓库”主要用于后续的沙箱环境测试和生产环境运行。发布到其他平台主要用于应用分享和商业用途。编译发布应用更多介绍,请参见应用打包发布。 编译类型为“源码包”时,只有发布到“我的仓库”一种发布方式。 图5 发布应用
  • 名称和表达式 “用户任务”图元接收人类型设置为“名称和表达式”时,可以通过“表达式”、“用户”、“业务用户”和“组”四种方式分配该任务的参与者。这时,泳道中的工作队列配置不起作用。 图5 名称和表达式 用户:在“取值”中,选择接收该任务的用户,不包括业务用户。 业务用户:在“取值”中,选择接收该任务的业务用户。 组:在“取值”中,选择公共组,则该任务由公共组的成员去处理。公共组的成员可以是用户、业务用户、其他公共组的成员、角色或带有下属的角色中成员。关于如何创建工作组,请参考管理公共组。 表达式:当将“参与者”配置为“表达式”时,实际是一个变量。在“取值”中可设置变量的值,变量值支持以下几种: 用户的用户名或用户ID,其中用户名前需要加“user:”前缀。 业务用户的用户名或业务用户ID,其中业务用户名前需要加“puser:”前缀。 公共组名称或者公共组ID,其中公共组名称前需要加“group:”前缀。 角色名称或者角色ID,其中角色名称前需要加“role:”前缀。 例如,分配任务接受者为用户名为“PortalUser1”的业务用户、用户名为“User1”的用户、用户ID为“10XX000000XXXXXXX”的用户、公共组名称为“group1”和角色名称为“role1”的合集,则取值为“"puser:PortalUser1,user:User1,10XX000000XXXXXXX,group:group1,role:role1"”。多个取值之间用英文逗号“,”分隔,取值外加英文双引号。
  • 用户和业务用户 在进行任务分配时,AstroZero平台提供了两种用户可以进行任务的分配,分别是用户和业务用户。 用户(User):是租户账号或子账号开发者,用来管理应用和业务用户。购买AstroZero的租户账号默认拥有所有权限,是管理员用户,可添加子账号并为其配置需要的权限。 业务用户(即PortalUser):是访问在AstroZero中开发的业务应用的用户账号,即业务应用的使用者。 您可以在BPM中通过用户任务图元,在用户任务配置页面的“接收人”模块,通过以下三种方式将任务分配给用户或业务用户。 当前泳道 流程发起人的主管 名称和表达式 基于规则 图1 接收人类型
  • 当前泳道 “用户任务”图元接收人类型设置为“当前泳道”,将泳道和工作队列绑定,则处于该泳道的用户任务图元,由该泳道对应工作队列中的成员去处理。工作队列中的成员可以是多个用户、业务用户、公共组中成员、角色或带有下属的角色中成员。配置过程如下: 参考管理队列中操作,创建工作队列,将处理任务的用户或者业务用户加入工作队列中。 例如,创建派单员工作队列“Dispatcher”。 图2 创建工作队列 如图3所示,“用户任务”的接收人类型选择“当前泳道”,可以将任务分配给“当前泳道角色的任意成员”或“当前泳道中的上一个任务被分配的人员”。 图3 用户任务中设置当前泳道接收 如图4所示,单击左侧泳道区域,在“泳道配置”中设置派单员工作队列“Dispatcher”。 处于该泳道的用户任务图元,则由工作队列“Dispatcher”中的成员去处理。 图4 设置泳道
  • 基于规则 “用户任务”图元接收人类型设置为“基于规则”时,可以将全局上下文中的变量拖入到条件输入框中。当条件输入框中的变量或条件为true时,将会把任务分配给选择框中配置的用户。您可以通过以下方式,配置接收任务的用户: 当前用户:把任务分配给执行当前用户任务的用户。 上级经理:把任务分配给执行当前用户任务的用户的上级经理。 特定的用户:把任务分配给选择框中选择的用户。 队列:把任务分配给选择框中选择的工作队列中的所有用户。 用户属性:根据用户对象的某一字段,进行任务的分配。 变量:根据输入框中的用户ID或用户名,将任务分配给相应的用户。 图6 基于规则
  • Chart元素说明 ConfigMap 是一种用于存储工作负载所需配置信息的资源类型,内容由用户决定。配置项创建完成后,可在工作负载中作为文件或环境变量使用。允许将配置文件从容器镜像中解耦,从而增强容器工作负载的可移植性。 Secret(密钥) 是一种用于存储工作负载所需要认证信息、密钥的敏感信息等的资源类型,内容由用户决定。资源创建完成后,可在容器工作负载中作为文件或环境变量使用。其配置页面上参数含义与ConfigMap大体相同,差异的参数说明如下: “密钥类型”取值为“Opaque”,表示一般密钥类型。 “密钥数据”的“值”必须使用Base64编码。对字符串进行Base64加密,可以直接使用“echo -n 待编码内容 | base64”命令。 root@ubuntu:~# echo -n "待编码内容" | base64 无状态负载 等同于Kubernetes中的“Deployment”概念,所有Pod实例之间是对等的,互不依赖,少了任意一个Pod实例,并不影响整个工作负载的功能。 有状态负载 等同于Kubernetes中的“StatefulSet”概念,是用来管理有状态应用的工作负载API对象。和“无状态负载”相同的是,“有状态负载”管理了基于相同容器定义的一组Pod。和“无状态负载”不同的是,“有状态负载”为每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换。无论怎么调度,每个Pod都有一个永久不变的ID。选择“有状态负载”时,必须要配置“实例间发现服务”。 实例间发现服务指的是Kubernetes的Headless Service,Headless Service用于控制Pod的网络 域名 ,通过Pod的网络域名可以访问特定的Pod实例。例如,集群域名为cluster.local,有状态负载的名称为web,有3个Pod实例,则3个Pod的名称分别为web-0、web-1和web-2,Headless Service的名称为nginx,则3个Pod的域名分别是web-0.nginx.$(命名空间).svc.cluster.local、web-1.nginx.$(命名空间).svc.cluster.local、web-2.nginx.$(命名空间).svc.cluster.local,通过Pod域名访问到具体的Pod实例。
  • 另存版本后进行定制 此处以基于服务编排“testFlow”的基线“1.0.1”版本另存一个“1.0.2”的定制版本为例,进行说明。 单击已创建好的服务编排“testFlow”,进入该服务编排设计页面。 单击页面上方的,禁用该服务编排。 单击页面上方的,进入另存为页面。 “类型”选择“新版本”,设置服务编排标签,单击“保存”。 保存后,系统默认进入“1.0.2”的新版本服务编排设计页面。 图1 另存为新版本 标签:服务编排的标签,用于在页面显示。 名称:服务编排的名称,和基线版本的服务编排名称保持一致。 类型:另存为的类型。 新版本:另存为新版本,适用于新建的服务编排,基础服务编排仍可使用。 新服务编排:是将原服务编排重新另存并命名,新保存后为另一服务编排,与选择“新版本”场景不同,适用于新建的服务编排,基础服务编排仍可使用。 服务编排类型:服务编排的类型,在创建基础服务编排时配置的类型,不可更改。 Autolaunched Flow:自启动服务编排,在接口调用后会立即执行服务编排模型定义的逻辑。 Event Trigger:事件触发的服务编排,在事件触发时才会开始执行服务编排模型定义的逻辑。 展示标签:服务编排实例的展示标签,系统自动填充为“标签值{!$Flow.CurrentDateTime}”。 描述:服务编排的描述信息。 在“1.0.2”版本服务编排设计页面,按需进行定制。 单击页面上方的,保存服务编排。 保存成功后,单击,运行服务编排,检查服务编排运行结果是否符合预期。 单击页面上方的,启用新版本服务编排。 在此方式下,当基线版本升级时,系统默认启用和使用服务编排的定制版本。升级造成的基线服务编排原有图元变化,定制服务编排可继承。升级造成的基线服务编排新增图元,定制服务编排无法继承。
  • 基于预留扩展点进行定制 此处以“createOrder”接口为例进行介绍,基线“createOrder”接口中预留了一个扩展点。 这个扩展点是一个空的子服务编排“AfterSaveOrder”,将这个子服务编排另存一个定制版本“AfterSaveOrder_0419”,实现新的业务逻辑。子服务编排另存为定制版本的操作方法,请参见另存版本后进行定制。 在此方式下,定制内容在基线接口预留节点中,该接口还是属于基线接口,可以随版本升级使用。 图2 定制示例
  • 操作步骤 在Native Service配置页面,选择“导航”。 图1 单击导航 在“API设计”页签,单击“开始设计API”。 选择“使用模板”,配置基本信息和新URL对应的版本号,单击“创建”。 图2 创建一个新版本 openApi版本:接口定义需要符合openApi规范,这里配置具体openApi的版本号。 选择模板:选择系统预置的模板。 版本:输入服务版本号。 标题:原生服务API的名称。 创建完成后,单击“新增资源”。 在“增加资源及操作方法”页面,配置相关参数,单击“确认”。 图3 增加资源及操作方法配置页面 输入一个新的资源路径(以/开头):与镜像文件中的接口路径保持一致。 方法:调用的方法,如GET(查询)、PUT(增加)、POST(修改)、DELETE(删除)、PATCH(对资源进行部分修改)。 操作名称:与镜像文件中的操作名称保持一致。 公共接口:若勾选,则只能在公共接口中调用,无法在服务编排和脚本中使用。 内容类型:当勾选“公共接口”时,您需要配置内容类型,即请求中的body类型。其中,“application/x-www-form-urlencoded”、“application/xml”、“multipart/form-data”、“text/html”和“text/plain”用于文件上传接口,选择该内容类型,只能调用post类型的方法。 描述:描述信息。 单击生成的方法,可以在右侧编辑方法的URL、Header、Response参数,需要和镜像文件中接口的URL参数、Header参数、请求参数、返回参数保持一致。编辑参数后,需要单击参数操作列的,再单击“保存”。 您可参考界面上“/case”、“/case/{CaseId}”两个示例编辑生成的方法。每个方法都需要定义Response参数,否则会部署失败。返回体数据结构在模式对象中定义。 当Body参数和Response参数较多,一些参数可以封装成对象类型的参数,并在“模式对象”页签设置该类型参数,注意“模式对象”页签中参数名与操作中URL参数不能同名。 支持按照操作名称和资源路径单过滤或者组合过滤搜索方法。 图4 编辑方法 图5 定义模式对象 参考4~6,新增其他API方法。 编辑方法完成后,需要手动删除“/case”、“/case/{CaseId}”两个示例,删除示例模式对象。 单击“保存”,创建的自定义接口会出现在页面上。 在页面右上方,单击,可以查看自定义接口中的方法和模型对象。单击,可导出该原生服务下接口定义yaml文件。 单击,发布API。 发布后如果需要修改API,需要单击,取消发布后进行修改,修改后再保存并发布。 已发布的API可能在服务编排中已经使用,如果修改API导致不兼容,请同步修改引用该API的服务编排。
  • 运行服务编排 服务编排开发完成后,单击页面上方的,保存服务编排。 保存后,系统会对服务编排进行编译。如果有报错或者警告,请单击“确定”,在服务编排编辑器页面修改服务编排。修改后再次保存,直至无报错和警告。 保存成功后,单击页面上方的,运行服务编排。 在弹出的输入参数页面进行配置,单击“运行”。 如果有输入参数,请输入参数后,再单击“运行”。如果该服务编排没有输入参数,可直接单击“运行”。 表1 基本信息参数说明 参数 参数说明 请求头参数 请求消息头的参数配置,“键”为参数名,“值”为参数取值。 单击“请求头参数”前的,会显示映射区域“键”和“值”。若需要多个请求头参数,请单击“添加行”。 responseType('arraybuffer') 表示返回响应的类型。勾选时,表示返回响应是一个包含二进制数据的JavaScript ArrayBuffer。 输入参数 填写该服务编排运行实例的输入参数及取值。 检查输出页签的调试结果,是否符合预期。 图1 调试结果 表2 输出页签 调试结果 取值 查看日志 单击该按钮,可弹出“日志跟踪器”,显示该服务编排实例的运行日志。 结果 调试结果。 成功 '参数名'的值'%!v(BADINDEX)'无效或格式非法 输出 该服务编排的输出内容,检查输出是否和预期一致。 若输出结果符合预期,单击服务编排编辑器页面上方的,启用服务编排。 若发现输出结果不符合预期,单击服务编排编辑器页面右上方的“跟踪”,打开“跟踪器”页面,查看详细信息。 在“跟踪器”页面,查看服务编排执行的每一步的详细信息。检查哪一步的输出不符合预期,并进行调试。 图2 日志跟踪器
  • 调试服务编排 在服务编排编辑页面,选中需要设置断点的图元,单击鼠标右键选择“设置断点”。 设置断点后,选中图元,单击鼠标右键选择“禁用断点”或者“移除断点”,可禁用或移除断点。 目前不支持在等待Wait图元,以及等待图元之后的所有图元,设置断点。 图3 设置断点 单击服务编排编辑器上方的,开始调试服务编排。 在弹出的输入参数页面进行配置,单击“运行”。 如果有输入参数,请输入入参,再单击“运行”。如果该服务编排没有输入参数,请直接单击“运行”。 在服务编排编辑器左侧,可看到调试页面,单击可执行到下一断点,单击可停止调试,查看执行到某一断点的参数变化是否符合预期。 图4 调试页面 左侧调试页面说明: 变量:展示执行到当前断点,服务编排中的变量取值情况,包括全局变量、某图元的输入输出变量等。 调用堆栈:执行到当前断点时,出现的调用堆栈。 正在调试:正在调试的服务编排名。当执行到子服务编排时,该处显示当前子服务编排名。 断点:展示设置的所有断点,选中某一断点,单击鼠标右键可出现“移除断点”、“移除所有断点”、“启用所有断点”或“禁用所有断点”。也可以单击该区域某一断点,进行启用或禁用该断点。 单击服务编排编辑器页面右上方的“跟踪”,打开“跟踪器”页面。 在弹出的页面,可查看服务编排执行的每一步的详细信息。 图5 查看详情信息 关闭跟踪器页签,单击,至执行完最后一个断点,调试结束。 重新设计问题图元以及前后逻辑,再次运行服务编排,直至结果符合预期。 单击服务编排设计器页面上方的,启用服务编排。 调试服务编排符合预期后,需要启用服务编排。启用后,服务编排才能在系统中使用。
  • 修改对象数据 介绍如何通过记录更新图元,修改Respirator对象数据。 参考如何创建服务编排中操作,创建“名称”和“标签”为“UpdateRespirator”的服务编排。 定义服务编排用到的变量,并设置该服务编排的入参。 在服务编排编辑器页面右侧,选择,在全局上下文页面单击“对象变量”后的加号。 新建对象变量“RespiratorInfos”,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),选中“是否为数组”,单击“保存”。 图19 新建对象变量“RespiratorInfos” 单击画布中的“开始”图元,在右侧菜单选择,单击右上角“全局上下文”展开“全局上下文”页面,将数组对象变量“RespiratorInfos”拖拽到“入参”中。 图20 配置开始图元 拖拽“基本”目录中的“记录更新”图元到画布中,并与“开始”图元进行如下连线。 图21 拖拽图元 配置“记录更新”图元。 单击画布中的“记录更新”图元,在“基本信息”页面中配置图元标签及名称为“UpdateRespirator”,并勾选“使用快速更新模式”。 图22 配置“记录更新”图元基本信息 单击,在“记录更新”页面,将创建的对象变量RespiratorInfos由展开的“全局上下文”页面拖拽到“变量”输入框中。 图23 配置“记录更新”页面 单击页面上方的,保存服务编排。 保存成功后,单击,运行服务编排。 在服务编排运行页面,设置输入参数,单击“运行”。 在“输入参数”中,输入如下参数,修改Respirator对象数据,更新状态为“使用中”。其中,“CNAME”替换为环境中实际配置的命名空间,“id”取值替换为查询对象数据中查询出呼吸机的id。 { "RespiratorInfos": [ { "id": "cnE0000000m5Kvrl7kSe", "CNAME__status__ CS T": "使用中" }, { "id": "cnE0000000m5KvrtM7EW", "CNAME__status__CST": "使用中" } ]} 检查运行的结果是否符合预期。 运行结果显示“成功”。 在对象Respirator的“布局”页签,单击“Respirator Records”后的,查看到对象记录中状态已成功由“空闲”更新为“使用中”。 图24 预览对象布局页 图25 查看对象数据变更 单击页面上方的,激活服务编排。
  • 删除对象数据 介绍如何通过记录删除图元,删除Respirator对象数据。 参考如何创建服务编排中操作,创建“名称”和“标签”为“DeleteRespirator”的服务编排。 定义服务编排用到的变量,并设置该服务编排的出参。 在服务编排编辑器页面右侧选择,在全局上下文页面单击“对象变量”后的加号。 新建对象变量“RespiratorInfos”,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),选中“是否为数组”,单击“保存”。 图26 新建对象变量“RespiratorInfos” 单击画布中的“开始”图元,在右侧菜单选择,单击右上角“全局上下文”展开“全局上下文”页面,将数组对象变量“RespiratorInfos”拖拽到“入参”中。 图27 配置开始图元 拖拽“基本”目录中的“记录删除”图元到画布中,并连接“开始”和“记录删除”图元。 配置“记录删除”图元。 单击画布中的“记录删除”图元,在“基本信息”页面中配置图元标签及名称为“DeleteRespirator”,并勾选“使用快速删除模式”。 单击,在“记录删除”页面将创建的对象变量RespiratorInfos由展开的“全局上下文”页面拖拽到“变量”输入框中。 图28 配置“记录删除”页面 单击页面上方的,保存服务编排。 保存成功后,单击,运行服务编排。 设置输入参数,单击“运行”,删除2条对象记录。 其中,“id”取值替换为查询对象数据中查询出的呼吸机的id。 { "RespiratorInfos": [ { "id": "cnE0000000m5Kvrl7kSe" }, { "id": "cnE0000000m5KvrtM7EW" } ]} 运行后在对象Respirator的“布局”页签,单击“Respirator Records”后的,查看到已成功删除2条对象记录,还剩1条。 图29 预览布局页 图30 对象记录 单击页面上方的,启用服务编排。
  • 创建对象数据 由于服务编排中内置的记录创建图元无法批量创建,需要循环调用记录创建图元,进行批量创建。 参考如何创建服务编排中操作,创建“名称”和“标签”为“CreateRespirator”的服务编排。 图1 创建CreateRespirator服务编排 参照表1,定义服务编排用到的变量,并设置该服务编排的入参。 表1 变量说明 变量名 变量类型 变量说明 RespiratorInfo Respirator对象 系统中空闲状态下的呼吸机资源数组元素。 RespiratorInfos Respirator对象数组 系统中空闲状态下的呼吸机资源数组。 在服务编排编辑器页面右侧,选择,在全局上下文页面单击“对象变量”后的加号。 图2 添加对象变量 设置对象变量名称为“RespiratorInfo” ,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),单击“保存”。 图3 配置对象变量 服务编排中只允许引用当前应用工程下的资源(例如对象、脚本),上图中的对象需要和服务编排在同一应用中。 按照上述操作,新建对象变量“RespiratorInfos”,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),选中“是否为数组”,单击“保存”。 图4 配置数组类型对象变量 单击画布中的“开始”图元,在右侧菜单选择,单击右上角“全局上下文”展开“全局上下文”页面,将数组对象变量“RespiratorInfos”拖拽到“入参”中。 图5 配置开始图元 拖拽快捷目录中的“循环”图元以及“基本”目录中的“记录创建”图元到画布中,并与“开始”图元进行如下连线。 图6 拖拽图元 配置“循环”图元。 单击画布中的“循环”图元,在“基本信息”页面中配置图元标签和名称为“LoopRespiratorInfos”。 图7 配置“循环”图元基本信息 单击,进入“循环”配置页面,展开“全局上下文”页面,拖拽对象变量RespiratorInfos到“数组”输入框中,拖拽对象变量RespiratorInfo到“元素”输入框中。 图8 配置“循环”页面 如上图配置,能够将数组对象变量RespiratorInfos进行遍历,并将数组中的每个元素放置到对象变量RespiratorInfo中,进行下一步操作。 配置“记录创建”图元。 单击画布中的“记录创建”图元,在“基本信息”页面中配置图元标签及名称为“CreateRespirator”,并勾选“使用快速创建模式”。 图9 配置“记录创建”图元基本信息 单击,在“记录创建”页面,展开“全局上下文”页面,将对象变量RespiratorInfo拖拽到“变量”输入框中。 图10 配置“记录创建”页面 单击页面上方的,保存服务编排。 保存后,单击,运行服务编排。 在服务编排运行页面,设置输入参数,单击“运行”,创建3条对象记录。 其中,“CNAME”替换为环境中实际配置的命名空间。 { "RespiratorInfos": [ { "name": "呼吸机1", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲" }, { "name": "呼吸机2", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲" }, { "name": "呼吸机3", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲" } ]} 检查运行的结果是否符合预期。 运行结果显示“成功”。 图11 运行结果 在对象Respirator的“布局”页签,单击“Respirator Records”后的,查看到已成功创建对象记录。 图12 查看对象数据 图13 Respirator对象数据 单击页面上方的,启用该服务编排。
  • 查询对象数据 介绍如何通过记录查询图元,查询Respirator对象数据中“状态”为“空闲”的对象记录。 参考如何创建服务编排中操作,创建“名称”和“标签”为“SelectRespirator”的服务编排。 定义服务编排用到的变量,并设置该服务编排的出参。 在服务编排编辑器页面右侧,选择,在全局上下文页面单击“对象变量”后的加号。 新建对象变量“RespiratorInfos”,对象中选择前提条件中创建的对象Respirator,设置字段描述信息(可选),选中“是否为数组”,单击“保存”。 图14 创建数组类型对象变量“RespiratorInfos” 单击画布中的“开始”图元,在右侧菜单选择,单击右上角“全局上下文”展开“全局上下文”页面,将数组对象变量“RespiratorInfos”拖拽到“出参”中。 图15 配置开始图元 拖拽“基本”目录中的“记录查询”图元到画布中,并与“开始”图元进行如下连线。 图16 拖拽图元 配置“记录查询”图元。 单击画布中的“记录查询”图元,在“基本信息”页面中配置图元标签及名称为“SelectRespirator”,并勾选“使用快速查询模式”。 图17 配置“记录查询”图元基本信息 如下图所示,单击,在“记录查询”页面中,将创建的对象变量RespiratorInfos由展开的“全局上下文”页面拖拽到“变量”输入框中。在“条件”中,单击“新增行”新增条件语句,“排序”为可选配置。 图18 配置“记录查询”页面 条件中的“值”,需要使用英文双引号。 单击页面上方的,保存服务编排。 保存成功后,单击,运行服务编排。 由于该服务编排没有配置入参,直接单击“运行”,即可查询对象数据。 查看是否返回所有状态为空闲的对象记录。 { "interviewId": "002N0000XXXXXXx5Cy", "outputs": { "RespiratorInfos": [ { "createdBy": "10gd000XXXXXX7Pea", "createdBy.name": "XXX", "createdDate": "2021-08-10 14:25:18", "currencyIsoCode": "USD", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲", "id": "cnE0000000m5Kvrl7kSe", "lastModifiedBy": "10gd000XXXXXXq7Pea", "lastModifiedBy.name": "XXX", "lastModifiedDate": "2021-08-10 14:25:18", "name": "呼吸机1", "owner": "10gd0000XXXXXXq7Pea", "owner.name": "gonCNAMEhen" }, { "createdBy": "10gd000000bZHUAq7Pea", "createdBy.name": "XXX", "createdDate": "2021-08-10 14:25:18", "currencyIsoCode": "USD", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲", "id": "cnE0000000m5KvrtM7EW", "lastModifiedBy": "10gd0000XXXXXXea", "lastModifiedBy.name": "XXX", "lastModifiedDate": "2021-08-10 14:25:18", "name": "呼吸机2", "owner": "10gd000000bZHUAq7Pea", "owner.name": "XXX" }, { "createdBy": "10gd000XXXXXX7Pea", "createdBy.name": "XXX", "createdDate": "2021-08-10 14:25:18", "currencyIsoCode": "USD", "CNAME__hospital__CST": "第1人民医院", "CNAME__status__CST": "空闲", "id": "cnE0000000m5KvrykUhk", "lastModifiedBy": "10gd0000XXXXXXPea", "lastModifiedBy.name": "XXX", "lastModifiedDate": "2021-08-10 14:25:18", "name": "呼吸机3", "owner": "10gd000000bZHUAq7Pea", "owner.name": "XXX" } ] }} 单击页面上方的,启用服务编排。
  • 如何使用记录删除图元 在基本中,拖拽“记录删除”图元至画布中。 选中记录删除图元,单击,设置基本信息。 表1 基本信息参数说明 参数 参数说明 标签 图元的标签,用于在页面显示。系统会自动填入该值,格式为RecordDelete序号,序号从“0”开始,表示同类型图元序号。 名称 图元的标识,请确保在当前服务编排中唯一。 描述 图元的描述信息。 使用快速删除模式 是否启用快速删除模式。 若勾选该参数,表示为快速模式。 根据对象变量中的记录ID,删除对应的记录。当配置的对象变量为数组时,则从数据库中删除对象变量数组中的包含的所有记录(按照记录ID进行删除)。 不勾选,表示为普通模式。 按照条件删除指定对象中的记录,需要配置待删除记录对应的对象名,删除条件。 默认不勾选。 单击,在“记录删除”页面进行配置。 若上一步勾选“使用快速删除模式”,则需要指定一个预先定义的对象变量或者对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的记录ID删除对应的对象记录。如下图所示,使用“accountDelete”对象变量的记录ID删除对象记录。 图1 快速删除模式 表2 快速删除模式参数说明 参数 参数说明 变量 预先定义的对象变量,使用该对象变量或对象变量数组中的记录ID删除对象记录。 从全局上下文拖拽或直接输入对象变量/对象变量数组。 当前服务编排出现错误时回滚 当前服务编排出现错误时,回滚到上一个流程。 默认为勾选。若无特殊要求,请不要更改设置。 若上一步未勾选“使用快速删除模式”,则需要指定对象并在条件中设置指定对象部分字段的值,根据条件删除符合条件的对象记录。如下图所示,删除“Account”对象“name”为“Lily”的记录。 图2 普通删除模式 表3 普通删除模式参数说明 参数 参数说明 对象 指定的具体对象。 当前服务编排出现错误时回滚 当前服务编排出现错误时,回滚到上一个流程。 默认为勾选。若无特殊要求,请不要更改设置。 条件 选中对象后,该条件区域“字段”列会出现该对象的字段。单击“新增行”,可设置删除数据的条件。 在“字段”中选择要进行判断的对象字段,在“比较符”中选择相应的比较符,“值”则可从全局上下文拖拽变量或者直接输入“{!变量名}”。
  • 前提条件 已在原生服务中配置好API,具体操作请参考配置API。 已接入服务实例,具体操作请参考注册Native Service。 进入需要调用原生服务的应用设计器,单击“Internal dependencies”或“External dependencies”旁的“+”,选择“Native服务”,在“添加Native服务”页面添加要调用的原生服务。添加后,在该应用的服务编排中,才可以调用Native服务。 “Internal dependencies”为内部依赖文件夹,导入的BO服务或Native服务,在打包上层应用时也会随应用打包发布出去。 “External dependencies”为外部依赖文件夹,导入的BO服务或Native服务,在打包上层应用时不会打包出去。 图1 应用中添加原生服务
  • 如何使用Native服务图元 在Native服务中,拖拽所需的Native服务图元至画布中。 选中Native服务图元,单击,设置基本信息。 表1 基本信息参数说明 参数 参数说明 标签 图元的标签,用于在页面显示。系统会自动填入该值,格式为原生服务名+序号。序号从“0”开始,表示同类型图元序号。 名称 图元的标识,请确保在当前服务编排中唯一。 描述 图元的描述信息。 单击,在“Native服务”页面进行配置。 图2 配置Native服务图元 表2 Native服务图元配置参数说明 参数 参数说明 操作方法 原生服务中已自定义好的API接口。 入参/目标 当选择具体操作方法(API)后,API的输入参数将会显示在入参的目标列。 入参/源 服务编排中的变量,需要和目标的参数类型保持一致。该源会将服务编排中的变量,赋值给调用API的输入参数。 出参/源 当选择具体操作方法(API)后,API的输入参数将会显示在出参的源列。 出参/目标 服务编排中的变量,需要和输出参数的类型保持一致。将API中的输出参数赋值给服务编排中的变量,供服务编排中使用。
  • 标准库模块 低代码平台中有些模块会被编译成二进制,预先加载到内存中。例如,decimal、context都是系统预置的标准库模块。 在低代码平台中,会优先加载标准库模块, 例如: import * as http from 'http'; 始终返回内置的HTTP模块,即使有同名自定义模块。如果需要返回自定义的模块,请使用相对路径语法: import * as http from './http';
  • 循环依赖 当循环调用模块时,一个模块可能在未完成执行时被返回。因此,需要仔细地规划模块间调用,以允许循环模块依赖在应用程序内正常工作。 例如,脚本a: console.log('a 开始');exports.done = false;import * as b from 'b';console.log('在 a 中,b.done = ', b.done);exports.done = true;console.log('a 结束'); 脚本b: console.log('b 开始');exports.done = false;import * as a from 'a';console.log('在 b 中,a.done = ', a.done);exports.done = true;console.log('b 结束'); 脚本main: console.log('main 开始');import * as a from 'a';import * as b from 'b';console.log('在 main 中,a.done = ', a.done ',b.done = ', b.done); 当main加载a时,a又加载b。 此时,b又会尝试去加载a。 为了防止无限的循环,会返回一个a的exports对象的未完成的副本给b模块。然后b完成加载,并将exports对象提供给a模块。当main加载这两个模块时,它们都已完成加载,因此该程序的输出会是: main 开始a 开始b 开始在 b 中,a.done = falseb 结束在 a 中,b.done = truea 结束在 main 中,a.done=true,b.done=true
  • 如何使用脚本图元 在基本中,拖拽“脚本”图元到右侧画布中。 选中画布中的脚本图元,单击,设置基本信息。 表1 基本信息参数说明 参数 参数说明 标签 脚本图元的名称,用于在页面显示。系统会自动填入该值,格式为Script序号,序号从“0”开始,表示同类型图元序号。 名称 图元的标识,请确保在当前服务编排中唯一。 描述 图元的描述信息。 单击,选择脚本、设置输入参数和输出参数。 图1 配置脚本 表2 脚本图元配置参数说明 参数 参数说明 脚本 调用的脚本名称,只有在启用状态下的脚本才能被服务编排调用。 输入参数/目标 脚本的输入参数名称。 单击“新增行”,在下拉框中选择脚本输入参数的名称。 输入参数/源 服务编排中的变量,为目标赋值。 可直接填写,也可以拖入全局上下文变量,将服务编排中的变量赋值给脚本中的输入参数。 输出参数/源 脚本的输出参数名称。 单击“新增行”,在下拉框中选择脚本输出参数的名称。 输出参数/目标 服务编排中的变量,脚本中的输出参数赋值给服务编排中的变量。 拖入全局上下文变量,将脚本的输出参数赋值给服务编排中的变量。
  • 属性 在属性中,设置雷达图组件的位置、边框、背景等。 图2 属性 基础 组件标题:设置组件的标题。 组件名称:设置组件的名称。 位置 距离左端:组件到页面左侧的距离,单位为px。 距离顶端:组件到页面顶部的距离,单位为px。 宽度:组件的宽度,单位为px。 高度:组件的高度,单位为px。 堆叠顺序:设置组件层叠显示顺序。组件的堆叠顺序默认都是“1”,数字越大,显示越靠前。当需要让组件置底时,可设置堆叠顺序为“0”。 自适应高度:组件的高度是否随宽度改变。 边框:设置组件的边框样式,如全边框或角边框。 背景 样式:设置背景的样式,如普通、居中、拉伸等。 图片链接:背景图片URL。 颜色:设置背景的颜色。
共99354条