华为云用户手册

  • 用户任务 用户任务用来表示,业务流程中由用户参与完成的工作。当引擎处理到该节点时,给指定的用户(参与者)或者一组用户(如某泳道的工作队列)创建待处理的任务项,等待用户的处理。 用户任务配置:在用户任务配置界面,配置任务接收人和活动界面。 图1 用户任务配置页面 任务标题:显示在任务界面的标题。 任务描述:显示在任务界面的任务描述。 优先级:该任务的优先级。 渲染类型:用户处理的界面,可以是标准页面、标准表单或高级页面。当配置为标准表单时,需要配置用户可执行的动作(例如同意或拒绝)。 类型:待处理任务的用户类型。 当前泳道:可配置为“当前泳道角色的任意成员”或者“当前泳道中的上一个任务被分配的人员”。 流程发起人的主管:当配置为该类型时,需要配置“部门经理层级”。 名称和表达式:当配置为该类型时,需要配置“参与者”。 基于规则:当配置为该类型时,需要配置具体的“规则”。 参与者:当类型为“名称和表达式”时,该参数才会显示。参与者类型可以是“用户”、“组”或者“表达式”。当“参与者”配置为“表达式”时,实际是一个变量。在“取值”中,可设置变量的值,变量值支持以下几种: 用户的用户名或用户ID,其中用户名前需要加“user:”前缀。 业务用户的用户名或业务用户ID,其中业务用户名前需要加“puser:”前缀。 公共组名称或者公共组ID,其中公共组名称前需要加“group:”前缀。 角色名称或者角色ID,其中角色名称前需要加“role:”前缀。 例如,分配任务接受者为用户名为“PortalUser1”的业务用户、用户名为“User1”的用户、用户ID为“10XX000000XXXXXXX”的用户、公共组名称为“group1”和角色名称为“role1”的合集,则取值为“"puser:PortalUser1,user:User1,10XX000000XXXXXXX,group:group1,role:role1"”。多个取值之间用英文逗号“,”分隔,取值外加英文双引号。 规则:接收人满足的规则。类型为“基于规则”时,该参数才会显示。 审批类型:审批的类型。 若选择了“或签:任一个分配人均可审批”,则只需要接收人中的某一用户完成了审批,即可推动任务流程,走向下一个任务。 若选择了“会签:每个分配人都需要审批”,则需要接收人中的用户群体满足您设置的审批条件才可推动任务流程,走向下一个任务。 如果审批人中包含群组,则群组中任意一人审批即认为该群组已经审批。当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 勾选,表示如果审批人中包含群组,则群组中任意一人第一个审批即认为该群组已经审批,不需要其他用户再进行审批,该群组只算一个有效审批人数。 不勾,选表示如果审批人中包含群组,则群组中每个人都需要审批,都计算在有效审批人数内。 投票结果门槛:该参数取值表示百分比,如果达到设置的百分比,审批结果中最高的得票结果将覆盖 “$BP.TaskOutcome”系统变量,即将执行最高得票的审批结果。 默认结果:审批百分比(已审批的人数/总的有效审批人数)未达到“投票结果门槛”百分比时,默认的审批结果。当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 结果触发方式:当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 当最小百分比满足时,立即触发投票结果。 等待所有投票完成,触发投票结果。 候选动作:设定一些候选的动作为默认审批结果。 当存在以下动作时立即终止任务:当存设定的某个或者某些动作时立即终止任务。 自动审批:该用户任务是否自动审批。 流程触发人自动通过:通过接收人“类型”和“参与者”已设置用户任务的接收人后,若勾选自动审批中“流程触发人自动通过”,接收人正好是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:通过接收人“类型”和“参与者”已设置用户任务的接收人后,若勾选自动审批中“已审批过该流程的审批人自动通过”,接收人在当前工作流实例中已审批过其他用户任务,则该用户任务会被自动审批。 当前自动审批功能,只支持接收人为某一用户,可使用表达式的形式指派某一具体用户,使用自动审批功能。 自动审批时默认选择的动作:勾选自动审批时,可设置自动审批默认选择的动作。 动作配置:为该用户任务配置前置或者后置动作。 前置动作:流程执行该用户任务前执行的动作。 触发条件:触发该动作的条件表达式。 动作类型:动作的类型。 通知经理:发邮件通知经理。当选择该类型时,需要配置“邮件模板”。 通知分配人:发邮件通知任务分配人。当选择该类型时,需要配置“邮件模板”。 调用服务编排:调用服务编排。当选择该类型时,需要配置具体的服务编排以及输入参数。 调用脚本:调用脚本。当选择该类型时,需要配置具体的脚本。 发送事件:发送某一事件。当选择该类型时,需要配置具体的事件。 转移:将该用户任务转移给其他用户或者工作队列的用户处理。当选择该类型时,需要配置“接收者类型”以及“接收者”。 设置状态:设置该用户任务的状态。当选择该类型时,需要配置具体的状态。 完成任务:完成某一任务,超期会自动完成任务。 后置动作:流程执行该用户任务后,执行的动作。请参考“前置动作”进行配置。 数据映射:对该用户任务的输入输出参数,进行数据映射。 SLA:为用户任务设置定时器,时间逾期可增加紧急程度并执行相应动作。 图2 启用SLA定期器 开始时间:定时器的开始时间。 任务创建后 由变量指定:通过指定时间变量,来确定开始时间。 由表达式指定:开始时间支持表达式,例如支持特定时间的相对时间,设置为“STRING2TIME('yyyy-MM-dd hh:mm:ss.S', {!variable1})”。动态指定时间的相对时间,设置为“TIMEADD({!$Flow.CurrentDateTime}, 100)”。 目标期限:任务在目标期限内且即将过期时,满足触发条件后触发一个指定的动作。 截止限期:任务过期,满足触发条件后触发一个指定的动作。 紧急程度:定时器的紧急程度。 动作:时间逾期后执行的相应动作。单击“添加”新增动作。 触发条件:触发该动作的条件表达式。 动作类型:动作的类型。 通知经理:发邮件通知经理。当选择该类型时,需要配置“邮件模板”。 通知分配人:发邮件通知任务分配人。当选择该类型时,需要配置“邮件模板”。 调用服务编排:调用服务编排。当选择该类型时,需要配置具体的服务编排以及输入参数。 调用脚本:调用脚本。当选择该类型时,需要配置具体的脚本。 发送事件:发送某一事件。当选择该类型时,需要配置具体的事件。 转移:将该用户任务转移给其他用户或者工作队列的用户处理。当选择该类型时,需要配置“接收者类型”以及“接收者”。 设置状态:设置该用户任务的状态。当选择该类型时,需要配置具体的状态。 完成任务:完成某一任务,超期会自动完成任务。
  • 记录查询 “记录查询”图元用于根据条件查询平台对象的实例记录,类似于数据库中的SELECT命令。系统提供了,以下两种模式查询对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,并设置条件以及选择排序方式,即可实现根据条件和排序方式,将查询结果保存在对象变量中。例如,如下图所示,根据条件查询对象数据,并将查询结果保存在对象变量数组“account”中。 图5 对象模式查询 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,根据条件查询符合条件的对象记录,并赋值到设置的变量上。 图6 条件模式查询 对象:查询的具体对象名。 剔重:若查询记录有重复值,是否需要删掉重复记录只保留一条记录。 条件:选中对象后,该条件区域“字段”列会出现该对象的字段。单击“新增行”,可设置查询数据的条件。 在“字段”中选择要进行判断的对象字段,在“比较符”中选择相应的比较符,“值”则可从全局上下文拖拽变量或者直接输入“{!变量名}”。 排序字段/顺序:使查询结果根据某个字段进行升序或者降序排序。 记录行的偏移量:分页,跳过前n条记录,从第n+1条记录开始。 记录行的最大数目:分页,每页最多显示的记录数。 记录的总行数存入变量:限定查询出来的总记录数,存入变量中。 (输出)源/目标:输出的结果。其中,“源”为需要查询的字段,查询结果需要保存到设置的变量中,“目标”为设置的变量。 无记录时配置空值:当根据条件查询无记录时,则变量为空值。
  • 记录删除 “记录删除”图元能够删除平台对象的实例记录,类似于数据库中的DELETE命令。系统提供了,以下两种模式删除对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的记录ID删除对应的对象记录。 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,根据条件删除符合条件的对象记录。
  • 记录更新 “记录更新”图元用于更新平台对象的实例记录,类似于数据库中的UPDATE命令。系统提供以下两种模式更新对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,即可根据对象变量中的记录ID将对象变量更新到数据库中,更新的值来源于对象变量中的值。如下图所示,根据对象变量数组“account”中的记录ID,将对象变量中的值更新到数据库中。 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,在赋值中设置需要更新的目标字段及更新值,最后根据条件查找符合条件的对象记录并将赋值中的值更新到数据库中。
  • 调用脚本 当流程到达“调用脚本”任务时,系统自动执行脚本,执行完成后继续执行后续路线。 使用该图元时,需要选择具体调用的脚本,配置输入输出参数。 图7 调用脚本配置页面 工作流中只允许调用当前应用工程下的资源(例如脚本、服务编排),即调用脚本中可供选择的脚本和该工作流都处于同一应用下。 例如,工作流A中需要调用脚本B,请确保A和B处于同一应用中。若需要调用的资源不在同一应用中,请在工作流A所在的应用中新建脚本B,或选择“使用已有脚本”导入脚本B。再在工作流A中,使用“调用脚本”图元调用该脚本。 图8 使用已有脚本
  • 记录创建 “记录创建”图元用于新增平台对象的实例记录,类似于数据库中的INSERT INTO命令。系统提供了,以下两种模式新增对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的值,创建实例记录。 图3 对象模式创建 条件模式:需要先指定对象并为对象的字段赋值,来创建记录。例如,如下图所示,为“Account”对象新增实例记录,在变量“id”中保存新建的记录ID。 图4 条件模式创建
  • 用户和业务用户 在进行任务分配时,低代码平台提供了两种用户可以进行任务的分配,分别是用户和业务用户。 用户(User):是租户帐号或子帐号开发者,用来管理应用和业务用户。购买AppCube的租户帐号默认拥有所有权限,是管理员用户,可添加子帐号并为其配置需要的权限。 业务用户(即PortalUser):是访问在AppCube中开发的业务应用的用户帐号,即业务应用的使用者。 用户可以在工作流中通过用户任务图元,在用户任务配置页面的“接收人”模块,通过以下三种方式将任务分配给用户或业务用户。 当前泳道 流程发起人的主管 名称和表达式 基于规则 图1 接收人类型
  • 当前泳道 “用户任务”图元接收人类型设置为“当前泳道”,将泳道和工作队列绑定,则处于该泳道的用户任务图元,由该泳道对应工作队列中的成员去处理。工作队列中的成员可以是多个用户、业务用户、公共组中成员、角色或带有下属的角色中成员。配置过程如下: 参考管理队列中操作,创建工作队列,将处理任务的用户或业务用户加入工作队列中。 例如,创建派单员工作队列“Dispatcher”。 图2 创建工作队列 如图3所示,“用户任务”的接收人类型选择“当前泳道”,用户可以将任务分配给“当前泳道角色的任意成员”或“当前泳道中的上一个任务被分配的人员”。 图3 用户任务中设置当前泳道接收 如图4所示,单击左侧泳道区域,在“泳道配置”中设置派单员工作队列“Dispatcher”。 处于该泳道的用户任务图元,则由工作队列“Dispatcher”中的成员去处理。 图4 设置泳道
  • 基于规则 “用户任务”图元接收人类型设置为“基于规则”时,可以将全局上下文中的变量拖入到条件输入框中。当条件输入框中的变量或条件为true时,将会把任务分配给选择框中配置的用户。用户可以通过以下方式,配置接收任务的用户: 当前用户:把任务分配给,执行当前用户任务的用户。 上级经理:把任务分配给,执行当前用户任务的用户的上级经理。 特定的用户:把任务分配给,选择框中选择的用户。 队列:把任务分配给,选择框中选择的工作队列中的所有用户。 用户属性:根据用户对象的某一字段,进行任务的分配。 变量:根据输入框中的用户ID或用户名,将任务分配给相应的用户。 图6 基于规则
  • 名称和表达式 “用户任务”图元接收人类型设置为“名称和表达式”时,可以通过“表达式”、“用户”和“组”三种方式分配该任务的参与者。这时,泳道中的工作队列配置不起作用。 图5 名称和表达式 用户:在“取值”中,选择接收该任务的用户,不包括业务用户。 组:在“取值”中选择公共组,则该任务由公共组的成员去处理。公共组的成员可以是用户、业务用户、其他公共组的成员、角色或带有下属的角色中成员。如何创建工作组,请参见管理公共组。 表达式:当将“参与者”配置为“表达式”时,实际是一个变量。在“取值”中,可设置变量的值,变量值支持以下几种: 用户的用户名或用户ID,其中用户名前需要加“user:”前缀。 业务用户的用户名或业务用户ID,其中业务用户名前需要加“puser:”前缀。 公共组名称或者公共组ID,其中公共组名称前需要加“group:”前缀。 角色名称或者角色ID,其中角色名称前需要加“role:”前缀。 例如,分配任务接受者为用户名为“PortalUser1”的业务用户、用户名为“User1”的用户、用户ID为“10XX000000XXXXXXX”的用户、公共组名称为“group1”和角色名称为“role1”的合集,则取值为“"puser:PortalUser1,user:User1,10XX000000XXXXXXX,group:group1,role:role1"”。多个取值之间用英文逗号“,”分隔,取值外加英文双引号。
  • 如何定义API接口 登录AppCube服务控制台。 在实例页面,单击“进入首页”。 在应用开发页面的左侧导航栏中,选择“应用”。 在低代码应用列表中,单击应用后的“编辑”,选择“体验新版设计器”,进入新版应用设计器。 图1 进入新版应用设计器 在左侧导航栏中,选择“集成 ”。 也可以在“开始”页面,直接单击“新建开放接口”。 单击开放接口后的“+”,设置开放接口参数,单击“保存”。 标签:新建API接口的标签。 操作名称:新建API接口的操作名称。 版本:API接口的版本,格式为“x.y.z”。 URL:API接口路径, 固定以 /service/{命名空间}__{应用名}/{版本} 开头, 后面接API的具体路径。 内容类型:请求中的body类型。 其中“multipart/form-data”和“binary-data”用于文件上传接口,选择该内容类型,只能调用post类型的脚本。 分类:API接口所属的分类。 描述:自定义API接口的描述信息。 允许匿名访问:是否可以匿名访问运行环境中该API接口。 勾选表示允许匿名访问,通过运行环境子域名访问此接口时,如果无有效的Token认证信息,则以匿名用户身份继续访问此接口,且不需要做CSRF校验。匿名用户的权限为“Anonymous User Profile”,请确保该权限具备访问该接口的业务权限凭证或者相关资源权限。例如,当该接口有配置业务权限凭证时,给“Anonymous User Profile”权限添加相应业务权限凭证,即可通过运行环境子域名匿名访问该接口。 需要支持匿名访问自定义接口的帐号,必须要设置运行环境子域名。 带有合法认证信息来访问允许匿名访问的自定义接口时,优先以合法认证的身份权限来访问。 匿名用户身份访问自定义接口,不需要做CSRF校验。 不论以什么方式来访问, 认证身份后做的权限校验保持一致。如果配置了业务权限凭证,还是会查看用户权限是否配置相应业务权限凭证。 例如:登录业务应用接口“login”的URL为“/service/trq1__MyApp/1.0.0/login”,运行环境子域名为“test.XXX.com”,期望可匿名访问该自定义接口,则配置接口时请勾选“允许匿名访问”,且“Anonymous User Profile”权限配置了该接口的业务权限凭证,则匿名用户通过“https://test.XXX.com/service/trq1__MyApp/1.0.0/login”即可访问该接口。 类型:选择资源类型,只有服务编排类型的接口能够在服务编排中被调用,其他类型接口只能通过API的形式进行调用。 服务编排:定义URL调用的接口类型是服务编排。 脚本:定义URL调用的接口类型是脚本。 对象:定义URL是操作对象数据,包括对象数据的增删改查。 自定义响应:是否需要格式化调用,该URL后返回的响应消息。如果勾选,表示对响应消息进行格式化,删除resCode、resMsg、result外层信息,只透传返回的消息。 不勾选“自定义响应”,返回如下响应消息: { "resCode": "0", "resMsg": "成功", "result": [ { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2" } ]} 勾选“自定义响应”后,只返回如下响应消息: { "equipments": [ { "createdBy": "aaa", "createdBy.__objectType": "User" }, { "createdBy": "aaa", "createdBy.__objectType": "User" } ], "total": "2"} 资源:根据类型选择需要绑定的资源,如脚本,服务编排或操作的对象名称。 如果找不到需要绑定的服务编排或脚本,请检查服务编排或脚本是否启用,如果没有启用请单击按钮启用。 对象操作:“类型”选择“对象”时,该参数才会显示。 Insert Record:新增对象数据。 Update or Insert Record:更新或者新增对象数据。 Update By ID:按记录ID更新对象数据。 Delete By ID:按记录ID删除对象数据。 Query By ID:按记录ID查询对象数据。 Update By Condition:按条件更新对象数据。 Delete By Condition:按条件删除对象数据。 Query By Condition:按条件查询对象数据。 方法:API接口的HTTP方法。 GET:请求服务器返回指定资源。 PUT:请求服务器更新指定资源。 POST:请求服务器新增资源或执行特殊操作。 DELETE:请求服务器删除指定资源。 PATCH:请求服务器更新资源的部分内容。当资源不存在的时候,PATCH可能会去创建一个新的资源。 返回“集成”页面,单击已创建接口后的,选择“查看”,进入接口预览页面。 单击接口后的,可查看定义的API信息。 单击“测试一下”,可模拟API接口调用。 图2 API接口请求参数信息 图3 API接口返回参数信息 API接口的请求参数和返回消息体,为绑定的资源(如脚本,服务编排等)所配置的入参和出参。
  • 支持自动审批 AppCube支持用户任务自动审批功能,例如设置“主管审核”任务自动审批。在用户任务配置界面,指定该任务具体某一接收人,可使用表达式的形式将任务指派某一用户,在自动审批中进行设置。 流程触发人自动通过:若勾选该选项,任务接收人是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:若勾选该选项,任务接收人在当前工作流实例中已审批过其他用户任务,则该用户任务会被自动审批。 图1 自动审批设置 当任务接收人设置为“当前泳道”对应的工作队列或用户组时,将无法使用自动审批功能。只有任务接收人设置为某一用户时,才可进行自动审批。 父主题: 深入了解用户任务
  • 如何调用第三方接口 在使用AppCube时,通常会调用第三方系统接口,进行数据交互。针对常见Rest和SOAP协议,AppCube封装了Rest服务连接器和SOAP服务连接器。使用这两种连接器,可方便快捷的调用第三方接口,实现对第三方系统的数据增加、删除、修改和查找。 使用Rest服务调用Rest协议接口:当系统需要调用第三方提供的Rest协议接口时,可以通过配置Rest Service来实现。Rest Service是第三方系统提供的Rest服务,是一组模块化的Rest接口(Rest Action),通过配置第三方提供的Rest服务的URL进行调用。Action是对第三方接口的一个元数据描述,将第三方接口转换成AppCube可识别的定义,方便AppCube调用第三方接口。 使用SOAP服务调用SOAP协议接口:当系统需要调用第三方提供的SOAP协议接口时,可以通过配置SOAP Service来实现。SOAP Service是第三方系统提供的Soap服务,是一组模块化的SOAP接口(SOAP Action),通过配置第三方提供的SOAP服务的URL进行调用。Action是对第三方接口的一个元数据描述,将第三方接口转换成AppCube可识别的定义,方便AppCube调用第三方接口。 用户可通过第三方提供的WSDL文件手工创建SOAP Service,也可以直接导入第三方提供的WSDL文件创建SOAP Service。 调用第三方接口前,需要第三方系统提供符合Rest和SOAP协议规范的API。 父主题: 集成开发
  • 操作步骤 参考如何登录新版应用设计器中操作,登录新版应用设计器。 在左侧导航栏中,选择“集成”。 在“连接器 ”中,单击“连接器实例”,进入连接器实例页面。 在类型中,选择“自定义连接器”,进入自定义连接器页面。 在Rest Service列表中,选择Rest Action所在的REST Service,在“动作”页签,单击“新建”。 设置动作的基本信息,单击“下一步”。 标签:新建Rest Action的标签名。 名称:Rest Action在系统中的唯一标识。 URL:第三方提供的,Rest协议服务的URL地址。 方法:选择Rest的方法。 GET:获取资源。 POST:创建资源。 PUT:更新资源。 PATCH:用于更新资源的部分内容。 DELETE:删除资源。 OPTIONS:用于获取当前URL所支持的方法。 方法选择“PUT”或“POST”时,可自定义输入消息体参数。当第三方入参为数组或非JSON类型时,需要在定义输入参数设置为“键-值”形式。勾选后系统会引入一个通用的入参变量“$in”,将数组或非JSON类型的变量存到“$in”中,变成“键-值”格式传入到Rest Action中。 内容类型:输入内容的类型,该值取决于第三方支持哪种类型,是在HTTP标准协议中定义的。 返回类型:取值为“application/json”时,表示会忽略第三方实际返回的“content-type”,使用第三方配置的“content-type”来解析第三方返回的内容。 如果该参数取值为空,表示使用http返回中的“content-type”,来解析第三方返回的内容。 超时时间:当超出该参数设定的时间,第三方没有返回结果时,系统报错。 日期格式:若该Rest服务输入参数包括Date类型且有固定的要求格式,则必须进行配置。 请确保AppCube提供的输入参数,符合第三方要求。例如,该Rest服务存在Date类型输入参数,且要求格式为“YYYY-MM-DD”,则此处必须配置为“YYYY-MM-DD”。 日期/时间格式:若该Rest服务输入参数包括DateTime类型且有固定的要求格式,则必须进行配置。 请确保AppCube提供的输入参数,符合第三方要求。例如,该Rest服务存在DateTime类型输入参数,且要求格式为“YYYY-MM-DD hh:mm:ss”,则此处必须配置为“YYYY-MM-DD hh:mm:ss”。 描述:Rest Action的描述信息。 设置消息头入参,单击“下一步”。 若此接口没有消息头输入参数,则不需要配置参数,请删除第一行参数。若有消息头输入参数,且有多个,请单击“新增”。若之前创建Rest Service时,有定义消息头参数,可选择“从模板中插入”,并定义输入参数的基本信息。 图1 消息头入参配置页面 标签:消息头输入参数的标签名。 名称:消息头输入参数在系统中的唯一标识。 数据类型:消息头输入参数的数据类型。 数字:数字类型。 字符串:字符串类型。 布尔值:布尔类型,取值为“true”和“false”。 默认值:参数的默认取值。 描述:消息头输入参数的描述信息。 默认:参数是否有默认值。 必填:参数是否必填。 操作:单击或,可对Header输入参数进行添加或删除操作。 设置输入参数,单击“下一步”。 若此接口没有输入参数,则不需要配置参数,删除第一行参数。若有输入参数,且有多个,请单击“新增”,并定义输入参数的基本信息。 页面上方“消息体格式”参数使用说明:当方法为“PUT”或“POST”时,该参数才会显示。当第三方入参为数组类型或者非JSON类型时,需要将“输入消息体方式”设置为“值”形式。 例如,若设置“消息体格式”为“键-值”,假设定义了输入参数A、B、C,调用时消息体中传递了参数 {A: 1,B:2, C:3} ,此时被调用方收到的参数信息是 {A: 1,B:2, C:3}。若设置“输入消息体方式”为“值”,此时默认使用$in输入参数定义,调用时消息体中传递了参数{$in: [1,2,3] },此时被调用方收到的参数信息为[1,2,3]。 图2 输入参数配置页面 标签:输入参数的标签名。 名称:输入参数在系统中的唯一标识。 参数位置:设置输入参数的位置。 数据类型:设置输入参数的数据类型。 日期:日期类型,精度到天。 日期/时间:时间类型,精度到秒。 数字:数字类型。 字符串:字符串类型。 布尔值:布尔类型,取值为“true”和“false”。 全局结构体 键值对(Map):Map集合类型。 对象:对象标识类型。 命名空间:输入参数所属的命名空间。 元数据名称:选择元数据的名称。 默认值:参数默认取值。 描述:输入参数的描述信息。 默认:参数是否有默认值。 必填:输入参数是否为必填。 集合:输入参数是否为数组型。 操作:单击或,可添加或删除输入参数。 设置输出参数,单击“保存”。 若此接口没有输出参数,则不需要配置参数,请删除第一行参数。若有输出参数,且有多个参数,请单击“+ 新增”,并定义输出参数的基本信息。 页面上方“消息体格式”参数使用说明:设置“输出消息体方式”为“值”后,系统会引入一个通用的出参变量“$out”,将body的内容存到“$out”中,作为出参。 例如,若设置“消息体格式”为“键-值”,假设定义了输出参数A、B、C,调用后返回消息体中传递了参数 {A: 1,B:2, C:3} ,此时调用方收到的参数信息是 {A: 1,B:2, C:3};若设置“输出消息体方式”为“值”,此时默认使用$out输出参数定义,调用业务接口返回消息体中传递了参数[1,2,3],此时调用方收到的参数信息为{$out:[1,2,3]}。 图3 输出参数配置页面 标签::设置输出参数的标签名。 名称:输出参数在系统中的唯一标识。 参数位置:设置输出参数的位置。 数据类型:输出参数的数据类型。 命名空间:输出参数所属的命名空间。 元数据名称:设置元数据的名称。 描述:输出参数的描述信息。 集合:输出参数是否为数组型。 操作:单击或,可添加或删除输出参数。 在动作页签,单击该Rest Action所在行的,启用Rest Action。 单击“导出”,可导出zip包,zip包中包括该服务的所有Rest接口。单击“导入”,可通过导入yaml文件,导入Rest Action。
  • OAuth鉴权模式 使用OAuth客户端模式鉴权,AppCube会根据填写的OAuth服务端地址、Client ID和Client Secret,在发送请求前,后台自动获取第三放服务端的access_token, 并在发送请求时携带此access_token,服务端根据携带的access_token进行鉴权。 登录新版应用设计器。 在左侧导航栏中,选择“集成”。 单击“连接器”中的“ 连接器实例”,进入连接器实例页面。 在新建或修改Rest服务时,设置鉴权信息。 图1 鉴权设置操作入口 图2 OAuth鉴权模式示例配置
  • HTTPS双向认证鉴权 HTTPS双向认证是客户端和服务端,相互验证对方证书的一种鉴权模式。在调用第三方服务时,AppCube会携带配置的客户端证书,证书需要向第三方服务申请。目前Rest服务支持配置P12和CRT格式的证书,其他格式需要通过keytool或openssl工具转换。 登录新版应用设计器。 在左侧导航栏中,选择“集成”。 单击“连接器”中的“ 连接器实例”,进入连接器实例页面。 在新建或修改Rest服务时,设置鉴权信息。 图5 HTTPS双向认证证书设置
  • 通过REST接口调用连接器 可以通过调用REST接口,完成表1中功能。如何调用接口,请参见连接器API。 表1 调用连接器 接口 说明 上传文件 将本地文件上传到存储中。使用该API上传文件,默认只会上传到连接器下配置的第一个桶中。待上传的文件可以是任何类型,如文本文件、图片、视频等。 下载文件 从存储中下载文件。 删除文件 从存储中删除无用的文件。 删除目录 从存储中删除某目录。如果目录下不为空,删除目录的同时也会删除该目录下文件。 列举目录下文件 列举存储中某目录下文件。 分段上传 对于较大文件上传,可以切分成段上传。用户可以在如下的应用场景内(但不仅限于此),使用分段上传的模式: 上传超过100MB大小的文件。 网络条件较差,和OBS等存储服务端之间的链接经常断开。 上传前无法确定将要上传文件的大小。 获取endpoint,即文件存储地址的前缀 endpoint为文件存储地址的前缀,该前缀加上传对象的路径,是实际访问对象的全路径。 分享Token 获取临时Token,用户只要使用该临时Token即可访问文件,不用再使用access-token进行鉴权。
  • 前提条件 使用OBS前,需要拥有一个华为云帐号或一个可用于访问OBS的IAM用户,即先注册华为云并实名认证、创建IAM用户、充值以及购买资源包,具体操作请参见使用OBS前需要做的准备工作。 获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对,具体操作请参见获取AK/SK。 已在华为OBS上,创建存储桶(例如“bing.testonly.1”),用于后续存储对象使用,具体操作请参见如何创建桶,请记录创建桶时选择的区域。
  • 测试场景下创建证书和私钥的操作方法 该方法创建的证书通常只适用于测试场景。 执行如下命令生成密钥文件tls.key。 openssl genrsa -out tls.key 2048 命令执行后将在当前目录生成一个tls.key的私钥文件。 生成的密钥格式必须为: ----BEGIN RSA PRIVATE KEY-----……………………………………………..-----END RSA PRIVATE KEY----- 用此私钥去签发生成自己的证书文件tls.crt。 openssl req -new -x509 -key tls.key -out tls.crt -days 3650 根据提示输入国家、省、市、公司、部门、申请人和邮箱,按回车键确认。 生成的证书格式必须为: -----BEGIN CERTIFICATE-----……………………………………………………………-----END CERTIFICATE-----
  • 在脚本中调用连接器 在脚本中,调用连接器实现与OCR的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图4 新建空白脚本 在脚本编辑器中,输入如下代码。 //导入该脚本所依赖的标准库文件。ocr是系统预置的标准库。import * as ocr from 'ocr'; let cli = ocr.newClient("OCR_Test");try { let url = "https://obs-XXXX.obs.cn-north-1.testXXXX.com:443/1.PNG?AccessKeyId=ZK87UUIONJF5ZHWBINUO&Expires=1556001233&Signature=DOwO6djb4Q3EBvCieQFaO3T2GKU%3D&x-obs-security-token=gQpjbi1ub3J0aC0xipYOeC2mcbefHh5I_aMr6DEWQ8-iFyxqatavdiFtYowH-lpJCcxeTynsV_4PTJe9QIx85mlDIDo3sU9PUv3hFtRjQORjGE2PqA4hEtozvMuWxXb5b6RKiFT37-z7NoI4R85XmlTmZGQ6OUZ92bercG5DWEBTDVd3I_UYuNGzF20q6S2COP__Z-uqkhhw8nATd3k6GaIfCqxjcOih_juHBBoM1ON74vpKxCl1sJxnEYbZfkf6FO_xuGaJD7-J7OzD8tsSmFf4jR1TqZFZzrPEc9bkd2bPr8pwOCdDp8Yy0EVauKDvtIXsvzFollOR0rUvZol1sIsQU0gVpFpZyIqYqG6C_qQfXmr5DQwXTsQyifKjXLSj2MbPs6FKLYqu7mj0NhxUVcK5EQh5Vl5x5VHvYGRwgWJL078oXVBKGnQnr05EDHcCiW-6Gris2mHBYdcNmuhJ1UwNekeumBc0S6_33yK-U8OGYLMpR6HnLooyFmtmnOBIIQIkzWfWUNM7nIdWWcPmozJcBZ8iyawE0Cxgz5Xf56hPi-YZda0d1Xu387GA8PBkEPVct1yo5nh2bmVfRH6z0zWzhN-vbFcIHsfYv776DDLKQdSH0Sn-8bHdvPLPd2QieBkgS6wfvTcKMeBA6PwwNBl0Xqds6vQPpSZe6cYyplNuJoY05VLd8tLZMy_bR8Dmf1kArQaSquBzw2eDCfJAazjA4wTnkbccr38k7eM%3D" let resp = cli.idCardWithURL(url, "front"); console.log(resp);} catch (e) { console.log("error: ", e)} 其中,ocr.newClient("OCR_Test")中,“OCR_Test”为连接器的名称,“url”取值是图片的URL, “front”表示识别的是身份证正面。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 不用设置输入参数,直接单击测试窗口右上角的。 在输出参数页签,检查是否识别出身份证上文字信息。 识别出身份证上的文字信息,表明成功调用连接器。 单击脚本编辑器页面上方的,启用脚本。
  • 背景信息 文字识别(Optical Character Recognition,简称OCR)以开放API的方式提供给用户,用户使用Python、Java等编程语言调用OCR服务API将图片识别成文字,帮助用户自动采集关键数据,打造智能化业务系统,提升业务效率。 在AppCube中,通过应用与华为OCR(Optical Character Recognition)对接,可实现图片或扫描件中文字识别功能。
  • 在脚本中调用连接器 在脚本中,调用连接器实现调用IEF的接口。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图4 新建空白脚本 在脚本编辑器中,输入如下代码。 import { Decimal } from 'decimal';import { Error } from 'error';import * as ief from 'ief';export class Input { @action.param({ type: "String", required: true, description: "type" }) project_id: string; // @action.param({ type: "String", required: true, description: "the operation value 2" }) // node_id: string;}export class Output { @action.param({ type: "Object", required: true }) result: Object;}export class Calculator { @action.method({ input: "Input", output: "Output", description: "do a operation" }) run(input: Input): Output { let output = new Output(); let cli = ief.newClient("ief_test"); output.result = cli.getProjectNode(input.project_id); //console.log(output.result); return output; }} 其中,ief.newClient("ief_test")中的“ief_test”为连接器的名称。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 在输入参数页签,输入请求参数的项目ID,单击测试窗口右上角的。 { "project_id":"XXXXXXXXXXX"} 在输出参数页签,显示出边缘节点列表,表示执行脚本成功。 单击脚本编辑器页面上方的,启用脚本。
  • 背景信息 智能边缘平台(Intelligent EdgeFabric,简称IEF )满足客户对边缘计算资源的远程管控、数据处理、分析决策、智能化的诉求, 为企业提供边、云协同的一体化边缘计算解决方案。更多介绍,请参见智能边缘平台。 在AppCube中,通过应用与华为IEF(Intelligent EdgeFabric)对接,实现在5G智慧加油站解决方案中,通过华为云IEF服务来纳管边缘节点,并通过IEF云边通信能力来向边缘节点发送业务命令。
  • 背景信息 ModelArts Pro是为企业级AI应用打造的专业开发套件。基于华为云的先进算法和快速训练能力,提供预置工作流和模型,提升企业AI应用的开发效率,降低开发难度。同时,支持客户自主进行工作流编排,快速实现应用的开发、共享和发布,共建开放生态,实现普惠行业AI落地。ModelArts Pro包括自然语言处理套件、文字识别套件、视觉套件等,能够快速响应不同行业、不同场景的AI落地需求。更多关于ModelArts Pro的介绍,请参见ModelArts Pro官方网站。 在AppCube中,通过配置ModelArts Pro连接器,可实现AppCube与华为ModelArts Pro对接。对接后可使用ModelArts Pro提供的文字识别套件、自然语言处理套件提供的能力。
  • 在脚本中调用连接器 在脚本中,通过调用连接器,实现调用ModelArts Pro的接口。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图5 新建空白脚本 在脚本编辑器中,输入如下代码。 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服务,具体操作请参见准备工作。 AppCube对接ModelArts Pro,使用ModelArts Pro提供的文字识别套件、自然语言处理套件提供的能力。因此需要先申请文字识别套件和自然语言处理套件,具体操作请参见申请行业套件。 参考获取AK/SK获取AK(Access Key ID)、SK(Secret Access Key),即访问密钥对。 本节场景是对行程码图片进行识别,需要在ModelArts Pro上创建并部署上线用于对行程码进行识别的模型。由于各省份行程码可能不一致,所以部署的为多模板,具体操作请参见使用多模板工作流开发应用。
  • 在脚本中调用连接器 在脚本中,调用已创建的连接器,实现与SMTP的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图5 新建空白脚本 在脚本编辑器中,输入如下代码。 // 导入连接器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中已设置入参,故此处不需要再设置,直接单击测试窗口右上角的。 检查收件人是否收到邮件。 收到邮件,表示成功调用连接器,如图6。 图6 接收邮件内容 单击脚本编辑器页面上方的,启用脚本。
  • 在脚本中连接器 在脚本中,调用已创建的连接器,实现用户登录微信公众号。 在微信客户端的H5页面,发起AJAX请求,用于获取code。 请求示例如下: https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。 参考脚本开发实例中操作,创建一个空白脚本。 在脚本编辑器中,输入如下代码。 import * as wechat from 'wechat';let connectorID = "whchat"let code = "xxxxx" // 该code值从步骤1获取let client = wechat.NewClient(connectorID)let res = client.GetAccessToken(code)console.log(res) 其中,“connectorID”为连接器的名称,“code”为1获取的code取值。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,执行脚本。 不用输入请求报文,直接单击测试窗口右上角的。 在日志页签,查看到已获取“access_token”和“openid”,可用于登录微信公众号。 { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE"}
  • 在脚本中调用连接器 在脚本中,调用已创建的连接器,实现与Message&SMS的对接。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图2 新建空白脚本 在脚本编辑器中,输入如下代码。 //导入该脚本所依赖的标准库文件。msgsms是系统预置的标准库。import * as sms from 'msgsms'; @action.object({type: "method"}) export class ActionDemo { @action.method({ label: 'greeting something', description: 'greeting something.', input: 'ActionInput', output: 'ActionOutput' }) public greet(){ console.log('`````````````````````test new sms`````````````````````') let client = sms.newClient("MSGSMS_Test") let res = client.sendByName("Test1","130XXXXXXXX","[\"6612\"]") console.log(res) console.log('`````````````````````test new sms end`````````````````````') } } 其中,sms.newClient("MSGSMS_Test")中“MSGSMS_Test”为连接器的名称。client.sendByName("Test1","130XXXXXXXX","[\"6612\"]")中携带的是模板名称、接收者号码和模板参数。 单击脚本编辑器页面上方的,保存脚本。 保存成功后,单击,运行脚本。 在页面底部,单击测试窗口右上角的。 检查接收者是否收到短信,收到短信表示成功调用连接器。 单击编辑器页面上方的,启用脚本。
  • 在脚本中调用连接器 在脚本中,调用连接器,实现调用ModelArts的接口。 参考开发一个简单脚本实例中操作,创建一个空白脚本。 图3 新建空白脚本 在脚本编辑器中,输入如下代码。 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" ] ]} 单击脚本编辑器页面上方的,启用脚本。
共100000条