
# 创建并开发BPM
工单管理开发中，工单流转BPM设计大致如下。
1. 根据业务角色不同，使用不同的工作队列，创建客服人员、派单员以及维修人员3个泳道。
   图1工单BPM设计界面   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675046.png "点击放大")
   通过在不同的泳道中，拖拽功能图元，然后通过配置图元属性，以及需要调用关键脚本逻辑，将前端页面中获取到的数据传回到后端的工单对象中，以完成工单流转的全过程。图元之间调用关系及工单流转过程，如[表1]所示。
    表1图元调用关系及工单流程过程 
   | 序号 | 图元名称        | 图元类型 | 图元作用                                       | 下一步流转                                                                                                                                                                                                                                                                  |
   |:---|:---|:---|:---|:---|
   | 1  | Start       | 开始   | 用户在创建工单页面，填写工单信息并单击"提交"按钮后，触发该图元，并将工单信息传入。 | 携带工单信息流转到"Data Mapper"图元。                                                                                                                                                                                                                                              |
   | 2  | Data Mapper | 数据映射 | 将当前BPM的ID赋值给工单对象中BPM的ID字段。                 | 携带工单信息、BPM的信息流转到"创建工单"图元。                                                                                                                                                                                                                                              |
   | 3  | 创建工单        | 调用脚本 | 调用"创建工单"脚本，根据传入的工单信息，完成工单创建。               | 工单创建完毕后，流转"派单员派单"图元。                                                                                                                                                                                                                                                   |
   | 4  | 派单员派单       | 用户任务 | 将创建成功的工单，流转到派单员的派单页面（派单员队列中的用户均可进行派单）。     | 单击"派单"按钮，选择需要指定的"维修人员"后，将派单信息流转到"派单"图元。                                                                                                                                                                                                                                |
   | 5  | 派单          | 调用脚本 | 调用"派发工单"脚本，根据传入的派单信息进行工单信息（当前处理人/状态）的修改。   | "派发工单"脚本执行后，会返回维修人员的用户Id，工单将流转到"维修人员"图元。                                                                                                                                                                                                                               |
   | 6  | 维修人员接单      | 用户任务 | 将派发成功的工单流转到指定的维修人员的工单处理界面。                 | 单击"处理"按钮，进行工单的处理，可选择"接单"或"拒单"，并将处理信息流转到"接单"图元。                                                                                                                                                                                                                         |
   | 7  | 接单          | 调用脚本 | 调用"处理工单"脚本，根据传入的处理信息进行工单信息（当前处理人/状态）的修改。   | "处理工单"脚本执行后返回处理结果，并将处理结果流转到"Exclusive"排他网关图元，进行下一步判断。                                                                                                                                                                                                                  |
   | 8  | Exclusive   | 排他网关 | 根据脚本返回的处理结果进行判断，执行不同的流程。                   | - 如果脚本返回结果为"接单"，将流转到"维修人员关单"图元。  - 如果脚本返回结果为"拒单"，将重新流转回"派单员派单"图元，重新进行派单。   |
   | 9  | 维修人员关单      | 用户任务 | 将接单成功的工单流转到接单的维修人员的工单处理界面。                 | 对于处理中状态的工单，单击"处理"按钮，进行工单的处理，即进行关闭操作，将处理信息流转到"关闭工单"图元。                                                                                                                                                                                                                  |
   | 10 | 关闭工单        | 调用脚本 | 调用处理工单脚本，根据传入的处理信息，将工单状态修改为关闭。             | 关闭工单成功后，将流转到结束图元。                                                                                                                                                                                                                                                      |
   | 11 | End         | 结束   | 整个流程执行完毕。                                  | -                                                                                                                                                                                                                                                                      |
      
   
#### 操作步骤
创建流程大致是先创建3个泳道，再拖拽泳道图元，然后配置相关图元，保存并启用。
1. 在"我的应用"中，单击"设备维修管理系统"，进入应用。
2. 在"WorkOrder"目录中，将鼠标放在"Bpm"上，单击界面上出现的"+"，在弹出菜单中选择"BPM"。
3. 在弹窗中，设置"标签"、"名称"为"WorkOrderBpm"，单击"添加"。 
   图2添加BPM   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001435804530.png "点击放大")
   
   
4. 在设计区域，单击2次"AddLane"，为BPM添加2个角色泳道。 
   图3添加泳道   
   ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071781.png "点击放大")
   
   
   
5. 修改泳道基础属性。 
   1. 选中"Lane"，在右侧属性配置区域，设置泳道标签为"客服人员"，"工作队列"设置为[创建工作队列](https://support.huaweicloud.com/bestpractice-astrozero/astrozero_07_1007.html)中创建的"客服人员"。
      图4修改客服人员泳道基本信息   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151858.png "点击放大") 
   
   2. 参考上一步，分别设置其他两个泳道的"标签"及"工作队列"。
   
   
   表2泳道标签及工作队列 
   | 泳道初始标签       | 泳道修改后标签 | 工作队列 |
   |:---|:---|:---|
   | Lane（上一步已配置） | 客服人员    | 客服人员 |
   | lane1        | 派单员     | 派单员  |
   | lane2        | 维修人员    | 维修人员 |
      
   
   
