
# 为华为云Astro轻应用工作流添加活动类图元
活动类图元是工作流的核心图元，可理解为节点或者步骤。一个活动图元可以是流程中一个基本处理单元（如用户需要做的任务、调用事件任务），也可以是一个组合单元（如嵌套的工作流子流程）。
 #### 用户任务
用户任务用来表示业务流程中由用户参与完成的工作。当引擎处理到该节点时，给指定的用户（参与者）或者一组用户（如某泳道的工作队列）创建待处理的任务项，等待用户的处理。
在企业运营过程中，经常会遇到一些需要快速处理或者特殊关注的任务。例如，某些紧急项目需要快速审批，以便尽快启动等，此时可通过设置用户任务的优先审批功能，来实现上述功能，详细介绍请参见[通过华为云Astro轻应用工作流中的用户任务实现优先审批功能](https://support.huaweicloud.com/bestpractice-astrozero/astrozero_bestpractice_0011.html)。
- 用户任务配置：在用户任务配置界面，配置任务接收人和活动界面。
  图1用户任务配置页面   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142044.png "点击放大")
  - 任务标题：显示在任务界面的标题。
  
  - 任务描述：显示在任务界面的任务描述。
  
  - 优先级：在下拉框中，选择任务的优先级，如正常、高和低等。
  
  - 渲染类型：用户处理的界面，可以是标准页面、标准表单或高级页面。当配置为标准表单时，需要配置用户可执行的动作（例如同意或拒绝）。如何创建标准表单，请参见[创建标准表单](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_9184.html#astrozero_05_9184__section1106435104412)。
  
  - 类型：待处理任务的用户类型。
    - 当前泳道：设置为"当前泳道"，将泳道和工作队列绑定，则处于该泳道的用户任务图元，由该泳道对应工作队列中的成员去处理。工作队列中的成员可以是多个**用户** 、**业务用户** 、**公共组** 中成员、**角色或带有下属的角色**中成员。
    
    - 流程发起人的主管：设置为"流程发起人的主管"时，需要配置"部门经理层级"，即主管所属的部门。
    
    - 名称和表达式：设置为"名称和表达式"时，可以通过"表达式"、"用户"和"组"三种方式分配该任务的参与者。这时，泳道中的工作队列配置不起作用。
    
    - 基于规则：当配置为该类型时，需要配置具体的"规则"。
     
  
  - 参与者：当类型为"名称和表达式"时，该参数才会显示。参与者类型可以是用户、业务用户、组或者表达式。
    - 用户：在"取值"中，选择接收该任务的用户，不包括业务用户。
    
    - 业务用户：在"取值"中，选择接收该任务的业务用户。
    
    - 组：在"取值"中选择公共组，则该任务由公共组的成员去处理。公共组的成员可以是**用户** **、** **业务用户** **、** **其他公共组** 的成员、**角色或带有下属的角色** 中成员。如何创建公共组，请参见[管理应用中的公共组](https://support.huaweicloud.com/usermanual-astrozero/astrozero_06_2033.html)。
    
    - 表达式：将参与者类型配置为"表达式"时，实际是一个变量。在"取值"中，可设置变量的值，变量值支持以下几种：
      - 用户的用户名或用户ID，其中用户名前需要加"user:"前缀。
      
      - 业务用户的用户名或业务用户ID，其中业务用户名前需要加"puser:"前缀。
      
      - 公共组名称或者公共组ID，其中公共组名称前需要加"group:"前缀。
      
      - 角色名称或者角色ID，其中角色名称前需要加"role:"前缀。
      
      
      例如，分配任务接受者为用户名为"PortalUser1"的业务用户、用户名为"User1"的用户、用户ID为"10XX000000*XXXXXXX* "的用户、公共组名称为"group1"和角色名称为"role1"的合集，则取值为""puser:PortalUser1,user:User1,10XX000000*XXXXXXX*,group:group1,role:role1""。多个取值之间用英文逗号","分隔，取值外加英文双引号。
      
     
  
  - 规则：接收人满足的规则。类型为"基于规则"时，该参数才会显示。
  
  - 审批类型：选择审批的类型。
    - 如果选择了"或签：任一个分配人均可审批"，则只需要接收人中的某一用户完成了审批，即可推动任务流程，走向下一个任务。
    
    - 如果选择了"会签：每个分配人都需要审批"，则需要接收人中的用户群体满足您设置的审批条件才可推动任务流程，走向下一个任务。
     
  
  - 如果审批人中包含群组，则群组中任意一人审批即认为该群组已经审批。当审批类型为"会签：每个分配人都需要审批"时，该参数才会显示。
    - 勾选，表示如果审批人中包含群组，则群组中任意一人第一个审批即认为该群组已经审批，不需要其他用户再进行审批，该群组只算一个有效审批人数。
    
    - 不勾选，表示如果审批人中包含群组，则群组中每个人都需要审批，都计算在有效审批人数内。
     
  
  - 投票结果门槛：该参数取值表示百分比，如果达到设置的百分比，审批结果中最高的得票结果将覆盖 "$BP.TaskOutcome"系统变量，即将执行最高得票的审批结果。
  
  - 默认结果：审批百分比（已审批的人数/总的有效审批人数）未达到"投票结果门槛"百分比时，默认的审批结果。当审批类型为"会签：每个分配人都需要审批"时，该参数才会显示。
  
  - 结果触发方式：当审批类型为"会签：每个分配人都需要审批"时，该参数才会显示。
    - 当最小百分比满足时，立即触发投票结果。
    
    - 等待所有投票完成，触发投票结果。
     
  
  - 审批动作：设定一些候选的动作，作为默认审批结果。
  
  - 当存在以下动作时立即终止任务：当存在设定的某个或者某些动作时，立即终止任务。
  
  - 自动审批：华为云Astro轻应用支持用户任务自动审批功能，例如设置"主管审核"任务自动审批。在用户任务配置界面，指定该任务具体接收人，可使用表达式的形式将任务指派给某一用户，在自动审批中进行设置。
    图2自动审批设置   
    ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001900909402.png "点击放大")
    - 流程触发人自动通过：如果勾选该选项，任务接收人是流程触发人时，该用户任务会被自动审批。
    
    - 已审批过该流程的审批人自动通过：如果勾选该选项，任务接收人在当前工作流实例中已审批过其他用户任务，则该用户任务会被自动审批。
    
    
    当任务接收人设置为"当前泳道"对应的工作队列或用户组时，将无法使用自动审批功能。只有任务接收人设置为某一用户时，才可以进行自动审批。
    
  
  - 自动审批时默认选择的动作：勾选自动审批时，可以设置自动审批默认选择的动作。
   
- 动作配置：为该用户任务配置前置或者后置动作。
  图3动作配置   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142060.png)
  - 前置动作：流程执行该用户任务前执行的动作。
    - 触发条件：触发该动作的条件表达式。
    
    - 动作类型：满足触发条件时，执行的具体动作。
      - 通知经理：发邮件通知经理。
      
      - 通知分配人：发邮件通知任务分配人。
      
      - 调用服务编排：调用已启用的服务编排。
      
      - 调用脚本：调用已激活的脚本。
      
      - 发送事件：发送某一事件。
      
      - 转移：将该用户任务转移给其他用户或工作队列中的用户处理。
      
      - 设置状态：设置该用户任务的状态。
      
      - 赋值：给用户的任务赋值。
       
     
  
  - 后置动作：流程执行该用户任务后，执行的动作，请参考"前置动作"进行配置。
   
