华为云用户手册

  • 背景信息 ModelArts Pro 是为企业级AI应用打造的专业开发套件。基于华为云的先进算法和快速训练能力,提供预置工作流和模型,提升企业AI应用的开发效率,降低开发难度。同时,支持客户自主进行工作流编排,快速实现应用的开发、共享和发布,共建开放生态,实现普惠行业AI落地。ModelArts Pro包括 自然语言处理 套件、 文字识别 套件、视觉套件等,能够快速响应不同行业、不同场景的AI落地需求。更多关于ModelArts Pro的介绍,请参见ModelArts Pro官方网站。 在AstroZero中,通过配置ModelArts Pro连接器,可实现AstroZero与华为ModelArts Pro对接。对接后可使用ModelArts Pro提供的文字识别套件、自然语言处理套件提供的能力。
  • 在脚本中调用连接器 在脚本中,通过调用连接器,实现调用ModelArts Pro的接口。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图6 新建空白脚本 在脚本编辑器中,输入如下代码。 import * as modelartspro from 'modelartspro';export class Input { @action.param({ type: "String", required: false, description: "the image url" }) url: string; @action.param({ type: "String", required: false, description: "the base64 coded image" }) image: string; @action.param({ type: "Boolean", required: false, description: "" }) isMultiTemplate: boolean @action.param({ type: "String", required: false, description: "" }) modelId: string}export class Output { @action.param({ type: "string" }) result: string;}export class testModelartsPro { @action.method({ input: "Input", output: "Output", description: "modelartspro test case" }) run(input: Input): void { // 填写实例化的modelartspro连接器名称 let client = modelartspro.newClient("custom_defined_ocr") let result = null result = client.customOCRWithURL(input.url, input.isMultiTemplate, input.modelId); console.log(result) }} 代码modelartspro.newClient("custom_defined_ocr")中“custom_defined_ocr”为连接器的名称,如果连接器名称带有命名空间前缀,代码中也要携带。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 在页面底部“输入参数”中,设置输入请求参数,单击测试窗口右上角的。 { "url": "https://XXXXXXXX/testModelArtsPro.jpg", "isMultiTemplate": true, "modelId": "0b7f0f28-27e2-11ec-8f30-0255ac100057"} 其中,“url”为图片的URL。 在日志页签,可查看到识别结果,表示执行脚本成功。 单击脚本编辑器页面上方的,启用脚本。
  • 前提条件 使用ModelArts Pro过程中,ModelArts Pro需要访问ModelArts服务的云资源。请先申请开通华为云ModelArts服务,具体操作请参见准备工作。 AstroZero对接ModelArts Pro,使用ModelArts Pro提供的文字识别套件、自然语言处理套件提供的能力。因此需要先申请文字识别套件和自然语言处理套件,具体操作请参见申请行业套件。 已参考获取AK/SK中操作,获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对。 本节场景是对行程码图片进行识别,需要在ModelArts Pro上创建并部署上线用于对行程码进行识别的模型。由于各省份行程码可能不一致,所以部署的为多模板,具体操作请参见使用多模板工作流开发应用。
  • 背景信息 ModelArts是面向AI开发者的一站式开发平台,提供海量数据预处理及半自动化标注、大规模分布式训练、自动化模型生成及端-边-云模型按需部署能力,帮助用户快速创建和部署AI智能模型,管理全周期AI工作流。更多ModelArts的介绍,请参见ModelArts官方网站。 在AstroZero中,通过配置ModelArts连接器,可实现AstroZero与华为ModelArts对接,用于图像识别、文字识别等AI(人工智能)场景。
  • 在脚本中调用连接器 在脚本中,调用连接器,实现调用ModelArts的接口。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图6 新建空白脚本 在脚本编辑器中,输入如下代码。 import * as modelarts from 'modelarts';export class Input { @action.param({ type: "String", required: false, description: "the image url" }) url: string; @action.param({ type: "String", required: false, description: "the base64 coded image" }) image: string; @action.param({ type: "String", required: false, description: "" }) apigCode: string @action.param({ type: "String", required: false, description: "" }) modelId: string}export class Output { @action.param({ type: "string" }) result: string;}export class testModelarts { @action.method({ input: "Input", output: "Output", description: "modelartspro test case" }) run(input: Input): void { // 填写实例化的modelartspro连接器名称 let client = modelarts.newClient("testArts") let result = null result = client.modelArtsWithURL(input.url, input.apigCode, input.modelId); console.log(result) return result }} 其中,代码modelarts.newClient("testArts")中“testArts”为连接器的名称。如果连接器名称中带有命名空间前缀,代码中也需要携带。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 在页面底部“输入参数”中,设置输入请求参数,单击测试窗口右上角的。 { "url": "https://XXXXXXXXX/testmodelarts.jpg", "apigCode": "bec274062225485b95fbcd4d6e8f128a", "modelId": "5ecac550-eefe-4437-9767-57eca07fa91f"} 其中,“url”请设置为图片的URL。 在输出参数页签,可查看到识别的结果。 { "predicted_label": "roses", "scores": [ [ "roses", "0.947" ], [ "daisy", "0.050" ], [ "tulips", "0.002" ], [ "dandelion", "0.000" ], [ "sunflowers", "0.000" ] ]} 单击脚本编辑器页面上方的,启用脚本。
  • 使用说明 页面组件之间,可以通过配置事件和动作进行信息交互。当页面组件较多,且需要进行信息交互时,频繁的给每个组件去定义事件或动作就比较繁琐了。此时,可以通过定义全局状态,来实现页面级所有组件中数据信息的更新。 低代码平台高级页面支持设置全局状态,通过页面级内存方式共享数据,即采用集中式存储管理页面所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。简单的理解就是全局状态,可理解为页面中所有组件的共享状态,不管组件在页面的哪个位置或层级,任何组件都能获取状态或触发状态改变的动作。全局状态相当于全局变量,属性是私有的,需要在组件的js文件中,使用预置的“this.$mstore.dispatch”方法,来修改状态数据。 思考:什么情况下,应该使用全局状态? 解惑:当页面组件构成比较简单,组件间不需要频繁的进行信息交互时,不需要设置全局状态。反之,则建议使用全局状态,通过设置并使用全局状态,可以帮助我们管理页面所有组件的共享状态。
  • 操作步骤 参考如何登录经典应用设计器中操作,登录经典版应用设计器。 在高级页面开发界面,单击右上角的,定义全局状态。 定义全局状态使用JavaScript编程语言,不支持TypeScript。全局状态结构固定以MStore命名,每个页面仅包含一个全局状态实例,方便在组件调试的过程中轻易地取得整个当前页面状态的快照。全局状态的结构定义由以下三部分组成: state:定义页面所有组件的初始状态数据,即页面中所有组件共享状态的初始数据源。 mutations:状态变更的唯一方法是提交mutation。mutation以声明方式将state变化映射到视图。每次state的变更都需要定义一个mutation。mutation使用对象风格的提交方式,整个对象都作为载荷(payload)传给mutation函数。mutation都是同步事务。 actions:通过actions执行状态数据变更,用于衔接state和mutation。Action可以包含任意异步操作。通常用于绑定状态和组件。可以调用服务。 在页面的组件js文件中,使用预置的“this.$mstore.dispatch()”方法,修改状态数据。 系统还预置了onStateChanged(state) 方法,用于监听属性整个全局状态的变更。
  • 相关操作 (可选)设置字段访问权限。 默认批量创建自定义字段后,所有权限Profile都会添加批量导入自定义字段的访问权限。若需要单独设置某些字段的访问权限,请执行该步骤。 单击自定义字段列表中的具体字段名,进入自定义字段详情页,单击“设置字段级权限”,可单独设置字段的访问权限,即哪些权限Profile可以查看或修改该字段。 图17 单击字段名 图18 设置字段级权限入口 图19 设置字段级权限 (可选)将对象字段添加到对象的页面布局。 默认批量创建自定义字段后,所有自定义字段都会显示在布局页面。若需要修改对象页面布局中字段,请执行该步骤。 在对象配置页面选择“布局”页签,单击“visitorlnfo Records”,进入对象布局页面后,选中页面中的表格组件,可在布局页添加或者删除字段。 图20 进入布局页 图21 添加或者删除字段
  • 操作步骤 参考创建应用中操作,创建一个应用。 为应用添加一个自定义对象“visitorlnfo”。 在应用目录上,例如“Model”,单击 “+”,在弹出菜单中选择“对象”。 图2 创建对象 输入对象的标签为“visitorlnfo”,单击名称系统会自动生成该值,单击“添加”。 图3 设置对象名称 实际创建的自定义对象将会自动拼接命名空间前缀,以及对象标识后缀,即“CNAME__visitorlnfo__ CS T”。对象创建后,仅包含一些内置的标准字段,您可以继续以下步骤,使用模板批量创建自定义字段。 下载对象字段模板。 在已创建的对象中,选择“自定义字段”页签,单击“批量创建”,然后单击“下载模板”,将字段模板Excel下载到本地。 图4 下载模板 在本地打开3中下载的字段模板,单击左上角的“启用内容”,启用宏。 图5 启用宏 打开字段模板后,需要先单击“启用内容”,启用字段模板中的宏。如果不启用宏,字段模板将不校验字段属性,影响您使用。 如果是初次使用,请在“Note”页签阅读字段模板说明,其中包含命名空间配置。“Example”页签,提供了字段批量定义示例。 图6 模板说明 使用字段模板,创建字段。 选择“Data”表,进入字段编辑页面。 图7 进入Data表 创建字段即在“Data”表中,填写各字段属性值,包括字段类型、标签、名称、数据长度以及默认值等。其中,必填项单元格表头会有红色*号,背景置灰的单元格无法填写。 选中C列表头,显示当前列为“数据类型”。 C列用于设置字段类型,设置字段类型后,不是当前字段类型的其他属性将会置灰。 图8 查看C列标题中文描述 单击C列第一行,在下拉选项中,选中第一字段“CNAME__matter__CST”的字段类型为“Text Area”。 图9 设置字段类型 分别在A列设置字段的标签、在B列设置字段的名称。 其中,B列值需要唯一,即字段名不能重复。A列可以为中文,B列为字段名称不能是中文。 图10 设置字段标签及名称 A列B列分别对应AstroZero中自定义字段的标签、名称。 图11 AstroZero自定义字段 单击必填列的列名,查看该列属性值的中文描述,然后依次设置当前字段的其他属性值。 图12 设置字段属性值 设置完成后,保存表格。 单击下载链接,可下载示例模板,供您体验导入一个对象字段模板使用。 本步骤示例模板“字段类型中英文对照及说明”页,提供了字段类型中英文对应关系及字段类型说明。 图13 字段类型说明 在AstroZero中批量导入对象(例如visitorlnfo)的自定义字段。 在对象配置页面选择“自定义字段”页签,单击“批量创建”,选择“批量导入字段”。 图14 进入自定义字段页面 在弹窗中拖入编辑好的字段模板,单击“确定”。 图15 拖入字段模板 导入字段模板成功后,系统会自动批量创建已定义好的所有字段。 图16 导入后的字段
  • 在脚本中调用连接器 在脚本中,调用已创建的连接器,实现与SMTP的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图6 新建一个空白脚本 在脚本编辑器中,输入如下代码。 // 导入连接器import * as connector from 'connector';//新建SMTP邮件连接器,第一个参数固定是emailsmtp,第二个参数是连接器的名称let client = connector.newClient("emailsmtp","命名空间__smtp01");//构建请求消息头,包括收件人地址、邮件主题、邮件正文(主题和正文不能同时为空)//按内容发送let req ={"address":"test@huawei.com","subject":"SMTP功能验证-脚本","body":"使用SMTP发送邮件"};//按模板发送,如果有template模板参数,则主题和正文配置无效,按邮件模板中的内容发送//let req={"address":"test@huawei.com","template":"smtptt1."}//发送邮件,其中第一个参数不用填写,第二个参数为消息体let resp = client.invoke("",req); 其中,connector.newClient中“命名空间__smtp01”为连接器的名称,“address”为收件人,“subject”为主题,“body”为邮件内容。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,执行脚本。 2中已设置入参,故此处不需要再设置,直接单击测试窗口右上角的。 检查收件人是否收到邮件。 收到邮件,表示成功调用连接器,如图7。 图7 接收邮件内容 单击脚本编辑器页面上方的,启用脚本。
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“逻辑”。 单击脚本后的,设置脚本名称,单击“添加”。 图1 新增一个空脚本 在脚本编辑器中,输入如下代码。 // Here's your code.import * as connector from "connector";let client = connector.newClient("LT927__test", "test1");let result = client.invoke("LT927__flapRefund", {});console.log(result) 其中,“LT927__test”表示连接器的名称,“test1”为创建Rest Service(自定义连接器)配置的认证信息名称,“LT927__flapRefund”为6中配置的动作名称。 单击脚本编辑器页面上方的,保存脚本。 脚本保存成功后,单击,运行脚本。 在页面底部“输入参数”页签中,输入请求参数,单击测试窗口右上角的。 在“日志”页签,查看打印的日志。
  • 支持自动审批 AstroZero支持用户任务自动审批功能,例如设置“主管审核”任务自动审批。在用户任务配置界面,指定该任务具体某一接收人,可使用表达式的形式将任务指派某一用户,在自动审批中进行设置。 流程触发人自动通过:若勾选该选项,任务接收人是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:若勾选该选项,任务接收人在当前BPM实例中已审批过其他用户任务,则该用户任务会被自动审批。 图1 自动审批设置 当任务接收人设置为“当前泳道”对应的工作队列或用户组时,将无法使用自动审批功能。只有任务接收人设置为某一用户时,才可进行自动审批。 父主题: 深入了解用户任务
  • 如何使用自定义错误码 自定义错误码创建完成后,可在脚本中使用。在脚本中,调用抛出错误信息的error函数I18nError('ErrorCodeName','变量1','变量2')。该函数中,输入参数为错误码名称"t__testErrorCode"和错误码信息中所携带的变量("val1"和"val2")。 创建脚本。 在新版设计器页面,单击左侧导航栏中的“逻辑”。 单击脚本后的,进入新增脚本页面。 设置脚本的名称,模板选择“空脚本”,单击“添加”。 在脚本编辑器中,输入如下代码。 // test custom error func , get diff language error by user langimport * as error from 'error';export class TestDemo { @action.method({ label: 'test', description: 'error code', input: 'No input', output: 'No output' }) public test() { //使用I18nError函数设定错误码和错误码信息携带变量 throw new error.I18nError('t__testErrorCode', ["val1", "val2"]); }} 其中,“t__testErrorCode”为自定义错误码名称,请根据实际情况配置。 单击,保存脚本后,单击,启用脚本。 按照如何定义API接口中操作,绑定上述开发的脚本,进行测试。 图3 自定义错误信息测试
  • 绑定数据模型 设置组件绑定的数据模型,有自定义对象、对象、服务和事件四种。 向页面中拖入一个表格(新)组件,单击“表格”页签,在表格属性“数据绑定”中单击,绑定数据模型。 图3 数据绑定 在弹出页面中,单击“新增模型”。 设置表格的数据模型,添加对象模型,模型名称“equipmentInstance”,单击“下一步”。 图4 创建数据模型 “选择对象”选择一个提前创建好的对象,例如“HW__Equipment__CST”,“选择字段”中选择表单中需要展示的字段,单击“下一步”。 图5 选择展示字段 在方法页面,单击“确定”,返回选择模型页面。 勾选刚建好的数据模型,单击“确定”。 绑定对象模型后,显示如图6所示。系统默认添加了斑马纹,如果不需要,可在表格属性的“基本设置”中关闭“斑马纹”。 图6 绑定数据模型后的结果列
  • 属性 数据绑定:通过建立不同类型的视图模型,将各种数据源和组件的返回值或者属性值进行关联,实现动态数据效果。 值绑定:设置组件绑定的数据模型,数据模型一般有以下几种。更多介绍,请参见值绑定。 自定义:由用户自定义的前端模型,可以在模型树上快速创建自定义字段。 对象:由后台对象模型映射创建,支持选择字段。 服务:由后台服务的出入参数模型创建,分别生成inputParam和outputParam节点。 事件:由后台事件的字段映射创建,并且支持websocket刷新模型数据。 属性值绑定,用于对该组件所有属性的动态设置。当某一属性被动态绑定时,以绑定值为准。更多介绍,请参见属性绑定。
  • 什么应用代码可以保护 应用包类型有资产包和源码包两种,仅资产包可设置是否受保护,源码包不受保护。 参考应用打包发布,选择“资产包”发布的应用包,包中组件可设置是否受保护。选择该项后,需要配置版权信息(可选)、描述(可选)、每个组件的保护设置(必选,配置为未受保护或者只读保护)。 三种类型保护模式:未受保护、只读保护和不可见保护。相当于Linux下的三种保护模式,即可读可写可执行(RWX)、不可写(RX)和仅可执行(X)。
  • 补丁包发布步骤 参考导入导出应用源码包中操作,对应用中部分组件进行设置打包。 选中“组件”后,单击“详情”,在“可选组件”页面勾选需要设置的组件,单击“保存”再进行后续操作。例如,对应用中的某一个脚本进行打包。 参考如何登录经典应用设计器中操作,登录经典版应用设计器。 在左侧导航栏中,单击,选择“设置”,进入应用编译设置页面,设置只编译该脚本。 图1 设置编译组件 图2 勾选脚本 勾选完成后,单击“保存”。 在开发页面左侧列表中,单击,选择“编译”,进行编译。 编译完成后,单击左下角的,选择“我的仓库”,将应用程序安装包发布到当前租户的私仓。 发布成功后,即可在“资产包”下获取仅包含脚本的补丁包。 补丁包发布之后,可以参考如何安装已开发好的应用中的内容进行更新安装。
  • 前台页面常用调测方法 在高级页面的开发中,常借助浏览器内置的 开发者工具 对样式或功能问题进行定位和分析。下面以Chrome浏览器为例,简单介绍浏览器开发者工具中常用的调测方法。在Chrome浏览器中,按下“F12”或者“Ctrl + Shift + I”,开启开发者工具。 DOM和 CSS 样式调试 在Elements面板,可以自由的操作DOM和CSS,来迭代布局和设计页面。在开发者工具打开的状态下,使用左上角的箭头按钮,可点选页面元素,查看该元素DOM和CSS等。也可以在Elements页签下,修改页面上的元素的DOM标签或CSS样式(修改立即生效),实时查看修改后效果。 图1 Elements页签查看调试DOM和CSS样式 打印日志信息 在Console页签下,可使用控制台打印日志信息。在Sources页签下,调试JavaScript时常用方法是将多个console.log()语句插入代码,重新加载页面后,可以在Console页签中,查看到打印的消息。Sources页签主要包括三个部分,左侧为页面请求文件列表,中间为选择文件的文件内容,右侧为JavaScript调试窗格。 想要在JavaScript中打印日志,需要找到相应文件,查找相关代码,然后插入console.log()。 图2 Sources页签布局 调用低代码平台API 在Console页签下,可使用控制台调用低代码平台提供的API,以获取相关信息进行调试。 图3 调用低代码平台API 断点调试 在Sources页签下,可以设置断点来调试JavaScript。使用断点,DevTools会在暂停时及时显示所有变量值。Chrome开发者工具,提供了代码行断点、条件代码行断点、DOM断点和事件侦听断点等多种断点,请根据调测的实际需求选择合适的断点。断点的类型和使用场景,如表1所示。 表1 Chrome断点类型及使用场景 断点类型 使用场景 代码行 在确切的代码区域中。 条件代码行 在确切的代码区域中,且仅当其他一些条件成立时。 DOM 在更改或移除特定DOM节点或其子级的代码中。 XHR 当XHR网址包含字符串模式时。 事件 在触发点击等事件后运行的代码中。 侦听器 在引发已捕获或未捕获异常的代码行中。 异常函数 任何时候调用特定函数时。 代码行断点调试是最为常见的断点调试方法, 设置代码行断点的方法是找到请求文件,在Sources左侧请求文件列表按照目录查找,也可以借助“Ctrl+F”搜索关键词找到相关文件。在Sources中间文件内容区域,找到要设置断点的代码行,单击行号,出现蓝色图标,这意味着这行代码上有一个代码行断点。如图4所示,在global_BubbleChartWidget.js文件的49行代码处,设置了一个代码行断点。 刷新此网页,脚本运行始终会在执行此行代码之前暂停,可单击右侧调试窗格的按钮进行单步调试,或者单击调试窗格的按钮继续执行脚本。 图4 代码行断点示例 多终端测试 在进行页面自适应测试时,可采用Chrome开发者工具提供的模拟移动设备的功能。借助此功能,可无实物快速对网页进行多个终端测试。 单击,可启动模拟移动设备界面,设备工具栏在打开时默认处于自适应视口模式,可以将视口大小调整为所需的任何尺寸,另外还可以选择多种终端型号。 图5 模拟移动设备
  • 自定义高级组件调试 针对用户本地开发的高级组件,AstroZero提供了Scaffolding脚手架工具,Scaffolding可帮助您快捷实现组件的新建、本地开发、调试、预览、发布和下载等主要功能。 Scaffolding打通了本地开发环境与AstroZero开发环境,实现本地开发组件的实时在线调测,简化了本地开发组件后频繁的打包组件资产包上传至AstroZero环境再查看页面显示效果的过程,可提升高级组件的开发效率。 Scaffolding的安装、使用及调试,请参考安装Scaffolding,Scaffolding图形界面操作方式。
  • 什么是BO 商业对象(Business Object,简称BO)是封装了完整的数据模型、业务逻辑、页面展现的软件单元。一个BO提供一个完整场景的服务,为上层应用提供特定服务。不同用户可以开发各自的BO,在BO里创建逻辑使其具有特定的业务功能,开发好后制作成用户包并进行发布。下载用户包给其他用户,其他用户安装BO包后,在上层应用(需要使用该BO服务的应用)里导入发布好的BO,即导入特定的业务功能进行使用。 例如,设备BO,为上层应用提供对设备的统一语义,对设备自身能力进行抽象封装,不包含对设备的运营运维管理能力。告警BO,对园区的所有告警提供统一语义,从各个子系统和上层应用获取告警数据,统一模型统一展现。GIS服务BO,提供对GIS子系统的租户管理、地图管理、位置服务接口的封装和标准化接口。您可以基于设备BO、告警BO以及GIS服务BO等多种BO资产,创建智能烟雾感应应用,完成设备数据的接入、处理分析以及告警监控功能。 父主题: 服务组件(BO)
  • 如何通过脚本控制接口访问权限 AstroZero提供了示例自定义接口前置脚本,可以仿造示例代码进行脚本的编写。 图7 创建示例自定义接口前置脚本 您可以在自定义接口前置脚本中进行自定义的权限校验,并根据校验结果返回相应的result值。 export class Output { @action.param({ type: "Number"}) result: decimal.Decimal;} const PASS = decimal.newWithExponent(1, 0);const BANNED = decimal.newWithExponent(0, 0);const FALLBACK = decimal.newWithExponent(-1, 0); 自定义接口前置脚本输出参数result含义如下: PASS--{"result":1}:校验通过,直接放行。 BANNED--{"result":0}:校验不通过,无法调用。 FALLBACK--{"result":-1}:校验通过,但还需要进行后续权限校验。 开发自定义接口前置脚本时,出参可按照示例自定义接口前置脚本代码中的表达式也可自行定义,但必须确保出参为“-1”、“0”和“1”中的某一值,否则作为校验不通过处理。 单击左下角的“服务”,在服务管理页面,单击“编辑”,将校验方式改为“与脚本绑定”,在“前置处理”中选择相应的自定义接口前置脚本。 前置处理:一般是授权处理脚本,在访问自定义接口前,需要进行授权处理。 后置处理:一般是敏感错误信息或者统计日志处理脚本,后置脚本没有返回参数,无论执行成功或失败都不影响自定义接口的请求处理流程。 图8 自定义访问控制 图9 绑定自定义接口前置脚本
  • 如何调用第三方接口 在使用AstroZero时,通常会调用第三方系统接口,进行数据交互。针对常见Rest和SOAP协议,AstroZero封装了Rest服务连接器和SOAP服务连接器。使用这两种连接器,可方便快捷的调用第三方接口,实现对第三方系统的数据增加、删除、修改和查找。 使用Rest服务调用Rest协议接口:当系统需要调用第三方提供的Rest协议接口时,可以通过配置Rest Service来实现。Rest Service是第三方系统提供的Rest服务,是一组模块化的Rest接口(Rest Action),通过配置第三方提供的Rest服务的URL进行调用。Action是对第三方接口的一个元数据描述,将第三方接口转换成AstroZero可识别的定义,方便AstroZero调用第三方接口。 使用SOAP服务调用SOAP协议接口:当系统需要调用第三方提供的SOAP协议接口时,可以通过配置SOAP Service来实现。SOAP Service是第三方系统提供的Soap服务,是一组模块化的SOAP接口(SOAP Action),通过配置第三方提供的SOAP服务的URL进行调用。Action是对第三方接口的一个元数据描述,将第三方接口转换成AstroZero可识别的定义,方便AstroZero调用第三方接口。 用户可通过第三方提供的WSDL文件手工创建SOAP Service,也可以直接导入第三方提供的WSDL文件创建SOAP Service。 调用第三方接口前,需要第三方系统提供符合Rest和SOAP协议规范的API。 父主题: 集成开发
  • 实现会签 在配置用户任务时,可以选择“或签”或“会签”两种审批类型。 图1 审批类型 或签:任一个分配人均可审批:只需要接收人中的某一用户完成了审批,即可推动任务流程,走向下一个任务。 会签:每个分配人都需要审批:需要接收人中的用户群体,满足设置的审批条件,才可推动任务流程,走向下一个任务。 通过并行审批,可以快速的实现会签功能。可以将结果触发方式选择为“等待所有投票完成触发投票结果”,在这种投票触发方式下,将需要所有被分配了当前任务的用户完成相应的任务后才能推动工作流流程,即实现了会签功能。 父主题: 深入了解用户任务
  • 调试过程 单击页面上方的,输入参数后单击“运行”,运行服务编排。 在“输入参数”中,输入如下参数: { "ownerId":"123", "limit":3, "offset":1} 检查输出页签的结果,是否符合预期。 输出如下: { "interviewId": "002N000000P4ApgMJOM4", "outputs": { "resource": [ { "ownerId": "123", "resourceName": "Folder01", "status": "Waiting", "type": "Folder" }, { "ownerId": "123", "resourceName": "File02", "status": "Waiting", "type": "File" }, { "ownerId": "123", "resourceName": "Folder02", "status": "Waiting", "type": "Folder" } ], "totalCount": 100 }} 单击服务编排编辑器页面右上方的“跟踪”,打开“日志跟踪器”页面。 在“日志跟踪器”页面,可查看服务编排执行的每一步的详细信息。 图10 查看日志详情 单击页面上方的,启用服务编排。
  • 操作步骤 参考如何创建服务编排中操作,创建一个服务编排,标签和名称为GetResourveListFlow。 图1 创建服务编排GetResourveListFlow 创建该服务编排的入参和出参变量。 由于该服务编排封装的是“ResourceListScript”脚本,所以该服务编排的入参和出参的字段类型和字段名与“ResourceListScript”脚本保持一致。 表5 服务编排变量 变量类型 参数名 Data Type Input/Output Type 普通变量Variable ownerId text Input Only limit number Input Only offset number Input Only totalCount number Output Only 结构体变量Struct resource struct Output Only 在服务编排编辑器页面右侧,选择,在私有结构体页面单击“新增”。 创建输出参数结构体类型变量“resource”前,首先需要创建私有结构体类型。 图2 添加私有结构体类型 设置页面参数。 在“基本信息”中,输入结构体名字、描述信息。 在“结构体成员”中,设置自定义成员变量,包括设置成员变量的名称、数据类型、是否必填、是否是集合、描述信息等。单击“新增”,可增加成员变量。成员变量需要和“ResourceListScript”脚本中定义的出参“resource”成员变量(参见表4)保持一致。 创建私有结构体后,即可创建私有结构体变量。 图3 配置私有结构体 在服务编排编辑器页面右侧,选择,在全局上下文页面,单击“对象变量”后的加号。 图4 单击对象变量后的加号 选择“私有结构体”,设置页面参数。 图5 配置私有结构体变量 表6 私有结构体变量参数说明 参数 参数说明 名称 结构体的变量名称,与“ResourceListScript”脚本中定义的出参命名保持一致。 本示例设置为resource。 私有结构体 结构体变量类型。 本示例选择刚创建的结构体类型名称“resourcestruct”。 默认值 变量的默认取值。 本示例不用配置。 描述 变量的描述说明,建议设置为该变量的作用。 是否为数组 是否为数组型变量,即集合变量。 本示例请勾选。 在服务编排编辑器页面右侧,选择,在全局上下文页面,单击“变量”后的加号。 单击新增变量后的“...”,选择“设置”。 图6 设置变量 配置普通变量“ownerId”。 图7 配置变量 表7 普通变量参数说明 参数 参数说明 名称 新建变量的名称。 本示例设置为ownerId。 数据类型 变量的数据类型。 默认值 变量的默认取值。 本示例不用配置。 描述 新增变量的描述说明,建议设置为变量的作用。 是否为数组 是否为数组型变量即集合变量。 本示例不用勾选。 参考上述操作,创建表5中其他普通变量。 在服务编排编辑器页面右侧,选择,按照表5从全局上下文页面中拖拽参数到相应的入参和出参区域,设置服务编排的入参和出参。 图8 设置服务编排的入参和出参 拖拽“基本”下的“脚本”图元至画布中。 单击,如图9所示,设置页面参数。 将服务编排中的变量赋值给脚本中的输入参数,脚本中的输出参数赋值给服务编排中的变量。 图9 配置脚本 表8 脚本配置参数说明 参数 参数说明 脚本 调用的脚本名称,选择“命名空间_ResourceListScript”。 只有在启用状态下同一应用工程内的脚本,才能被服务编排调用。 输入参数/目标 脚本的输入参数名称,直接在下拉框中选择。 输入参数/源 服务编排中的变量,为目标赋值。 请从“全局上下文”中,拖拽之前创建的服务编排输入变量。 输出参数/源 脚本的输出参数名称,直接在下拉框中选择。 输出参数/目标 服务编排中的变量,脚本中的输出参数赋值给服务编排中的变量,请从“全局上下文”中拖拽之前创建的服务编排输出变量。 若有多个输入参数或者输出参数,单击“新增行”,进行添加。 连接所有元素。 单击页面上方的,保存服务编排。
  • 前提条件 已创建名为“Approved Resource”的Object,用于存储资源数据,该对象中需要包含如下字段。 表2 Approved Resource对象说明 字段标签 字段名称 (系统自动生成) 字段类型 取值 读写权限 是否加入界面布局 含义 ownerId ownerId__CST 文本 长度:255 全选 不勾选 资源拥有者ID ResourceName ResourceName__CST 文本 长度:255 全选 不勾选 资源名称 Type Type__CST 选项列表 枚举值如下: File Folder 全选 不勾选 资源类型 SubmitDate SubmitDate__CST 日期/时间 不涉及 全选 不勾选 资源提交时间 ApproveDate ApproveDate__CST 日期/时间 不涉及 全选 不勾选 资源审批时间 Status Status__CST 选项列表 枚举值如下: Waiting Submitted Approved 全选 不勾选 审批状态 已创建场景描述中的脚本。该脚本根据对象的数据生成资源列表数据,用于前台数据呈现。示例脚本为“ResourceListScript.zip”,单击下载链接可获取该脚本包。该脚本中定义的入参和出参说明,如表3和表4所示。 表3 入参说明 参数 参数类型 说明 ownerId string 资源拥有者ID。 limit number 每页展示的资源条数。 offset number 每页展示第一条资源的偏移量,即从offset+1条资源开始展示。 表4 出参说明 参数 参数类型 说明 resource struct 返回资源数组集合。 approveDate:审批时间,若该记录已审批则返回审批时间。 ownerId:资源拥有者Id。 resourceName:资源名称。 status:资源状态。 Waiting:记录未提交。 Submitted:记录已提交未审批。 Approved:记录已审批。 submitDate:资源提交时间。 type:资源类型。 totalCount number 资源总数(固定100)。
  • 在标准页面中与BPM交互 在标准页面的自定义事件中,内置了一些交互的API : 获取变量:context.$bpm.loadVariables(): Promise 提交任务、流程: context.$bpm.submitTask(variables: {[key: string]: any}): Promise 修改变量: context.$bpm.putVariables(variables: {[key: string]: any}): Promise 图2 在标准页面的事件代码中与BPM交互
  • 操作步骤 参考如何登录经典应用设计器中操作,登录经典版应用设计器。 打开某个BPM,单击编辑器上方的“运行”按钮,运行BPM,模拟与BPM的交互。 交互完成后,需要确认步骤操作的结果是否符合预期。 单击BPM编辑器页面右上方的“跟踪”,打开“日志跟踪器”页面。 在“日志跟踪器”页面,查看BPM执行的每一步的详细信息,例如查看变量传递是否符合预期。 图1 日志跟踪器 日志跟踪器界面分为两部分,即搜索框和流程日志跟踪记录表格。 搜索框 图2 搜索框 流程切换:用户可以根据时间筛选曾启动过的流程,每个流程的跟踪信息只保存半个小时。 搜索框:根据流程跟踪信息进行搜索。 下载:将当前完整的流程日志,以文件形式下载到本地,便于保存或查看。 表格:日志跟踪器表格记录了BPM流程流转的日志。其中包含时间戳、所属模块的类型、所属模块的名字、具体操作的图元类型、图元名称以及该操作的描述。模块在执行子流程时,会切换为子流程的类型和名称。 若不符合预期,则重新返回BPM修改,重复 2 。
  • 常见错误 变量赋值错误? 请检查输入参数的类型与定义是否匹配,必要时进行类型转换。 变量结构错误? 请检查输入参数的结构(属性名、取值类型)与目标结构是否一致。当出现大段JSON报错信息时,可借助JSON Viewer或在线JSON格式化工具进行对比。 没有走指定分支?流程意外终止? 由于流程的结束是隐含的,当没有下一步的内容时流程即结束。因此,在排他网关里如果没有设置默认分支,当所有分支的条件都不满足时,流程即进入结束状态。
  • 开发一个业务场景脚本实例 本小节创建的业务场景脚本相对于开发一个简单脚本实例,具有更为复杂的业务逻辑。 本脚本实例实现的业务场景:根据对象的数据生成资源列表数据,用于前台数据呈现,启用本脚本后,可实现数据导入模板使用。 创建脚本之前,需要先创建脚本中操作的对象ApprovedResource,其字段如表1所示。 表1 对象说明 字段标签 字段名称 字段类型 取值 读写权限 含义 ownerId ownerId 文本 长度:255 全选 资源拥有者ID ResourceName ResourceName 文本 长度:255 全选 资源名称 Type Type 选项列表 枚举值如下: File Folder 全选 资源类型 SubmitDate SubmitDate 日期/时间 不涉及 全选 资源提交时间 ApproveDate ApproveDate 日期/时间 不涉及 全选 资源审批时间 Status Status 选项列表 枚举值如下: Waiting Submitted Approved 全选 审批状态
共100000条