6. 创建BPM中用的变量及对象变量。 
   1. 在右侧属性面板区域，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911473.png)，展开全局上下文。
      图5展开全局上下文   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231301.png) 
   
   2. 单击"变量"后的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992606.png)![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992582.png)图标4次，分别创建以下变量，单击变量后的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991193.png)，可以修改字段类型，创建完成后，如[图6]所示。
      表3BPM变量 
      | 变量名         | 字段类型 |
      |:---|:---|
      | id          | 文本   |
      | status      | 文本   |
      | assignedFme | 文本   |
      | transInfo   | 任意   |
         
      图6创建变量   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231277.png) 
   
   3. 单击"对象变量"的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911509.png)，在弹窗中设置"名称"为"workOrderData"，"对象"设置为"***HW__*** WorkOrder__CST"（工单对象），加粗斜体内容请以实际命名空间前缀为准，然后单击"保存"。
      图7新增对象变量   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991245.png "点击放大") 
   
   4. 再次单击"对象变量"的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991225.png)，在弹窗中设置"名称"为"statusInfo"，"对象"设置为"***HW__***WorkOrder__CST"（工单对象），然后单击"保存"。
   
   
   
   
7. 拖拽并配置"客服人员"泳道。 
   1. 从左侧"活动"图元区域，拖拽一个"数据映射"图元到"客服人员"泳道中。
   
   2. 选中"Data Mapper"图元，然后在右侧导航菜单上单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071765.png)，进入数据映射配置，再单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151874.png)，展开全局上下文。
      图8拖拽并设置"数据映射"图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911505.png "点击放大") 
   
   3. 分别从全局上下文的"对象变量"、"系统变量"中拖拽参数到数据映射配置下：
      拖拽对象变量"workOrderData"下的"***HW__*** instanceId__CST"字段到"变量"下，"操作符"为"="，拖拽"系统变量"下的"{!$Flow.RootID}"作为"值"。
      图9拖拽赋值变量   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071797.png "点击放大") 
   
   4. 从左侧"活动"图元区域，拖拽一个"调用脚本"图元到"客服人员"泳道中，并设置"标签"为"创建工单"、"名称"为"createWorkOrder"。
      图10设置创建工单图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231293.png "点击放大") 
   
   5. 选中"创建工单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483231269.png)，再单击"全局上下文"，配置"创建工单"图元绑定的脚本以及输入输出参数。
      1. 在"脚本配置"下选择"生成工单"脚本"***HW__***createWorkOrder"。
      
      2. 从全局上下文中拖拽对象变量"workOrderData"到"输入参数"的"源"输入框中，作为输入参数的值。
      
      3. 设置"输出参数"为"id"，并拖拽变量"id"作为"目标"输入框中的值。
      
      
      图11配置"创建工单"图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991261.png "点击放大") 
   
   6. 从"Start"图元中拖拽一条连线到"Data Mapper"图元，然后从"Data Mapper"图元拖拽一条连线到"创建工单"图元，默认"连线类型"为"下一步"。
      图12拖拽连线   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151854.png "点击放大") 
   
   
   
   
8. 拖拽并配置"派单员"泳道。 
   1. 从左侧"活动"图元区域，依次拖拽一个"用户任务"、"调用脚本"图标到"派单员"泳道中。
   
   2. 设置"用户任务"图元的"标签"为"派单员派单"、"名称"为"dispatchWorkOrderList"。
   
   3. 设置"调用脚本"图元的"标签"为"派单"、"名称"为"dispatch"。
   
   4. 选中"派单员派单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071769.png)，设置"任务标题"、"任务描述"为"派单员派单"，"渲染类型"为"标准页面"，"页面"设置为"***HW__*** dispatchWorkOrder"。
      图13用户任务配置   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001961975201.png "点击放大") 
   
   5. 选中"派单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911497.png)，再单击"全局上下文"，配置"派单"图元绑定的脚本以及输入输出参数。
      1. 在"脚本配置"下选择"生成工单"脚本"***HW__***dispatchWorkOrder"。
      
      2. 从全局上下文中，拖拽变量"transInfo"到"输入参数"的"源"输入框中，作为输入参数的值。
      
      3. 在"输出参数"下，单击"新增行"，设置"输入参数"为"id"、"assignedFme"，并从全局上下文中，**拖拽** 变量"id"、"assignedFme"作为"目标"输入框中的值。
         图14配置"派单"图元   
         ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151894.png "点击放大") 
      
      4. 从"派单员派单"图元中拖拽一条连线到"派单"图元，然后再从"创建工单"图元中拖拽一条连线到"派单员派单"图元，默认"连线类型"均为"下一步"。
         图15拖拽连线   
         ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992622.png "点击放大") 
       
   
   
   
   