- 数据映射：对该用户任务的输入输出参数，进行数据映射。
  图4数据映射   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142072.png "点击放大") 
- SLA：为用户任务设置定时器，时间逾期可增加紧急程度并执行相应动作。
  图5启用SLA定时器   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101541.png)
  - 开始时间：定时器的开始时间。
    - 任务创建后：设置任务创建的时间作为定时器开始的时间。
    
    - 由变量指定：通过指定时间变量，来确定开始时间。
    
    - 由表达式指定：通过表达式指定开始时间，例如支持特定时间的相对时间，设置为"STRING2TIME('yyyy-MM-dd hh:mm:ss.S', {!variable1})"。动态指定时间的相对时间，设置为"TIMEADD({!$Flow.CurrentDateTime}, 100)"。
     
  
  - 目标期限：任务在目标期限内且即将过期时，满足触发条件后触发一个指定的动作。
  
  - 截止限期：任务过期，满足触发条件后触发一个指定的动作。
  
  - 紧急程度：定时器的紧急程度。
  
  - 动作：时间逾期后执行的相应动作。单击"添加"，可以新增动作。
    - 触发条件：触发该动作的条件表达式。
    
    - 动作类型：满足触发条件时，执行的具体动作。
      - 通知经理：发邮件通知经理。
      
      - 通知分配人：发邮件通知任务分配人。
      
      - 调用服务编排：调用已启用的服务编排。
      
      - 调用脚本：调用已激活的脚本。
      
      - 发送事件：发送某一事件。
      
      - 转移：将该用户任务转移给其他用户或工作队列中的用户处理。
      
      - 设置状态：设置该用户任务的状态。
      
      - 赋值：给用户的任务赋值。
      
      - 完成任务：完成某一任务，超期会自动完成任务。
       
     
   
 
