华为云用户手册

  • 在标准页面中与BPM交互 在标准页面的自定义事件中内置了一些交互的API : 获取变量:context.$bpm.loadVariables(): Promise 提交任务、流程: context.$bpm.submitTask(variables: {[key: string]: any}): Promise 修改变量: context.$bpm.putVariables(variables: {[key: string]: any}): Promise 图2 在标准页面的事件代码中与BPM交互
  • 开发一个业务场景脚本实例 本小节创建的业务场景脚本相对于开发一个简单脚本实例,具有更为复杂的业务逻辑。 本脚本实例实现的业务场景:根据对象的数据生成资源列表数据,用于前台数据呈现,启用本脚本后,可实现数据导入模板使用。 创建脚本之前,需要先创建脚本中操作的对象ApprovedResource,其字段如表1所示。 表1 对象说明 字段标签 字段名称 字段类型 取值 读写权限 含义 ownerId ownerId 文本 长度:255 全选 资源拥有者ID ResourceName ResourceName 文本 长度:255 全选 资源名称 Type Type 选项列表 枚举值如下: File Folder 全选 资源类型 SubmitDate SubmitDate 日期/时间 不涉及 全选 资源提交时间 ApproveDate ApproveDate 日期/时间 不涉及 全选 资源审批时间 Status Status 选项列表 枚举值如下: Waiting Submitted Approved 全选 审批状态
  • 如何定制已有脚本 您可以全新创建一个脚本,也可以根据业务需要修改已有脚本,如使用如何通过模板进行数据导入的BulkInsert脚本为例。 在以下两种场景下,您需要修改已有脚本: 场景1:在已有脚本基础上新建版本。业务需要,脚本要实现的能力变化,此时您可以基于原有脚本修改,并保存为脚本的新版本。在此场景下,原有脚本作为老版本自动失效。 场景2:在已有脚本基础上新建脚本。您需要开发的新脚本与已有的某个脚本类似,此时您可以基于原有脚本修改,再保存为新的脚本名称。在此场景下,原有脚本仍然有效。新脚本和老脚本也没有关联关系,各自独立。 场景1:在已有脚本基础上新建版本: 根据已有的“BulkInsert”版本1.0.1的脚本 ,开发“BulkInsert”版本1.0.2的脚本。 在应用开发工作台Logic目录下,单击“BulkInsert”脚本。 单击编辑器上方的另存为图标,选择“新建版本”,单击“保存”。 图5 另存为“BulkInsert”脚本 图6 保存新建版本 编辑新脚本版本的内容,修改后单击页面上方,保存修改。 图7 修改版本后保存与启用 测试脚本,确保其运行结果符合预期后,再单击启用脚本。 场景2:在已有脚本基础上新建脚本: 根据已有的“BulkInsert”脚本 ,开发“BulkInsertOther”。 在应用开发工作台Logic目录下,单击“BulkInsert”脚本。 单击编辑器上方的另存为图标,选择“新建脚本”,输入新脚本名“BulkInsertOther”,单击“保存”。 图8 新建脚本 编辑新脚本的内容,修改后单击上方图标,进行保存。 测试脚本,确保其运行结果符合预期后,再单击启用脚本。
  • 常见错误 变量赋值错误? 请检查输入参数的类型与定义是否匹配,必要时进行类型转换。 变量结构错误? 请检查输入参数的结构(属性名、取值类型)与目标结构是否一致。当出现大段JSON报错信息时,可借助JSON Viewer或在线JSON格式化工具进行对比。 没有走指定分支?流程意外终止? 由于流程的结束时隐含的,当没有下一步的内容时流程即结束。因此,在排他网关里如果没有设置默认分支,当所有分支的条件都不满足时,流程即进入结束状态。
  • 流跟踪器简介 与服务编排类似,BPM也有一个流程执行历史的查看器,称为“日志跟踪器”。通过跟踪流程的每一步的输入和输出,确定流程的执行结果是否符合预期。 打开某个BPM,单击编辑器上方的“运行”按钮,运行BPM。模拟符合与BPM进行交互。 交互完成后,需要确认步骤操作的结果是否符合预期。单击BPM编辑器页面右上方“跟踪器”,打开“日志跟踪器”页面。 在“日志跟踪器”页面查看BPM执行的每一步的详细信息,例如查看变量传递是否符合预期。 图1 日志跟踪器 日志跟踪器界面分为两部分,即搜索框和流程日志跟踪记录表格。 搜索框: 图2 搜索框 流程切换:用户可以根据时间筛选曾启动过的流程,每个流程的跟踪信息只保存半个小时。 搜索框:根据流程跟踪信息进行搜索。 下载:将当前完整的流程日志以文件形式下载到本地,保存或查看。 表格:日志跟踪器表格记录了BPM流程流转的日志。其中包含时间戳、所属模块的类型、所属模块的名字、具体操作的图元类型、图元名称以及该操作的描述,模块在执行子流程时,会切换为子流程的类型和名称。 若不符合预期,则重新返回BPM修改,重复步骤 1 。
  • 快速开始 在低代码应用开发页面,您可以通过新建、导入既有和基于模板三种方式,快速创建一个BPM。 图5 新建BPM的三种方式 如下是开发BPM的主要步骤,您可以根据以下步骤快速开发BPM。如何创建一个端到端的BPM,请参见简易出差审批应用开发。 表2 开发BPM步骤 步骤序号 相关术语 描述 操作 1 创建BPM 新建:创建空白BPM。 导入既有:将同一租户或平台中已有的BPM以导入的方式创建BPM。方便用户快速继承已有BPM的配置,增加效率。 基于模板:使用内置的BPM模板,快速创建BPM系统预置了一些典型场景的BPM模板,目前系统内置的模板有以下几类: 通用:基础审批流、多步骤审批流、并行审批流 HR:请假申请、出差申请、绩效评估、试用期确认、工作交接 金融:贷款申请、ERP信用提升、商业计划申请 项目:进度管理、版本管理、发布管理 您可以根据需要选择不同方式,创建BPM。 若业务场景贴合已有模板,建议选择“基于模板”来快速创建BPM。快速创建后,您只需要创建泳道中配置的工作队列即可使用BPM。 2 (可选)BPM的开始类型 BPM的开始类型可以“Star”开始图元下进行配置,开始种类分以下两种: 自定义:默认为“自定义”,即不指定事件的起因,即不需要指定触发条件。主要用于接口调用进行启动。 表单:使用表单或者页面启动BPM。选择该项时,您需要配置具体的表单、标准页面或者高级页面。 一般选择“自定义”,当BPM由表单或者页面启动时,选择“表单”类型。 选中“Star”开始图元,设置开始类型,一般选择“自定义”,当BPM由表单或者页面启动时,选择“表单”类型。 图6 选择开始类型 3 创建或配置BPM变量 创建对象或全局结构体。 在全局上下文中,根据实际情况进行创建。 4 定义泳道并选择图元 一条泳道代表了BPM流程处理中的一种用户角色。 BPM中每个泳道都和队列一一对应。处于不同泳道的图元,分别归属不同的队列中的用户去处理。当图元由系统处理时,泳道中不用配置队列。 BPM编辑器提供了一些图元,作为编排BPM使用。 在BPM开发页面单击“Add Lane”,添加泳道。根据场景定义泳道。 根据逻辑设计,从BPM编辑器面板区域拖拽相应类型下的图元图标至画布区域中,松开鼠标左键。 5 配置图元 在泳道中,选中图元后,即可根据需要在右侧属性配置区,进行配置。 您可以根据需要选择图元,进行配置。 如果使用了“规则”图元,您需要提前创建好决策表。 如果使用了“用户任务”图元,且任务界面要用到标准表单,建议您提前创建好标准表单。 6 连接图元并指定图元的逻辑关系 根据实际业务场景,需要确定BPM中用到的图元和逻辑顺序。根据逻辑实现,需要在拖入并配置好所有图元后,将图元按照逻辑顺序有序的连接起来,在执行BPM时,系统会根据连线顺序有序执行图元任务,从而实现整个流程运转。 根据逻辑设计有序连接各图元。 7 (可选)配置运行态界面布局 在配置完整个BPM图元及流程后,您还可根据需要选择性的配置BPM运行态界面布局。配置后要保存BPM。 -
  • 实现投票 在上一节中,通过将结果触发方式选择为“等待所有投票完成触发投票结果”实现了会签功能,本节将介绍如何通过用户任务实现投票功能。 需要先将操作投票任务的用户加入到一个工作队列或组(公共组)中。 图1 在工作队列中添加用户成员 图2 在公共组中添加用户 “当前泳道”方式是通过指定泳道的工作队列实现的。 “名称和表达式”方式是通过设置“参与者”类型为“组”,并指定组(公共组)实现的。 通过“当前泳道”或“名称和表达式”的方式,将需要进行投票操作的用户加入到用户任务的接收人中,再将“审批类型”选择为“会签:每个分配人都需要审批”,将结果触发方式选择为“当最小百分比满足时立即触发投票结果”,并自定义“投票结果门槛”。 图3 当前泳道方式 图4 名称和表达式方式 通过以上配置,将在处理任务的用户数量达到需要处理任务的总用户数量的对应百分比后,将得票最高的结果赋值到“$BP.TaskOutcome”系统变量中,实现投票功能。 父主题: 深入了解用户任务
  • 初识BPM 在某个应用开发工作台中,将光标放在应用目录上之后,应用目录右侧会出现“+”,单击“+”,选择“BPM”,在“添加工作流”弹窗中,输入BPM的标签和名称后,单击“添加”,即可进入BPM设计界面。 图1 创建BPM 图2 添加工作流 BPM设计界面由上方按钮区域、左侧面板图元区域、中间画布工作区域和右侧属性配置区域四部分组成。 图3 BPM设计界面 表1 BPM设计界面说明 序号 分类 功能说明 1 按钮区域 功能按钮区域,包括锁定、解锁、启用(或者禁用)、保存、另存为新版本或者新BPM、运行、操作回退、撤销回退、启用流跟踪器以及切换版本的操作。支持快捷键操作,即可脱离鼠标直接用键盘操作。 2 面板图元区域 BPM的组成图元,详细介绍请参见BPM图元。 3 画布工作区域 BPM设计操作区域。在该区域可对BPM进行具体流程设计、组件放置。 选中图元或者泳道按“Delete”可进行删除操作。 4 属性配置区域 整个BPM、泳道(Lane)或者图元属性设置区域。 当选择BPM中图元时,右侧配置区域为该图元的属性设置区域。 当选择BPM中空白区域时,右侧配置区域为该BPM的设置区域。 当选择泳道左侧标签时,右侧配置区域为该泳道的属性设置区域。
  • 实现会签 配置用户任务时可以选择两种审批类型,分别是“或签:任一个分配人均可审批”和“会签:每个分配人都需要审批”。 若您选择了“或签:任一个分配人均可审批”,则只需要接收人中的某一用户完成了审批,即可推动任务流程,走向下一个任务。 若您选择了“会签:每个分配人都需要审批”,则需要接收人中的用户群体满足您设置的审批条件才可推动任务流程,走向下一个任务。 通过并行审批可以快速的实现会签功能,您可以将结果触发方式选择为“等待所有投票完成触发投票结果”,在这种投票触发方式下,将需要所有被分配了当前任务的用户完成相应的任务后才能推动BPM流程,即实现了会签功能。 父主题: 深入了解用户任务
  • 用户和业务用户 在进行任务分配时,AppCube平台提供了两种用户可以进行任务的分配,分别是用户和业务用户。 用户(User):是租户帐号或子帐号开发者,用来管理应用和业务用户。购买AppCube的租户帐号默认拥有所有权限,是管理员用户,可添加子帐号并为其配置需要的权限。 业务用户(即PortalUser):是访问在AppCube中开发的业务应用的用户帐号。即业务应用的使用者。 您可以在BPM中通过用户任务图元,在用户任务配置页面的“接收人”模块,通过以下三种方式将任务分配给用户或业务用户。 当前泳道。 流程发起人的主管 名称和表达式。 基于规则。 图1 接收人类型
  • 当前泳道 “用户任务”图元接收人类型设置为“当前泳道”,将泳道和工作队列绑定,则处于该泳道的用户任务图元,由该泳道对应工作队列中的成员去处理。工作队列中的成员可以是多个用户、业务用户、公共组中成员、角色或带有下属的角色中成员。配置过程如下: 参考管理队列,创建工作队列,将处理任务的用户或者业务用户加入工作队列中。例如创建派单员工作队列“Dispatcher”。 图2 创建工作队列 如图3所示,“用户任务”的接收人类型选择“当前泳道”,您可以将任务分配给“当前泳道角色的任意成员”或“当前泳道中的上一个任务被分配的人员”。 图3 用户任务中设置当前泳道接收 如图4所示,单击左侧泳道区域,在“泳道配置”中设置派单员工作队列“Dispatcher”。 处于该泳道的用户任务图元,则由工作队列“Dispatcher”中的成员去处理。 图4 设置泳道
  • 名称和表达式 “用户任务”图元接收人类型设置为“名称和表达式”时,通过以下三种方式分配该任务的参与者:“表达式”、“用户”和“组”。这时泳道中的工作队列配置不起作用。 图5 名称和表达式 用户:在“取值”中选择接收该任务的用户,不包括业务用户。 组:在“取值”中选择公共组,则该任务由公共组的成员去处理。公共组的成员可以是用户、业务用户、其他公共组的成员、角色或带有下属的角色中成员。关于如何创建工作组,请参考管理公共组。 表达式:当您将“参与者”配置为“表达式”时,实际是一个变量。在“取值”中可设置变量的值,变量值支持以下几种: 用户的用户名或用户ID,其中用户名前需要加“user:”前缀。 业务用户的用户名或业务用户ID,其中业务用户名前需要加“puser:”前缀。 公共组名称或者公共组ID,其中公共组名称前需要加“group:”前缀。 角色名称或者角色ID,其中角色名称前需要加“role:”前缀。 例如分配任务接受者为用户名为“PortalUser1”的业务用户、用户名为“User1”的用户、用户ID为“10XX000000XXXXXXX”的用户、公共组名称为“group1”和角色名称为“role1”的合集,则取值为“"puser:PortalUser1,user:User1,10XX000000XXXXXXX,group:group1,role:role1"”。多个取值之间用英文逗号“,”分隔,取值外加英文双引号。
  • 基于规则 “用户任务”图元接收人类型设置为“基于规则”时,您可以将全局上下文中的变量拖入到条件输入框中,当条件输入框中的变量或条件为true时,将会把任务分配给选择框中配置的用户。您可以通过以下方式配置接收任务的用户: 当前用户:把任务分配给执行当前用户任务的用户。 上级经理:把任务分配给执行当前用户任务的用户的上级经理。 特定的用户:把任务分配给选择框中选择的用户。 队列:把任务分配给选择框中选择的工作队列中的所有用户。 用户属性:根据用户对象的某一字段进行任务的分配。 变量:根据输入框中的用户ID或用户名将任务分配给相应的用户。 图6 基于规则
  • 如何对接口鉴权 通过Rest连接器只需简单配置即可实现方便快捷的调用第三方接口。但是为了保证接口调用安全,调用第三方系统开放的Rest接口,通常需要进行鉴权。目前Rest连接器集成了几种通用的鉴权方式。 鉴权协议支持OAuth、简单消息头和JWT(JSON Web Tokens)三种,此外还支持HTTPS双向认证鉴权。 OAuth鉴权模式 简单消息头鉴权 JWT鉴权模式 HTTPS双向认证鉴权 父主题: 集成开发
  • 如何调用第三方接口 在使用AppCube时,通常会调用第三方系统接口进行数据交互。针对常见Rest和SOAP协议,AppCube封装了Rest服务和SOAP服务连接器,使用这两种连接器,可以方便快捷的调用第三方接口,实现对第三方系统的数据增删改查。 调用第三方接口前,需要第三方系统有提供符合Rest和SOAP协议规范的API。 使用Rest服务调用Rest协议接口 使用SOAP服务调用SOAP协议接口 父主题: 集成开发
  • OAuth鉴权模式 使用OAuth客户端模式鉴权,AppCube服务会根据填写的OAuth的服务端地址、Client ID和Client Secret。在发送请求前后台自动获取第三放服务端的access_token, 并在发送请求时携带此access_token,服务端根据携带的access_token进行鉴权。 在创建或修改Rest服务时,可以设置鉴权信息。 图1 鉴权设置操作入口 图2 OAuth鉴权模式示例配置 父主题: 如何对接口鉴权
  • 调试过程 单击,输入参数后单击“运行”,运行服务编排。 在“输入参数”中输入如下参数: { "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 }} 单击服务编排编辑器页面右上方“跟踪”,打开“服务编排跟踪器”页面。 可在“服务编排跟踪器”页面查看Flow执行的每一步的详细信息。 单击服务编排编辑器页面上方图标,启用服务编排。
  • 操作步骤 鼠标放在App下的Logic文件夹旁会出现加号,单击加号,选择“服务编排”。 系统弹出“添加服务编排”的对话框,请参见表3配置参数。然后单击“添加”。 图1 创建服务编排 表3 创建服务编排参数说明 参数名 参数说明 如何配置 创建一个新的服务编排 创建一个新的服务编排流程。 选中单选按钮选择“创建一个新的服务编排”。 使用已有的服务编排 基于同一租户或基线里已有的服务编排创建。 方便用户快速继承已有服务编排的配置,增加效率。 类型 服务编排的类型。 Autolaunched Flow:自启动Flow,在接口调用后会立即执行Flow模型定义的逻辑。 Event Trigger:事件触发的Flow,则会在事件触发时才会开始执行Flow模型定义的逻辑。 在下拉框里选择“Autolaunched Flow”。 标签 仅用于展示。 直接填写“GetResourveListFlow”。 名称 系统会自动在该名称前添加命名空间__。当其他功能调用服务编排时,调用的是服务编排的名称,而不是标签。 填完“标签”值后,单击该参数的输入框,系统会自动填充。 描述 服务编排描述信息。 选填项,建议填写服务编排的作用。 当编辑已有服务编排时,为防止编辑时多人篡改,编辑前请单击锁定服务编排。 创建该服务编排的入参和出参变量。由于该服务编排封装的是“ResourceListScript”脚本,则该服务编排的入参和出参的字段类型和字段名与“ResourceListScript”脚本保持一致。 此步骤需要创建如下变量。 表4 服务编排变量 变量类型 参数名 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”成员变量(见表2)保持一致。 创建私有结构体后,您可创建私有结构体变量。 图3 配置私有结构体 在服务编排编辑器页面右侧选择。在全局上下文页面单击“对象变量”后的加号。 选择“私有结构体”,设置页面参数。 图4 配置私有结构体变量 表5 私有结构体变量参数说明 参数名 参数说明 如何配置 名称 该结构体变量名称,与“ResourceListScript”脚本中定义的出参命名保持一致。 直接输入“resource”。 私有结构体 该结构体变量类型。 选择刚创建的结构体类型名称“resourcestruct”。 默认值 变量的默认取值。 不用配置。 描述 该变量的描述说明。 选填项,建议填写该变量的作用。 是否为数组 是否为数组型变量即集合变量。 请勾选。 在服务编排编辑器页面右侧选择。在全局上下文页面单击“变量”后的加号。 单击新增变量后的“...”,选择“设置”。 图5 设置变量 配置普通变量“ownerId”。 图6 配置变量 表6 普通变量参数说明 参数名 参数说明 如何配置 名称 变量名称,必填。 直接输入“ownerId”。 数据类型 变量的数据类型。必填。支持以下几种。 文本 数字 货币 日期 日期/时间 复选框 从下拉列表选择“文本”。 默认值 变量的默认取值。 不用配置。 描述 该变量的描述说明。 选填项,建议填写该变量的作用。 是否为数组 是否为数组型变量即集合变量。 不勾选。 参考3.e~3.g步骤配置表4中其他普通变量。 在服务编排编辑器页面右侧选择,按照表4从全局上下文页面中拖拽参数到相应的入参和出参区域。设置服务编排的入参和出参。 图7 设置服务编排的入参和出参 拖拽“基本”下“脚本”图标至画布中,松开鼠标左键。 单击,如图8所示设置页面参数。将服务编排中的变量赋值给脚本中的输入参数,脚本中的输出参数赋值给服务编排中的变量。 图8 配置脚本 表7 脚本配置参数说明 参数名 参数说明 如何配置 脚本 调用的脚本名称。 只有在启用状态下同一应用工程内的脚本才能被服务编排调用。 选择“命名空间_ResourceListScript”。 输入参数/目标 脚本的输入参数名称。 在下拉框中选择输入参数的名称。 输入参数/源 服务编排中的变量,为目标赋值。 请从“全局上下文”中拖拽之前创建的服务编排输入变量。 输出参数/源 脚本的输出参数名称。 在下拉框中选择输出参数的名称 输出参数/目标 服务编排中的变量,脚本中的输出参数赋值给服务编排中的变量。请从“全局上下文”中拖拽之前创建的服务编排输出变量。 请从“全局上下文”中拖拽之前创建的服务编排输出变量。 若有多个输入参数或者输出参数,单击“新增行”进行添加。 连接所有元素。 单击,保存服务编排。
  • 前提条件 已创建名为“Approved Resource”的Object,用于存储资源数据。 该对象中需要包含如下字段。 字段标签 字段名称 (系统自动生成) 字段类型 取值 读写权限 是否加入界面布局 含义 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”,单击下载链接可获取该脚本包。 该脚本中定义的入参和出参说明如表1和表2所示。 表1 入参说明 参数名 参数类型 说明 ownerId string 资源拥有者ID。 limit number 每页展示的资源条数。 offset number 每页展示第一条资源的偏移量,即从offset+1条资源开始展示。 表2 出参说明 参数名 参数类型 说明 resource struct 返回资源数组集合。 approveDate:审批时间,若该记录已审批则返回审批时间。 ownerId:资源拥有者Id。 resourceName:资源名称。 status:资源状态。若该记录未提交则为Waiting;若该记录已提交未审批则为Submitted;若该记录已审批则为Approved。 submitDate:资源提交时间。 type:资源类型。 totalCount number 资源总数(固定100)。
  • 操作步骤 需要使用该BO的用户参考如何安装已开发好的应用章节安装用户包。 在“项目”页签单击需要导入该BO的上层应用(需要使用该BO服务的应用),打开应用开发页面。 在应用开发页面下“External dependencies”目录树旁单击加号,选择“BO服务”。 若发布BO,编译设置的是源码包,在上层应用中导入BO时,可在“Internal dependencies”中进行导入,导入后,在打包上层应用时,“Internal dependencies”中的资产也会随应用打包发布出去。 在“添加BO”页签选择BO,单击“添加”,导入BO。 导入后,该BO会出现在上层应用中。后续,您可在应用中调用该BO中的服务。例如在标准页面的服务模型中调用BO中的服务编排,具体操作将会在“开发标准页面”章节进行介绍。 图1 导入BO 图2 调用BO中的服务编排
  • 什么是BO BO(全称Business Object)即商业对象,是封装了完整的数据模型、业务逻辑、页面展现的软件单元,一个BO提供一个完整场景的服务,为上层应用提供特定服务。不同用户可以开发各自的BO,在BO里创建逻辑使其具有特定的业务功能,开发好后制作成用户包并进行发布。下载用户包给其他用户,其他用户安装BO包后,在上层应用(需要使用该BO服务的应用)里导入发布好的BO,即导入特定的业务功能进行使用。 例如:设备BO,为上层应用提供对设备的统一语义,对设备自身能力进行抽象封装,不包含对设备的运营运维管理能力;告警BO,对园区的所有告警提供统一语义,从各个子系统和上层应用获取告警数据,统一模型统一展现;GIS服务BO,提供对GIS子系统的租户管理、地图管理、位置服务接口的封装和标准化接口。您可基于设备BO、告警BO以及GIS服务BO等多种BO资产,创建智能烟雾感应应用,完成设备数据的接入、处理分析以及告警监控功能。 父主题: 服务组件(BO)
  • 如何通过脚本控制接口访问权限 AppCube提供了示例自定义接口前置脚本,可以仿造示例代码进行脚本的编写。 图5 创建示例自定义接口前置脚本 您可以在自定义接口前置脚本中进行自定义的权限校验,并根据校验结果返回相应的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中的某一值,否则作为校验不通过处理。 单击左下角的“服务”,在服务管理页面,单击“编辑”,将校验方式改为“与脚本绑定”,在“前置处理”中选择相应的自定义接口前置脚本。 前置处理脚本:一般是授权处理脚本,在访问自定义接口前,需要进行授权处理。 后置处理脚本:一般是敏感错误信息或者统计日志处理脚本,后置脚本没有返回参数,无论执行成功或失败都不影响自定义接口的请求处理流程。 图6 自定义访问控制 图7 绑定自定义接口前置脚本
  • 补丁包发布步骤 参考 导入导出应用源码包,对App中部分组件进行设置打包。选中“组件”后,需要单击“详情”,在“可选组件”页面勾选需要设置的组件,单击“保存”再进行后续操作。 例如对应用中的某一个脚本进行打包: 参考应用发布主要流程,在应用开发平台左侧导航栏单击,选择“设置”,进入应用编译设置页面,设置只编译该脚本。 图1 设置编译组件 图2 勾选脚本 单击“保存”后,再发布即可。 在APP开发页面左侧单击,选择“编译”进行编译。 编译完成后,单击左下角,选择“我的仓库”,将应用程序安装包发布到当前租户的私仓。 发布成功后,即可在“资产包”下获取仅包含脚本的补丁包。 补丁包发布之后,可以参考如何安装已开发好的应用中的内容进行更新安装。
  • 自定义高级组件调试 针对用户本地开发的高级组件,AppCube提供了Scaffolding脚手架工具,Scaffolding可帮助您快捷实现组件的新建、本地开发、调试、预览、发布、下载等主要功能。 Scaffolding打通了本地开发环境与AppCube开发环境,实现本地开发组件的实时在线调测,简化了本地开发组件后频繁的打包组件资产包上传至AppCube环境再查看页面显示效果的过程,可提升高级组件的开发效率。
  • 前台页面常用调测方法 在高级页面的开发中,常借助浏览器内置的开发者工具对样式或功能问题进行定位和分析。下面,将以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页签布局 调用AppCube平台API 在Console页签下,可使用控制台调用AppCube提供的API,以获取相关信息进行调试。 断点调试 在Sources页签下,可以设置断点来调试JavaScript,使用断点,DevTools会在暂停时及时显示所有变量值。Chrome开发者工具提供多种断点,包括代码行断点、条件代码行断点、DOM断点和事件侦听断点等,您可根据调测的实际需求选择合适的断点。断点的类型和使用场景如表1所示。 表1 Chrome断点类型 断点类型 使用场景 代码行 在确切的代码区域中。 条件代码行 在确切的代码区域中,且仅当其他一些条件成立时。 DOM 在更改或移除特定DOM节点或其子级的代码中。 XHR 当XHR网址包含字符串模式时。 事件 在触发点击等事件后运行的代码中。 侦听器 在引发已捕获或未捕获异常的代码行中。 异常函数 任何时候调用特定函数时。 代码行断点调试是最为常见的断点调试方法,在Sources页签下,主要分为三个部分,左侧为页面请求文件列表,中间为选择文件的文件内容,右侧为JavaScript调试窗格。 设置代码行断点的方法是找到请求文件,您可在左侧请求文件列表按照目录查找,还可以借助“Ctrl+F”搜索关键词找到相关文件,在中间文件内容区域,找到要设置断点的代码行,单击行号,出现蓝色图标,这意味着这行代码上有一个代码行断点。如图3所示,在global_BubbleChartWidget.js文件的49行代码处设置了一个代码行断点。 刷新此网页,脚本运行始终会在执行此行代码之前暂停,可单击右侧调试窗格的按钮进行单步调试,或者单击调试窗格的按钮继续执行脚本。 图3 代码行断点示例 多终端测试 在进行页面自适应测试时,可以采用Chrome开发者工具提供的模拟移动设备的功能。借助此功能,您可无实物快速对网页进行多个终端测试。 单击按钮,可启动模拟移动设备界面,设备工具栏在打开时默认处于自适应视口模式,可以将视口大小调整为所需的任何尺寸,另外还可以选择多种终端型号,例如iPhone X、iPad等。 图4 模拟移动设备
  • 什么是应用包 轻应用或者行业应用开发完成后,应用需要编译打包,这种编译后的压缩包即应用包。 应用包类型 AppCube中编译打包的应用包类型有以下两种: 源码包:该类型包中的所有组件都不受保护和限制。在其他环境安装后可编辑包中组件,即在原有基础上可进行再开发。若后续其他用户在开发环境安装后,会显示在开发环境首页的“项目”页签下。 资产包:该类型支持设置包中的组件是否受保护。打包时不做编译设置,默认打出的包都是资产包,包中组件都为只读保护模式,将包安装到其他环境时,只能运行和预览。不可编辑包中组件。若后续其他用户在其他开发环境安装资产包后,应用会显示在开发环境首页的“库”页签下。 应用包类型的详细,请参见本节中的源码包与资产包对比。 软件包环境 图1 环境介绍 AppCube分为开发环境,沙箱环境和运行环境三个部分。详细信息请参见开发环境/沙箱环境/运行环境。 开发者在开发环境开发应用和BO,开发完成后生成对应的软件包。 发布软件包到沙箱环境中进行测试。 测试通过后发布安装到生产环境实际运行和维护。 仅专业收费版本支持沙箱环境和运行环境,免费版本无沙箱环境和运行环境权限。 软件包制作 应用或BO创建完成后,平台会同步创建同名的软件包。 对应用和BO内的组件进行增删查改都会同步反映到软件包中。 开发者也可以在编译设置中对软件包和其中组件的属性进行修改。
  • 如何快速区分源码包与资产包 在开发环境中,应用开发开发工作台里可区分源码包和资产包。 开发环境,沙箱环境和运行环境具体说明请参见开发环境/沙箱环境/运行环境。 图2 资产包和源码包位置 另外,在沙箱或运行环境中安装资产包和源码包后,在packageinstall表中看managed字段的值,true是资产包,false是源码包。如何使用控制台查看可参见使用控制台分析查询SQL。 图3 控制台中查看packageinstall
  • 如何导出源码包 可参考资产包的导出流程,导出和编译设置参数详情见 应用打包发布。 需先发布源码包,再下载源码包到本地(下载即是导出源码包),参见本节1。 发布源码包的步骤请参考如何将应用发布到“我的仓库”,只需步骤2修改为:在应用开发页面左侧单击,选择“设置”,在“编译设置”页面配置参数,选择“全量包”就是全量导出源码包,或者选择“增量包”设置成组件包,添加并勾选部分组件。其他设置编译,发布的步骤保持一致。 图4 编译设置:全量导出源码包 图5 编译设置-组件:部分组件导出源码包 类别中“租户级组件”指的是当前租户内(不分所属项目)所存在的组件。
  • 源码包与资产包对比 源码包和资产包都是应用发布类型,大部分的功能都是一致的,比如都分为全量和组件两种形式,都是按编译-发布的流程进行。目前来说,主要有以下几点不同之处: 不同的保护模式设置。源码包中的所有组件都不受保护和限制,其保护模式也无法进行设置修改,这些组件在安装后可以被自定义编辑修改。而资产包的大部分组件默认在安装后是不允许被修改的,甚至可以设置某些组件不可见,如服务编排,脚本等,可防止泄露源代码,保护知识产权。其保护模式能够在编译设置中进行修改。 二次开发与发布模式不同。源码包在开发环境中安装后允许再次进行打包发布,而资产包安装后无法二次打包发布。另外,源码包只能发布到“我的仓库”,而资产包主要用于发布到应用市场。
  • 什么应用代码可以保护 应用包类型有资产包和源码包两种,仅资产包可设置是否受保护,源码包不受保护。 参考应用打包发布,选择“资产包”发布的应用包,包中组件可设置是否受保护。选择该项后,您需要配置版权信息(可选)、描述(可选)、每个组件的保护设置(必选。配置为未受保护或者只读保护)。 三种类型保护模式:未受保护、只读保护和不可见保护。相当于Linux下的三种保护模式,即可读可写可执行(RWX)、不可写(RX)和仅可执行(X)。
共100000条