9. 拖拽并配置"维修人员"泳道。 
   1. 从左侧"活动"图标区域，拖拽2个"用户任务"、2个"调用脚本"、1个"排他网关"以及"终止"图元到"维修人员"泳道中，然后调整图元顺序。
      图16拖拽并调整图元顺序   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991241.png "点击放大") 
   
   2. 从左到右，分别设置2个"用户任务"、2个"调用脚本"图元的基本属性，具体如[表4]所示，设置完成后如[图17]所示。
       表4图元基本属性设置 
      | 图元（从左向右） | 标签     | 名称             |
      |:---|:---|:---|
      | 用户任务1    | 维修人员接单 | takeWorkOrder  |
      | 调用脚本1    | 接单     | takeWorkOrder1 |
      | 用户任务2    | 维修人员关单 | dealWorkOrder  |
      | 调用脚本2    | 关闭工单   | closeWorkOrder |
      | 终止       | End    | end            |
         
      图17图元基本属性设置   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991221.png "点击放大") 
   
   3. 配置"维修人员接单"图元。
      选中"维修人员接单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432834986.png)，并展开全局上下文，配置"维修人员接单"图元，详细配置如[表5]所示。
      图18用户任务配置   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432675002.png "点击放大")
       表5用户任务配置 
      | 参数项      | 值                                                                                                          |
      |:---|:---|
      | 任务标题     | 维修人员接单                                                                                                     |
      | 任务描述     | 维修人员任务列表                                                                                                   |
      | 渲染类型     | 标准页面                                                                                                       |
      | 页面       | ***HW__***workOrderListM                                                                                   |
      | 接收人下"类型" | 名称和表达式                                                                                                     |
      | 参与者下"类型" | 表达式                                                                                                        |
      | 参与者下"取值" | "变量"下的"assignedFme" 请直接从全局上下文拖拽"assignedFme"到"取值"下，请勿手动输入，手动输入的值系统可能不识别。 |
         
      
   
   4. 配置"接单"图元。 选中"接单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432834990.png)，再单击"全局上下文"，并展开全局上下文，配置"维修人员接单"图元，详细配置如[表5]所示。
      请直接从全局上下文拖拽"statusInfo"、"id"、"status"到输入输出参数对应"源"或"目标"下，请勿手动输入，手动输入的值系统可能不识别。
      图19配置"接单"图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151898.png "点击放大")
      表6接单图元配置 
      | 参数项              | 值                           |
      |:---|:---|
      | 脚本               | ***HW__***modifyOrderStatus |
      | 输入参数"statusInfo" | 对象变量下"statusInfo"           |
      | 输出参数"id"         | 变量下"id"                     |
      | 输出参数"status"     | 变量下"status"                 |
         
      
   
   5. 配置"维修人员关单"图元。 选中"维修人员关单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432674998.png)，设置"任务标题"为"维修人员关单"，"任务描述"为"维修人员任务列表"，"渲染类型"为"标准页面"，"页面"设置为"***HW__*** workOrderListM"，并设置"当前泳道中的上一个任务被分配的人员"，如[图20]所示。
      图20配置"维修人员关单"图元   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432992602.png "点击放大") 
   
   6. 配置"关闭工单"图元。 选中"关闭工单"图元，单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482911529.png)，再单击"全局上下文"，并展开全局上下文，配置"关闭工单"图元，详细配置如[表5]所示。
      请直接从全局上下文拖拽"statusInfo"、"id"、"status"到输入输出参数对应"源"或"目标"下，请勿手动输入，手动输入的值系统可能不识别。
      图21拖拽关闭工单输入输出值   
      ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432835010.png "点击放大")
      表7接单图元配置 
      | 参数项              | 值                           |
      |:---|:---|
      | 脚本               | ***HW__***modifyOrderStatus |
      | 输入参数"statusInfo" | 对象变量下"statusInfo"           |
      | 输出参数"id"         | 变量下"id"                     |
      | 输出参数"status"     | 变量下"status"                 |
         
      
   
   
   
   
10. 拖拽图元直接的关系连线，具体如[图22]所示。
    
    图22添加图元之间连线   
    ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001432674994.png "点击放大")
    
    
11. 配置"排他网关"图元连线属性。 
    1. 选中"派单员派单"与"排他网关"之间的连线，单击鼠标右键，选择"配置"，设置"标签"为"拒单"，再单击"新增行"，拖拽变量"status"到"资源"下，设置"比较符"为"=="，"值"为"**"拒单"** "。
       图23选中排他网关图元连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071809.png "点击放大")
       图24配置"拒单"连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071813.png "点击放大") 
    
    2. 选择"排他网关"图元与"维修人员关单"图元之间的连线，参考上一步，设置连线，设置"标签"为"接单"，再单击"新增行"，**拖拽** 变量"status"到"资源"下，设置"比较符"为"=="，"值"为"**"接单"** "。
       图25配置"接单"连线   
       ![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001483071785.png "点击放大") 
    
    
    
    
    
12. 单击页面上方的![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001433151850.png)，再单击![](https://support.huaweicloud.com/bestpractice-astrozero/zh-cn_image_0000001482991217.png)，启用BPM。
 