#### 记录创建
"记录创建"图元用于新增平台对象的实例记录，类似于数据库中的INSERT INTO命令。系统提供了以下两种模式，新增对象实例记录：
- 对象模式：需要先单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894301980.png)，在"对象变量"中定义一个对象变量或者对象变量数组，将该对象变量或对象变量数组拖拽到"变量"输入框中，使用该对象变量或对象变量数组的值，创建实例记录。
  图6对象模式创建   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142076.png "点击放大") 
- 条件模式：需要先指定对象并为对象的字段赋值，来创建记录。如下图所示，为"Account"对象新增实例记录，在变量"id"中保存新建的记录ID。
  图7条件模式创建   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142028.png "点击放大") 
 
#### 记录查询
"记录查询"图元用于根据条件查询平台对象的实例记录，类似于数据库中的SELECT命令。系统提供了以下两种模式，查询对象实例记录：
- 对象模式：需要先单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894301932.png)，在"对象变量"中定义一个对象变量或者对象变量数组，将该对象变量或对象变量数组拖拽到"变量"输入框中，并设置条件以及选择排序方式，即可实现根据条件和排序方式，将查询结果保存在对象变量中。如下图所示，根据条件查询对象数据，并将查询结果保存在对象变量数组"account"中。
  图8对象模式查询   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894301892.png "点击放大") 
- 条件模式：需要指定对象并在条件中设置指定对象部分字段的值，根据条件查询符合条件的对象记录，并赋值到设置的变量上。
  图9条件模式查询   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894141992.png "点击放大")
  - 对象：查询的具体对象名，直接在下拉框中选择。
  
  - 剔重：如果查询记录有重复值，是否需要删掉重复记录只保留一条记录。
  
  - 条件：选中对象后，该条件区域"字段"列会出现该对象的字段。单击"新增行"，可设置查询数据的条件。 在"字段"中选择要进行判断的对象字段，在"比较符"中选择相应的比较符，"值"则可从全局上下文拖拽变量或者直接输入"{!变量名}"。
    
  
  - 排序字段/顺序：使查询结果根据某个字段进行升序或者降序排序。
  
  - 记录行的偏移量：分页，跳过前"n"条记录，从第"n+1"条记录开始。
  
  - 记录行的最大数目：分页，每页最多显示的记录数。
  
  - 记录的总行数存入变量：限定查询出来的总记录数，存入变量中。
  
  - （输出）源/目标：输出的结果。其中，"源"为需要查询的字段，查询结果需要保存到设置的变量中，"目标"为设置的变量。
  
  - 无记录时配置空值：当根据条件查询无记录时，则变量为空值。
   
 
#### 记录更新
"记录更新"图元用于更新平台对象的实例记录，类似于数据库中的UPDATE命令。系统提供了以下两种模式，更新对象实例记录：
- 对象模式：需要先单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894301976.png)，在"对象变量"中定义一个对象变量或对象变量数组，并将该对象变量或对象变量数组拖拽到"变量"输入框中，即可根据对象变量中的记录ID将对象变量更新到数据库中，更新的值来源于对象变量中的值。如下图所示，根据对象变量数组"account"中的记录ID，将对象变量中的值更新到数据库中。
  图10对象模式   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002007523309.png "点击放大") 
- 条件模式：需要指定对象并在条件中设置指定对象部分字段的值，在赋值中设置需要更新的目标字段及更新值，最后根据条件查找符合条件的对象记录并将赋值中的值更新到数据库中。
  图11条件模式   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000002007644337.png "点击放大") 
 
#### 记录删除
"记录删除"图元能够删除平台对象的实例记录，类似于数据库中的DELETE命令。系统提供了以下两种模式，删除对象实例记录：
- 对象模式：需要先单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101589.png)，在"对象变量"中定义一个对象变量或者对象变量数组，并将该对象变量或对象变量数组拖拽到"变量"输入框中，使用该对象变量或对象变量数组的记录ID删除对应的对象记录。
  图12对象模式   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894301944.png "点击放大") 
- 条件模式：需要指定对象并在条件中设置指定对象部分字段的值，根据条件删除符合条件的对象记录。
  图13条件模式   
  ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101657.png "点击放大") 
 
