华为云用户手册

  • 如何快速创建一个高级页面 以构建包含基本柱图组件的高级页面为例,向您介绍如何快速搭建高级页面。 新建高级页面。 参考登录经典应用设计器中操作,登录经典版应用设计器。 在模块树中,将鼠标放在某个文件夹上,单击加号,选择“高级页面”。 设置标签和名称,单击“添加”。 图10 添加高级页面 在应用中首次创建高级页面时,才会显示“视图”选项。 高级页面支持在如下两种布局模式下,使用组件搭建页面(具体说明请参见高级页面布局)。 绝对布局:在绝对布局中,每个组件可在页面下任意位置进行拖拽放置,组件的宽高可自定义设置。该布局模式常用于IOC大屏页面开发场景。 流式布局:在流式布局下,拖拽到页面中的组件将根据从上到下、从左到右的顺序依次排列,组件的高度将根据组件内容大小进行自适应,宽度可按百分比进行配置。该布局常用于常规Web应用开发,例如电商网站、管理网站等等。 搭建高级页面。 在高级页面开发界面,单击,打开组件列表。 从组件列表中,拖拽基本柱图组件到画布中,按需调整组件的位置和大小。 图11 搭建高级页面 进行组件属性配置。 以修改组件的图表数据为例,向您介绍如何进行组件属性配置。 选中基本柱图组件,在组件属性设置中,单击“数据”页签。 在桥接器实例中,选择“折线图数据桥接器”,数据类型选择“静态数据”,并在静态数据中拷贝如下示例。 图12 组件数据设置 { "resCode": "0", "resMsg": "成功", "result": [{ "order": { "dataX": [ "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24" ], "dataValue": [{ "title": "入园人数", "value": [ 20, 30, 45, 20, 60, 80, 140, 200, 145, 40, 70, 60, 80, 16, 87, 77, 60, 20, 60, 80, 55, 68, 70, 24 ] }, { "title": null, "value": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] }, { "title": "出园人数", "value": [ 90, 60, 30, 20, 10, 110, 140, 87, 64, 45, 11, 24, 80, 14, 98, 35, 41, 14, 45, 80, 31, 22, 23, 24 ] } ] } }]} 返回高级页面开发界面,单击页面上方的,保存页面。 如何进行高级页面的预览与发布。 页面创建完成后,可直接单击高级页面上方的,预览页面,也可以单击,发布高级页面。 图13 高级页面的发布
  • 高级页面开发框架 在开发高级页面过程中,主要涉及组件、库、桥接器、事件和动作等相关内容。组件、库、桥接器、事件和动作之间的关系,可概述为: 组件为高级页面的元素,组件的可复用性可以大幅提高开发效率。 组件的事件-动作机制提升页面的灵活度,使得组件与组件、组件与页面之间可以交互。 库作为组件的依赖,便捷的引用机制,降低了组件开发的复杂度且丰富了组件的功能。 组件可以通过桥接器调用后台接口,获取数据。 低代码平台通过组件、库、桥接器三类资产以及“事件-动作”机制,构建了高级页面的基本框架。 图8 组件、库、桥接器关系图 组件 组件是可复用的高级页面组成元素,一个高级页面由一个或多个组件搭建而成,可以通过拖拽组件快速搭建高级页面。如果将一个高级页面看成拼图游戏的完整图案,那么组件相当于拼图的每一小块。高级页面与组件的关系,如图9所示,其中Page为高级页面,Widget为高级组件。 图9 高级页面与组件的关系 高级页面中的组件,包括如下两类: 全局高级组件 全局高级组件是低代码平台为开发者提供的常用组件,主要包含图表、媒体(图片、视频)和文本等。更多关于全局高级组件的介绍,请参见全局高级组件。 自定义组件 若全局高级组件不能满足开发需求,低代码平台支持用户自定义组件。自定义组件开发方式,主要包含以下三类: 对全局高级组件的二次开发 低代码平台支持开发者下载全局组件,并在其基础上进行二次开发(如修改组件样式、逻辑等),完成后上传为自定义组件。通过这种方式,可以大幅度降低组件开发的工作量,详情请参见开发高级组件。 通过组件模板开发 若全局高级组件中,未包含所需要的组件类型,可以基于低代码平台提供的组件模板进行自定义组件的开发。组件模板中已为您构建组件的基本架构,详情请参见开发高级组件。 库 库是支撑高级组件运行的第三方依赖,若缺少相应的库,则组件不能正常运行。如果高级组件需要使用前端框架或组件库,例如流行的Vue(已预置)、Bootstrap、Element(已预置)等,需要将其制作成库资产,再上传到环境中使用。系统预置库及第三方库的引入方法,请参见如何引入第三方库。 桥接器 在进行前台页面开发时,经常要调用后台数据,例如购物车中用户的ID、订单编号、商品信息等。这时需要通过桥接器调用后台API,获取后台数据,详情请参见如何调用后台接口。 事件和动作 事件和动作都是组件的配置属性,用于实现组件之间的交互。例如,单击某个组件内的按钮,另外一个组件需要进行数据更新操作,或者是需要跳转到当前应用下的其他高级页面,这时需要通过事件和动作的机制来实现。单击按钮即是触发一个事件,数据更新操作或者页面跳转操作是一个动作,详情请参见如何实现组件交互。
  • 什么是高级页面 高级页面是由一个或者多个组件拼装而成。高级页面可以使用Widget组件进行组装和配置,方便用户达到自己想要的效果。高级页面支持多种框架,支持代码开发,比较自由,多用于对页面效果要求高的场景。 高级页面主要用于开发应用中较复杂的前端页面,例如包含图片、图表、视频、地图等元素的页面。您可以将高级页面应用于开发网站、电商平台等,通过拖拽、布局组件,并进行相关属性配置即可快速搭建应用。低代码平台中的高级页面,提供了常用组件,组件包含了预置的样式,并封装了基础事件代码,实现了开箱即用,避免重复写样式和事件代码,陷入代码细节,使开发人员更好的专注于业务场景的挖掘。
  • 初识高级页面开发界面 进入经典版应用设计器,将鼠标放在某个文件夹上,单击“+”,选择“高级页面”,即可新建一个空白高级页面或基于模板创建一个高级页面。页面创建后,自动进入高级页面开发界面,您可以阅读以下内容初步了解高级页面。 图1 高级页面开发界面 高级页面开发工作台,功能模块布局说明如下: 高级页面工具栏(序号1) 展示页面开发过程中的常用工具,如获取、释放锁,电脑端或者移动端页面设置等。 组件列表:用于展开、收起高级组件列表。 获取锁\释放锁:低代码平台提供了多人协同开发保护机制,即页面锁机制。在应用开发过程中除了新建页面,其它页面相关操作都必须先锁定页面,包括编辑页面、删除页面、下载页面、发布页面模板、复制页面、保存发布页面。同时,在进行页面设置前,必须先锁定页面设置。 多人协同操作页面,锁定规则如下: 锁定高级页面的前提:该页面未被他人锁定,且页面设置未被他人锁定。 锁定页面设置的前提:所有页面包括页面设置,未被他人锁定。 每个用户只允许锁定一个页面或页面设置。 电脑端\移动端:为了让同一页面能够更好的呈现于电脑端和移动端,低代码平台提供了高级页面的电脑端和移动端两种终端视图,用户可分别对高级页面的电脑端和移动端进行定制开发。开发完成后发布生成的高级页面为同一URL,当电脑端或移动端加载这一URL时,平台会自动检测用户所用的设备类型并加载相应视图页面。多终端适配的详细介绍,请参见如何适配多终端。 保存:保存当前开发页面的修改。 发布:发布当前开发的页面,页面发布后可以预览该页面的运行态效果。 页面修改、保存后,需再次执行发布操作,才能在应用和预览页面中体现修改内容。 预览:页面发布后,可以预览该页面运行态效果。 撤销\复原:页面开发过程中若出现误操作,可执行撤销、复原操作。 性能分析:低代码平台支持检查高级页面性能,生成性能报告页供开发者查看。 高级页面缩放比例:用于调节页面画布在开发工作台中的大小比例。 自动适应大小:自动适应页面画布在开发工作台中的大小比例。 网格线:开启画布网格线功能,用于标定组件在画布中的位置。 页面视图设置:设置高级页面的分辨率、网格大小、背景颜色和背景图片。 页面状态设置:设置页面的状态。 组件分类列表(序号2) 包含高级组件的功能分类,用于在开发高级页面时对组件进行筛选,方便组件查找与管理。组件列表分类默认包含图表、媒体、地图、文本、装饰等,可选择相应的分类来筛选高级组件。 高级组件展示、选择区域(序号2、3) 选定组件分类后,属于该功能分类的组件将显示在该区域。在该区域中,还包含了搜索框、应用场景、预置和自定义多种筛选条件。 搜索框:通过组件名称,可快速查询归属于当前选定组件分类中的高级组件。 图2 搜索框 应用场景筛选:可快速筛选不同应用场景的高级组件,当前应用场景包含通用、智慧园区、5G消息和其他等。 图3 应用场景筛选 预置和自定义筛选:用于筛选当前选定组件分类中,包括预置组件和用户自定义组件。 预置组件是低代码平台提供的全局高级组件,详情请参见全局高级组件。自定义组件为用户自主开发的高级组件,详情请参见开发高级组件。 画布 编辑页面内容及页面视图区域,可将组件从高级组件展示选择区域拖入该区域,快速搭建高级页面。此处以绝对布局方式的高级页面为例,流式布局相关操作方法请参见流式布局高级页面。 定位到所需组件后,便可以将其拖动到画布中,用于构建所需的高级页面。 图4 拖拽组件示例 在画布中,可以通过拖拽的方式调整组件的位置、大小。低代码平台还提供了组件对齐提示线,帮助布局组件。 图5 画布中调整组件示例 如上图中所示,在执行操作前请确保已获取当前页面的页面锁,未获取页面锁的状态下执行的所有操作都不能保存。当页面处于锁定状态下时,当前应用中其他页面均无法获取页面锁,若需要进行页面开发,请先释放页面锁。 组件的右键设置:在画布中选中组件,单击鼠标右键会弹出删除、复制、粘贴(若已复制组件)、格式刷、置于顶层、置于底层、高级设置选项。 删除:删除当前选中的高级组件,也可通过键盘中BackSpace键(退格键)和Delete键(删除键)实现。 复制:复制当前选中的高级组件,也可通过快捷键Ctrl+C实现。 粘贴:用于粘贴已复制的高级组件,也可通过快捷键Ctrl+V实现。 格式刷:用于复制当前选中组件的属性,应用于其他组件。可选的属性包含样式(边框、背景)、位置(距左、距上、高度、宽度)和其他属性。选定所需格式刷内容后,光标会变成刷子样式,单击所需格式刷组件即可。 图6 格式刷操作示例 置于底层/顶层:用于设置当前选中高级组件的堆叠顺序,即 CSS 中的z-index属性。仅绝对布局类型的高级页面,存在该设置选项。 高级设置:用于设置当前组件的样式属性,全局高级组件详细介绍,请参见全局高级组件。 组件属性设置区域 未选中画布中任何组件时,此模块显示内容为“当前视图组件列表”即当前页面中所布局的组件列表。您可以通过选择画布中或列表中的组件,切换到该组件的“组件属性设置”栏,进行当前选中组件的属性设置、数据设置、事件绑定和路由设置。 图7 组件属性设置操作示例 属性设置:组件基本属性设置,支持在自定义组件中添加自定义属性,详细介绍请参见开发高级组件。 表1 组件属性设置说明 类别 设置项 详细说明 基础 组件标题 设置该组件在“当前视图组件列表”中的组件标题。 组件名称 设置该组件在运行态时,DOM结构中widgetname属性。 位置(仅在绝对布局类型的高级页面中存在此设置) 距离左端 设置组件在画布中,距离画布左边的距离,单位为px。 距离顶端 设置组件在画布中,距离画布顶端的距离,单位为px。 宽度 设置组件宽度,单位为px。 高度 设置组件高度,单位为px。 堆叠顺序 设置组件堆叠顺序,即 CS S中的z-index属性,单位为px。当存在多个组件堆叠的情况时,可通过该设置项设置堆叠顺序,设置值较大的显示在上方。 边框 全边框 设置组件全边框,包含边框样式、宽度、颜色和弧度。 角边框 设置组件角边框,包含边框宽度、长度、颜色、弧度和边距。 背景 样式 设置组件背景图片的展示模式,包含普通、居中、拉伸和平铺。 图片链接 设置背景图片。 颜色 设置组件背景颜色。 数据设置:设置组件绑定的桥接器,以实现通过桥接器调用后台接口,获取后台数据,详情请参见如何调用后台接口。 事件绑定:设置在运行态,对该组件相关操作的事件触发的具体动作,详情请参见如何实现组件交互。 路由设置:当前该功能主要用于流式布局类型高级页面中的“路由导航”组件。
  • 自定义组件结构 自定义组件包,目录结构如下。 // 组件目录结构my-package.zip├── components| └── my-component // my-component 组件| ├── custom-property-editor // 自定义属性编辑控件(可选)| │ └── index.js //| ├── custom-panel // 自定义属性面板(可选)| │ └── index.js //| ├── design-time // 组件设计态代码(可选)| │ └── index.js //| ├── resources // 组件图片资源(可选)| │ └── default.png //| ├── index.js // 组件运行态代码| ├── my-component.json // 组件定义文件├── manifest.json // 组件清单文件└── README.md // 组件包说明文件 组件zip包的目录及文件的名称不能是中文,且编译后的组件包大小应在1M以内。 组件名遵循Vue组件命名,并且要在当前应用中唯一。您可参考Vue框架指南定义Vue组件代码,并参考Vue组件打包指南对Vue组件进行打包,打包后才能使用。 表1 组件包文件说明 目录/文件 是否可选 描述 custom-property-editor/index.js 可选 自定义属性的编辑控件。 custom-panel/index.js 可选 自定义属性的面板。 design-time/index.js 可选 组件设计态。 resources目录 可选 组件相关静态资源,如组件图片。 index.js - 组件运行态。 my-component.json - 组件定义文件。 组件包样例。 单击链接,可下载样例包。 图1 目录格式 组件描述文件。 组件描述文件test-project.json是自定义组件配置面板的规格文件,用于校验和辅助编写自定义组件配置面板json文件。该文件编写需遵循JSON Schema规范,以便于与主流的编辑器(vscode、atom、sublime text和webstorm)集成。 组件描述文件在插件包位置如下: 图2 组件描述文件 组件描述文件,既可以在插件包开发时修改,也可以在插件包编译以后修改。编译之后,组件描述文件的位置如下所示。 图3 编译后的组件描述文件位置 图4 组件描述 样例代码: { // 下面的属性会用于页面组件右侧属性中 "name": "my-component", "title": "%component.title%", "description": "%component.description%", "category": "add-on", "icon": { "default": "./resources/default.png", "hover": "./resources/hover.png" }, // ... 此处省略了组件的其他属性} 表2 组件约束 参数名 功能 限制 描述 name 组件名 需要以英文字母开头,支持数字与特殊字符“_”、“-”,不支持中文,长度在64字符以内。 建议由厂商名_组件名_版本号组成,例如aaa_img-button_1.1.1。 组件名会存放在界面元数据的type中,如type: "my-component1"。 配置文件中的名称,用于后台元数据存储、解析等。 zip包名应该与name值保持一致,例如此处name为img-button,zip包名必须为img-button.zip。 title 组件别名 建议简短并能展示组件特性,长度在100字符以内。 组件别名,会显示在标准页面开发界面左侧“组件”页签下的扩展组件中,建议简短并能展示组件特性。 description 组件描述 长度在200字符以内。 当鼠标悬停时,展示的组件描述信息。 category 组件分类 使用平台提供的组件分类。 为了保持界面构建器组件分类一致性,请使用平台提供的组件分类,具体请参考表3。 icon 组件图标 png格式,包括2个(未选中时和选中时),每个png的大小在16K以内。 在页面中展示的图标,自动压缩到40*40。 其他 包大小 编译后的组件包大小,需要在1M以内。 - 表3 组件分类 平台分类 说明 navigation 导航组件,例如菜单、工具栏或侧栏。 data 数据组件,可以查看和/或编辑应用程序中的数据,例如Form、Table或List。 common 通用组件,例如标签、图片、标题或段落。 container 容器组件,可以包含其他组件的容器。例如,栅格布局组件Row/Col、流式布局组件、Panel、Tabs、Collapse或WidgetContainer。 input 显示和编辑实体属性,例如文本框、日期选择器。 file 文件处理组件。例如,文件上传/下载组件、图片浏览组件或PDF预览组件。 button 触发动作的按钮,例如保存按钮、页面跳转按钮。 report 聚合数据并以表格或图表的形式显示,例如图表、透视表。 widget 业务卡片。 add-on 扩展组件。
  • 另存版本后进行定制 此处以“LoanRequest”为例进行说明,基于基线“1.0.1”版本另存一个“1.0.2”的定制版本。 参考登录经典应用设计器中操作,登录经典版应用设计器。 单击已创建的“LoanRequest”,进入BPM设计页面。 在页面上方,单击,禁用BPM。 单击页面上方的,进入另存为页面。 “类型”选择“新版本”,标签和名称与之前版本相同,单击“保存”。 系统自动进入新版本“1.0.2”的BPM设计页面。 图1 另存为新版本 当选择“新实例”时,是将原BPM重新另存并命名,新保存后为另一BPM,与选择“新版本”场景不同,适用于新建的BPM,基础BPM仍可使用。 在“1.0.2”版本的BPM设计页面,按需进行定制修改。 修改完成后,单击,进行保存。 单击,运行BPM,保证BPM运行结果符合预期。 符合预期后,单击页面上方的,启用新版本BPM。
  • 结果验证 在状态机编辑页面,单击,在右侧输入测试参数。 图10 测试 事件:状态机接收的事件,本示例配置为“temperature_obtain__e”。 事件信息:事件的输入参数,示例如下: { "temperature": 35, "dev_id": "c01v000000JzvtESDJFw"} 单击“发送”,如果高温报警事件“fire_alarm__e”,状态处于“High”,表示测试成功。
  • 前提条件 已创建温度监控设备对象“Conditioner__CST”,对象中id字段用于标识具体某设备(用户也可自定义某字段用于标识具体某设备,该字段必须是unique,即能够唯一标识一条记录),“current”字段用于标识设备记录的温度。 已创建温度监测事件“temperature_obtain__e”,该事件中自定义参数为“dev_id”(该字段必须为“Is Required”,用于匹配对象记录,字段类型需要和设备对象“Conditioner__CST”中标识具体某设备的id字段类型相同)和Number类型“temperature”,分别表示该区域的温度监控设备id和温度,具体操作步骤请参考如何自定义事件。 已创建高温报警事件“fire_alarm__e”,该事件中自定义参数为String类型“positionalarm”和Number类型“temperaturealarm”,分别表示高温报警位置和温度,具体操作步骤请参考如何自定义事件。
  • 通过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”),用于后续存储对象使用,具体操作请参见如何创建桶,请记录创建桶时选择的区域。
  • 背景信息 根据图元的不同使用场景,BPM图元可以分为以下三类: 事件(Events):驱动流程流转的事件图元,用来表明BPM的生命周期中发生的事件,例如开始、捕获信号等。 网关(Gateways):根据条件分发的网关图元。网关用来控制流程的执行流向,可理解为决策、判断。 活动(Activities):提供用户交互或系统调用的图元,是BPM的核心图元,可理解为节点或者步骤,例如调用脚本、用户需要做的任务。 图1 BPM组成图元
  • 抛出信号 当BPM执行到达“抛出信号”事件时,引擎向系统内部发出一个事件,事件发出后流程沿后续路线继续执行。抛出的信号,可以被“捕获信号”订阅处理。 使用该图元时,需要配置抛出的具体事件,并需要在“输入参数”配置事件参数。 图3 抛出信号的“事件配置”页面 事件:请选择待发送的事件。 分区字段:从事件中选择一个自定义参数用作分区字段,根据该字段值进行路由,相同的值将路由到同一个分区。如果不指定,则默认随机路由到不同分区,从而提升并发处理性能。 目标/源:配置事件的数据,即为事件自定义参数赋值,将“源”取值赋值到“目标”中。
  • 排他网关 排他网关用来在流程中,实现一组分支的唯一决策。系统将按照“条件顺序”评估流出网关的分支,流程会执行第一个连线条件被评估为true(当多个条件为true时,将执行第一个决策)的分支,并且不再继续评估下面的分支。如果所有分支条件决策都为false且该网关定义了一个默认的连线,那么该默认分支将被执行。如果没有可到达的分支,抛出异常,流程被中断,在BPM设计上应避免这种情况发生。 图1 排他网关配置页面 图2 分支连线配置
  • 定义页面数据模型 打开一个标准页面,在标准页面的左下方,单击“模型视图”。 在“模型视图”中,单击“新增模型”。 添加模型,定义模型名称与来源,单击“下一步”,如图1所示。 图1 定义模型 低代码平台支持四类模型(如图1),每类模型都包含参数定义和方法定义。方法是在模型上定义的API,通常会在前台组件关联的事件脚本(例如页面加载事件、鼠标单击事件)中调用这些API,以实现某些功能。 表1 模型来源说明 分类 模型说明 模型参数的定义 模型方法的定义 API调用方法 自定义函数 开发者自由定义的模型。 由开发者自定义,可以添加子节点。 开发者自定义方法。 $model.ref("modelName").actionName(); 对象 由Object对象表映射生成,关于对象模型的更多信息请参考3.1 了解对象模型。 系统自动获取Object所有的字段,开发者可以从中选择部分字段作为参数。 系统自动生成查询、保存、删除和统计四个方法。 $model.ref("modelName").query(param); $model.ref("modelName").save(); $model.ref("modelName").delete(); $model.ref("modelName").count(); 服务 服务模型是由后台服务映射生成的。当前支持与服务编排或脚本映射,关于服务模型的更多信息请参考7.1 什么是服务编排和8.1 什么是脚本?。 参数根据后台服务的入参、出参映射生成为inputParam和outputParam节点。 系统自动生成run方法 ,用于执行模型关联的服务编排或脚本。 $model.ref("modelName").run(); 事件 事件模型是由后台事件的字段映射生成的,并且支持websocket刷新模型数据。 参数根据后台事件的字段映射生成。 直接使用 直接使用 除了在模型中定义的方法,低代码平台还提供了如下标准API,适用于所有的模型。 获取模型数据:$model.ref("modelName").getData(); 设置模型数据:$model.ref("modelName").setData(); 设置模型字段值:$model.ref("modelName").setValue(key,value); 在新建模型“设置”页面,执行如下操作。 若上一步来源选择“自定义函数”,需要添加子节点自定义参数及类型。 若上一步来源选择“对象”,需要配置模型关联的对象以及字段。 若上一步来源选择“服务”,需要配置模型关联的后台服务,可以是脚本、服务编排或者具体的API。 若上一步来源选择“事件”,需要配置模型关联的事件以及事件字段。 单击“下一步”,设置方法。 方法一般无需添加,如需添加或修改,可参考对象和服务默认生成的方法。 设置完成后,单击“确定”。
  • 步骤1 创建WebSocketAlarmEvent告警事件 创建事件。 参考登录经典应用设计器中操作,登录经典版应用设计器。 将鼠标放在应用的Logic文件夹上,单击加号,选择“事件”。 单击事件后的,进入添加事件页面。 选择“创建新事件”,输入标签和名称“WebSocketAlarmEvent”,单击“添加”。 单击名称对应的输入框,系统会根据标签自动生成名称。系统实际创建的事件名称为“CNAME__WebSocketAlarmEvent__e”,其中“CNAME__”为租户命名空间namespace,“__e”后缀代表是自定义事件。 图3 添加WebSocketAlarmEvent事件 在事件详情页面,选择“自定义参数”页签,单击“新建”。 设置标签、名称和字段类型,单击“保存”,添加事件自定义参数AlarmTitle。 图4 添加事件自定义参数 重复3中操作,创建事件自定义参数AlarmContent、AlarmDate。 表3 事件自定义参数说明 标签 名称 字段类型 AlarmContent 单击名称对应的输入框,系统根据标签自动生成名称。 文本 AlarmDate 单击名称对应的输入框,系统根据标签自动生成名称。 日期/时间 启用告警事件。 在事件详情页面,选择“基本信息”页签。 单击页面右上方的“启用”,启用该事件。 启用成功后,“启用”按钮会变为“禁用”按钮,同时“是否启用”标签变为状态。 图5 启用告警事件 消息事件只有启用成功后,该事件在服务编排或WebSocket中,才会有效。事件启用后,不可编辑,若需要对事件进行参数修改,请先单击“基本信息”下的“禁用”按钮,禁用该事件。
  • 步骤2 创建WebSocketAlarmFlow告警服务编排 创建WebSocketAlarmFlow告警编排以触发事件,并在服务编排中配置全局变量和系统(日期/时间)变量为事件传递参数。 如果想快速了解和验证WebSocket使用,可不必创建WebSocketAlarmFlow告警服务编排,采用消息事件的测试功能进行简单验证。您可以直接跳过该步骤,直接执行3,并采用方法一:直接触发事件验证进行效果验证。 创建编排。 参考登录经典应用设计器中操作,登录经典版应用设计器。 将鼠标放在应用的Logic文件夹上,单击加号,选择“服务编排”。 选择“创建一个新的服务编排”,输入标签“WebSocketAlarmFlow”,单击“添加”。 单击名称对应的输入框,系统会根据标签自动生成名称。 图6 创建服务编排WebSocketAlarmFlow 在服务编排画布左侧,单击“基本”,将“发送事件”图元拖入画布中。 图7 拖入“发送事件”图元 添加添服务编排变量。 选中“发送事件”图元,单击画布右侧。 单击“全局上下文”,进入上下文页面。 单击“变量”后的,添加表4中变量。 图8 配置全局变量 表4 告警服务编排的变量 名称 数据类型 AlarmTitle 文本 AlarmContent 文本 在“发送事件”图元中,配置1中创建的事件CNAME__WebSocketAlarmEvent__e(需替换为用户实际创建的事件名称)。 参考下图配置输入参数,通过全局变量AlarmTitle和AlarmContent及系统变量$Flow.CurrentDateTime为事件传参。 图9 事件图元的配置 连接所有图元。 图10 连接图元 选中“开始”图元,单击,参考下图配置服务编排的入参。 入参是从全局上下文的变量中拖入,告警服务编排的入参有AlarmTitle和AlarmContent两个。 图11 配置入参 单击页面上方的,保存服务编排。 单击,启用服务编排。 服务编排只有启用后,才会生效。服务编排在启用后,不可编辑,若需要对其中的图元或参数进行修改,请先单击,禁用该服务编排。
  • 方法二:服务编排触发事件验证 在Logic文件夹中,打开WebSocketAlarmFlow服务编排。 在服务编排页面右上角,单击,运行该服务编排。 在弹出页面的输入参数中,输入如下AlarmTitle和AlarmContent参数值,单击“运行”。 "AlarmTitle": "设备告警", "AlarmContent":"设备C1 本地数据库出错" 图19 服务编发触发事件验证 切换到monitor预览页面,可观察到monitor页面已接收并显示该告警消息。 图20 服务编发触发事件验证效果图
  • 方法一:直接触发事件验证 在Logic文件夹中,打开WebSocketAlarmEvent事件。 在“基本信息”中,单击“发送事件”。 图16 发送事件 在“发送事件测试”页面中,输入参数信息(AlarmDate会自动获取系统日期时间,也可手工编辑修改),单击“发送”。 { "AlarmTitle": "设备告警", "AlarmContent":"设备C1 本地数据库出错", "AlarmDate":"2020-12-12 17:09:20"} 图17 测试发送 切换到monitor预览页面,可观察到monitor页面已接收并显示该告警消息。 图18 直接触发事件验证效果图
  • 记录创建 “记录创建”图元用于新增平台对象的实例记录,类似于数据库中的INSERT INTO命令。系统提供了以下两种模式,新增对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的值,创建实例记录。 图5 对象模式创建 条件模式:需要先指定对象并为对象的字段赋值,来创建记录。如下图所示,为“Account”对象新增实例记录,在变量“id”中保存新建的记录ID。 图6 条件模式创建
  • 记录删除 “记录删除”图元能够删除平台对象的实例记录,类似于数据库中的DELETE命令。系统提供了以下两种模式,删除对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,使用该对象变量或对象变量数组的记录ID,删除对应的对象记录。 图11 对象模式 条件模式:需要指定对象并在条件中,设置指定对象部分字段的值,根据条件删除符合条件的对象记录。 图12 条件模式
  • 邮件 当流程到达“邮件”任务时,系统自动发送邮件,完成后继续执行后续路线。 使用邮件图元,需要提前配置租户的默认邮件服务器,具体操作请参考服务编排、BPM、脚本中发送邮件功能不可用。 图19 调用邮件页面 邮件配置:支持“直接编辑”手动设置邮件信息或“基于模板”选择邮件模板。 模板:当“邮件配置”设置为“直接编辑”时,需要配置邮件标题。 内容:当“邮件配置”设置为“直接编辑”时,需要配置邮件内容。 主题:当“邮件配置”设置为“基于模板”时,需要选择邮件模板。 地址:设置接收人的邮箱地址。 文本:直接输入邮箱地址,多个地址请用分号分隔,或者从全局上下文拖拽变量代表一个接收人的邮箱地址。 集合:可以从全局上下文拖拽集合变量,集合变量即数组型变量,表示多个接收人的邮箱地址。在定义变量时,勾选“是否为数组”,则该变量被定义为集合变量。 图20 集合 抄送:抄送人的邮箱地址。 密送:密送人的邮箱地址。 是否同步发送:是否开启同步发送功能。
  • 记录更新 “记录更新”图元用于更新平台对象的实例记录,类似于数据库中的UPDATE命令。系统提供了以下两种模式,更新对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,并将该对象变量或对象变量数组拖拽到“变量”输入框中,即可根据对象变量中的记录ID,将对象变量更新到数据库中,更新的值来源于对象变量中的值。如下图所示,根据对象变量数组“account”中的记录ID,将对象变量中的值更新到数据库中。 图9 对象模式 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,在赋值中设置需要更新的目标字段及更新值,最后根据条件查找符合条件的对象记录并将赋值中的值更新到数据库中。 图10 条件模式
  • 调用脚本 当流程到达“调用脚本”任务时,系统自动执行脚本,完成后继续执行后续路线。 使用该图元时,需要选择具体调用的脚本,配置输入输出参数。 图13 调用脚本配置页面 流程编排中只允许调用当前应用工程下的资源(例如脚本、服务编排),调用脚本中可供选择的脚本和该流程编排都处于同一应用下。 例如,流程编排A中需要调用脚本B,请确保A和B处于同一应用中。若需要调用的资源不在同一应用中,则在流程编排A所在的应用中新建脚本B,或选择“使用已有脚本”导入脚本B。再在流程编排A中,使用“调用脚本”图元调用该脚本。 图14 使用已有脚本新增脚本
  • 记录查询 “记录查询”图元用于根据条件查询平台对象的实例记录,类似于数据库中的SELECT命令。系统提供了以下两种模式,查询对象实例记录: 对象模式:需要先单击,在“对象变量”中定义一个对象变量或者对象变量数组,将该对象变量或对象变量数组拖拽到“变量”输入框中,并设置条件以及选择排序方式,即可实现根据条件和排序方式,将查询结果保存在对象变量中。如下图所示,根据条件查询对象数据,并将查询结果保存在对象变量数组“account”中。 图7 对象模式查询 条件模式:需要指定对象并在条件中设置指定对象部分字段的值,根据条件查询符合条件的对象记录,并赋值到设置的变量上。 图8 条件模式查询 对象:查询的具体对象名。 剔重:若查询记录有重复值,是否需要删掉重复记录只保留一条记录。 条件:选中对象后,该条件区域“字段”列会出现该对象的字段。单击“新增行”,可设置查询数据的条件。 在“字段”中选择要进行判断的对象字段,在“比较符”中选择相应的比较符,“值”则可从全局上下文拖拽变量或者直接输入“{!变量名}”。 排序字段/顺序:使查询结果根据某个字段进行升序或者降序排序。 记录行的偏移量:分页,跳过前n条记录,从第n+1条记录开始。 记录行的最大数目:分页,每页最多显示的记录数。 记录的总行数存入变量:限定查询出来的总记录数,存入变量中。 (输出)源/目标:输出的结果。其中,“源”为需要查询的字段,查询结果需要保存到设置的变量中,“目标”为设置的变量。 无记录时配置空值:当根据条件查询无记录时,则变量为空值。
  • 规则 该图元根据决策表的配置生成一定的规则,后续根据规则的输出连接网关路由到不同的其他图元节点,当流程到达“规则”任务时,系统根据该规则路由到不同的路线。 使用该图元时,需要选择具体使用的决策表,决策表的创建请参见如何创建决策表。 图16 调用规则配置页面 规则实现 实现类型:规则基于决策表生成,请选择决策表类型。 引用:决策表的输入参数名称。此处只能使用当前项目依赖BO中,公开的及全局的已启用的决策表。 输入参数 目标:决策表的输入参数名称,直接在下拉框中选择即可。 源:BPM中的变量,为目标赋值。可以直接填写,也可以拖入全局上下文变量,将BPM中的变量赋值给决策表中的输入参数。 输出参数 目标:决策表的输出参数名称,直接在下拉框中选择即可。 源:BPM中的变量,将决策表中的输出参数赋值给BPM中的变量。 例如,在问题单流程中,问题单的BPM设计流程如下,业务的流转通过规则图元(即“步骤选择”)驱动,不同的规则输出不同的步骤取值,根据步骤取值路由到不同的步骤中。 图17 问题单流程
  • 用户任务 用户任务用来表示,业务流程中由用户参与完成的工作。当引擎处理到该节点时,给指定的用户(参与者)或者一组用户(如某泳道的工作队列)创建待处理的任务项,等待用户的处理。 在用户任务配置界面,配置任务接收人和活动界面。 图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”系统变量,即将执行最高得票的审批结果。 默认结果:审批百分比(已审批的人数/总的有效审批人数)未达到“投票结果门槛”百分比时,默认的审批结果。当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 结果触发方式:当审批类型为“会签:每个分配人都需要审批”时,该参数才会显示。 当最小百分比满足时,立即触发投票结果。 等待所有投票完成,触发投票结果。 候选动作:设定一些候选的动作为默认审批结果。 当存在以下动作时立即终止任务:当存在设定的某个或者某些动作时,立即终止任务。 自动审批:该用户任务是否自动审批。 流程触发人自动通过:通过接收人“类型”和“参与者”已设置用户任务的接收人后,若勾选自动审批中“流程触发人自动通过”,接收人正好是流程触发人时,该用户任务会被自动审批。 已审批过该流程的审批人自动通过:通过接收人“类型”和“参与者”已设置用户任务的接收人后,若勾选自动审批中“已审批过该流程的审批人自动通过”,接收人在当前BPM实例中已审批过其他用户任务,则该用户任务会被自动审批。 当前自动审批功能,只支持接收人为某一用户,可使用表达式的形式指派某一具体用户,使用自动审批功能。 自动审批时默认选择的动作:勾选自动审批时,可设置自动审批默认选择的动作。 动作配置:为该用户任务配置前置或者后置动作。 图2 动作配置 前置动作:流程执行该用户任务前执行的动作。 触发条件:触发该动作的条件表达式。 动作类型:动作的类型。 通知经理:发邮件通知经理。当选择该类型时,需要配置“邮件模板”。 通知分配人:发邮件通知任务分配人。当选择该类型时,需要配置“邮件模板”。 调用服务编排:调用服务编排。当选择该类型时,需要配置具体的服务编排以及输入参数。 调用脚本:调用脚本。当选择该类型时,需要配置具体的脚本。 发送事件:发送某一事件。当选择该类型时,需要配置具体的事件。 转移:将该用户任务转移给其他用户或者工作队列的用户处理。当选择该类型时,需要配置“接收者类型”以及“接收者”。 设置状态:设置该用户任务的状态。当选择该类型时,需要配置具体的状态。 完成任务:完成某一任务,超期会自动完成任务。 后置动作:流程执行该用户任务后,执行的动作。请参考“前置动作”进行配置。 数据映射:对该用户任务的输入输出参数,进行数据映射。 图3 数据映射 SLA:为用户任务设置定时器,时间逾期可增加紧急程度并执行相应动作。 图4 启用SLA定期器 开始时间:定时器的开始时间。 任务创建后 由变量指定:通过指定时间变量,来确定开始时间。 由表达式指定:开始时间支持表达式,例如支持特定时间的相对时间,设置为“STRING2TIME('yyyy-MM-dd hh:mm:ss.S', {!variable1})”。动态指定时间的相对时间,设置为“TIMEADD({!$Flow.CurrentDateTime}, 100)”。 目标期限:任务在目标期限内且即将过期时,满足触发条件后触发一个指定的动作。 截止限期:任务过期,满足触发条件后触发一个指定的动作。 紧急程度:定时器的紧急程度。 动作:时间逾期后执行的相应动作。单击“添加”新增动作。 触发条件:触发该动作的条件表达式。 动作类型:动作的类型。 通知经理:发邮件通知经理。当选择该类型时,需要配置“邮件模板”。 通知分配人:发邮件通知任务分配人。当选择该类型时,需要配置“邮件模板”。 调用服务编排:调用服务编排。当选择该类型时,需要配置具体的服务编排以及输入参数。 调用脚本:调用脚本。当选择该类型时,需要配置具体的脚本。 发送事件:发送某一事件。当选择该类型时,需要配置具体的事件。 转移:将该用户任务转移给其他用户或者工作队列的用户处理。当选择该类型时,需要配置“接收者类型”以及“接收者”。 设置状态:设置该用户任务的状态。当选择该类型时,需要配置具体的状态。 赋值:给用户的任务赋值。 完成任务:完成某一任务,超期会自动完成任务。
  • 子流程 子流程任务是一个特殊的自动化容器任务,其内在包含了对子流程(Sub Process)的创建、启动和调度管理。 当流程到达子流程任务时,按照配置策略自动启动子流程实例,父流程的该分支中断,在这里等待子流程实例全部结束后继续执行后续路线。 子流程模型可以再包含调用子流程,成为每层嵌套的多级流程。 图22 子流程实例 调用活动和子流程图元都是BPM的内嵌子流程,区别是:调用活动则把子流程当做一个黑盒,通过参数传递进行调用;内嵌子流程则直接在当前流程中规划出一个子流程,子流程可共享父流程的变量。可用于流程步骤的划分、封装和复用。 内嵌子流程中,使用“终止”事件只终止当前内嵌子流程。
  • 脚本启动 在脚本代码中,导入BPM的脚本库,通过下面脚本代码方式启动。 import * as bp from "bp";//......(其他代码)const client = bp.newInstanceClient(); client.start(BPM名称, BPM版本号, BPM中定义的变量); 脚本样例如下: import * as bp from 'bp';let client = bp.newInstanceClient();let res = client.start("test", "1.0.1", { "foo": 1, "bar": 3}); 输出样例如下: { "interviewId": "002N000000FdtN6xwgjI", "screen": { "allowBack": false, "allowFinish": true, "allowNext": true, "allowPause": false, "helpText": "", "label": "input phone number", "name": "inputphonenumber", "pausedText": "", "screenFields": [ { "dataType": "text", "defaultValue": "135xxxxxxxx", "fieldType": "InputField", "helpText": "", "isRequired": false, "label": "phone number", "name": "phoneNumber" } ] }
  • 接口启动 通过调用BPM的Rest接口“http://AstroZero对外提供的默认 域名 /u-route/baas/bp/v2.0”,进行启动。 接口URI:POST AstroZero域名/u-route/baas/bp/v2.0/runtime/instances 表1 请求参数 参数 是否必选 参数类型 描述 name 是 String BPM的名称,在界面处创建BPM时配置的名称。 version 否 String BPM版本号,为可选参数,因为一个BPM可以存在多个版本。如不带版本号,表示运行当前启用的版本。 variables 否 Object BPM元数据中定义的变量,包括自定义变量和系统变量, key-value形式,key为变量名字,value为变量的值。如果需要在启动BPM前设置BPM的变量,可以填写该参数。如需启动时设置变量,可以在variables中设置系统变量$Flow.BusinessKey;如需设置工作流的title,可以设置系统变量$Flow.Title。 表2 响应参数 参数 参数类型 描述 resCode String 返回码,如果返回“0”代表请求成功。 resMsg String 返回消息,如果成功状态,通常会返回“Success”,其他情况会返回具体的错误信息。 result Object 在成功请求时会有内容,返回启动BPM之后,BPM实例的运行信息。 例如,创建并启动了一个BPM,BPM名称为“createCloudOK_NEW”,版本号为“1.0.1”,带有4个启动参数。 请求示例 POST AstroZero域名/u-route/baas/bp/v2.0/runtime/instances { "name":"createCloudOK_NEW", "version":"1.0.1", "variables":{ "name":"sun", "memorySize":"15", "storageSize":"15", "expiryDate":"2018-12-12" }} 响应示例 { "resCode":"0", "resMsg":"Success", "result":{ "name":"bpName1", "version":"1.0.1", "id":"002N000000Sy2NphoRbU", "processDefID":"001L000000S8Yi3xG9Gi", "interviewLabel":"BP Label 1", "nextElem":"subProcess", "isTest":true, "state":"Dispatched", "bpStatus":"New", "urgency":0, "taskOutcome":"", "businessKey":"002N000000Sy2NphoRbU", "startTime":"2019-08-27 10:53:04", "endTime":"", "Ext1":"", "Ext2":"", "Ext3":"", "Ext4":"", "Ext5":"", "Ext6":"", "Ext7":0, "Ext8":0, "suspended":false, "isClosed":false }}
  • 在BPM设计页面启动工作流 参考登录经典应用设计器中操作,登录经典版应用设计器。 在BPM所在目录下,单击对应的BPM,进入BPM编辑器。 图1 单击待启动的BPM 在BPM设计页面,单击页面上方的,启动该BPM。 在BPM设计页面,可以通过如下两种方式启动。 自定义:将BPM的“开始”图元的开始类型设置为“自定义”启动,不指定事件的起因,即不需要指定触发条件,主要用于接口调用进行启动。 图2 自定义 表单:使用表单或页面,启动BPM。选择该项时,需要配置具体的表单、标准页面或高级页面。 图3 表单
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全