#### 调用脚本
当流程到达"调用脚本"任务时，系统自动执行脚本，执行完成后继续执行后续路线。使用该图元时，需要选择具体调用的脚本，配置输入输出参数。
图14调用脚本配置页面   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001927997148.png "点击放大")
工作流中只允许调用当前应用工程下的资源（例如脚本、服务编排），即调用脚本中可供选择的脚本和该工作流都处于同一应用下。
例如，工作流A中需要调用脚本B，请确保A和B处于同一应用中。如果需要调用的资源不在同一应用中，请在工作流A所在的应用中新建脚本B，或选择"使用已有脚本"导入脚本B。再在工作流A中，使用"调用脚本"图元调用该脚本。
图15使用已有脚本   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001955154249.png "点击放大")
#### 调用服务编排
当流程到达"调用服务编排"任务时，系统自动执行服务编排，执行完成后继续执行后续路线。
使用该图元时，需要选择当前应用下具体调用的服务编排，配置输入输出参数。
图16调用服务编排配置页面   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001955157397.png "点击放大")
#### 规则
该图元根据决策表的配置生成一定的规则，后续根据规则的输出连接网关路由到不同的其他图元节点，当流程到达"规则"任务时，系统根据该规则路由到不同的路线。
图17调用规则配置页面   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101545.png "点击放大")
- 规则实现
  - 实现类型：规则基于决策表生成，请选择决策表类型。
  
  - 引用：决策表的输入参数名称。此处只能使用当前项目依赖BO中，公开的及全局的已启用的决策表。
   
- 输入参数
  - 目标：决策表的输入参数名称，直接在下拉框中选择即可。
  
  - 源：工作流中的变量，为目标赋值。可以直接填写，也可以拖入全局上下文变量，将工作流中的变量赋值给决策表中的输入参数。
   
- 输出参数
  - 目标：决策表的输出参数名称，直接在下拉框中选择即可。
  
  - 源：工作流中的变量，将决策表中的输出参数赋值给工作流中的变量。
   
例如，在问题单流程中，问题单的工作流设计流程如下，业务的流转通过规则图元（即"步骤选择"）驱动，不同的规则输出不同的步骤取值，根据步骤取值路由到不同的步骤中。
图18问题单流程   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142056.png "点击放大")
#### 调用活动
在工作流中，可以嵌套其他工作流。当流程到达"调用活动"任务时，系统自动执行该活动（其实是调用的另一个工作流），执行完成后继续执行后续路线。
使用该图元时，需要选择具体调用的工作流，配置输入输出参数。还可以为该任务启用SLA定时器，详情请参见[SLA]。
图19调用活动页面   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001955161685.png "点击放大")
#### 邮件
当流程到达"邮件"任务时，系统自动发送邮件，执行完成后继续执行后续路线。
**使用邮件图元，需要提前配置租户的默认邮件服务器，具体操作请参考[服务编排、BPM、脚本中发送邮件功能不可用](https://support.huaweicloud.com/astrozero_faq/astrozero_faq_0128.html)。**
图20调用邮件页面   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101581.png "点击放大")
- 邮件配置：支持"直接编辑"手动设置邮件信息或"基于模板"选择邮件模板。
- 主题：当"邮件配置"设置为"基于模板"时，需要选择邮件模板。
- 内容：当"邮件配置"设置为"直接编辑"时，需要配置邮件内容。
- 模板：当"邮件配置"设置为"基于模板"时，需要选择邮件模板。
- 地址：设置接收人的邮箱地址。
  - 文本：直接输入邮箱地址，多个地址请用分号分隔，或者从全局上下文拖拽变量代表一个接收人的邮箱地址。
  
  - 集合：可以从全局上下文拖拽集合变量，集合变量即数组型变量，表示多个接收人的邮箱地址。在定义变量时，勾选"是否为数组"，则该变量被定义为集合变量。
    图21集合变量   
    ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894141976.png "点击放大") 
   
- 抄送：抄送人的邮箱地址。
- 密送：密送人的邮箱地址。
- 是否同步发送：是否开启同步发送功能。
 
#### 数据映射
当流程到达"数据映射"任务时，进行赋值操作，执行完成后继续执行后续路线。
如下图所示，配置数据映射，将员工提交的出差申请数据赋值给主管审批表单，即"Director_ApprovalForm.SubmissionForm={!SubmissionForm}"。
图22配置"数据映射"   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001894142000.png "点击放大")
#### 子流程
子流程任务是一个特殊的自动化容器任务，其内在包含了对子流程（Sub Process）的创建、启动和调度管理。
当流程到达子流程任务时，按照配置策略自动启动子流程实例，父流程的该分支中断，在这里等待子流程实例全部结束后继续执行后续路线。
子流程模型可以再包含调用子流程，成为每层嵌套的多级流程。
图23子流程实例   
![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001936101613.png "点击放大")
调用活动和子流程图元都是工作流的内嵌子流程，区别在于：
- 调用活动把子流程当做一个黑盒（不需要关注子流程是怎么实现的），通过参数传递进行调用。
- 内嵌子流程则直接在当前流程中规划出一个子流程，子流程可共享父流程的变量。可用于流程步骤的划分、封装和复用。 内嵌子流程中使用"终止"事件，只终止当前内嵌子流程。
  
 
