设计和创建定制工作流程

重要信息: IBM Cloud Pak® for Data 4.7 版本将于 2025 年 7 月 31 日结束支持 (EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

IBM Cloud Pak for Data 4.7 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

您可以使用 Flowable 来创建 流程定义 以管理特定业务流程。

流程定义是为实现特定目标而必须完成的一系列相连接的步骤。 流程定义指定了:
  • 构成流程的任务
  • 任务的序列
  • 任务之间的过渡

支持的工具

必须使用 Flowable ( https://flowable.com/open-source/ ) 创建自定义流程定义。 您可以将以下类型的文件导入到 IBM Cloud Pak for Data:
  • BPMN 文件
  • BPMN 2.0 XML 文件
  • 包含 BPMNBPMN 2.0 XML 文件的 ZIP 文件以及进程定义的资源文件

建议的技能

要创建定制流程定义,您应具备下列技能和知识:

  • 对您要支持的业务流程有基本的了解
  • 熟悉 Flowable
  • 编程技能
  • 熟悉 JavaScript
  • 基本了解 Java 统一表达式语言

限制

Cloud Pak for Data中,工作流程以同步工作流程引擎方式运行,这意味着所有工作流程操作都必须由外部操作触发。 例如,可以通过 Cloud Pak for Data中的用户操作 (例如,提交请求或编辑资产) 来触发工作流程。

Cloud Pak for Data中不支持以下进程定义选项:
  • 提交信号或消息
  • 计时器,包括基于事件的计时器
  • 以异步方式在后台执行工作流程

与其他 Cloud Pak for Data 组件或其他应用程序 (例如 REST API 调用) 的任何交互都必须同步。

定制工作流程概念

Cloud Pak for Data中, 工作流程类型 是支持业务流程的一组资源和配置。 下图说明了可以在 Flowable 中创建以定义工作流程类型的组件。

这些概念在后续文本中进行了描述。 此图显示了包含三个顶级模板的工作流程类型。 (这些模板称为模板 A、模板 B 和模板 C。) 模板 A 没有任何助手模板。 模板 B 用于帮助程序模板 A ,后者使用帮助程序模板 B。 模板 C 使用帮助程序模板 C。
顶级模板
您必须将至少一个顶级模板与工作流程类型相关联。 顶级模板是 Flowable 流程定义。

Cloud Pak for Data Web 客户机中,顶级模板称为 工作流程模板。 工作流程管理员创建工作流程配置时,会选择一个顶级模板。 该模板在工作流程条件触发工作流程时使用。

给定工作流程类型的所有顶级模板都必须满足以下条件:
  • 位于相同目标名称空间

    有关详细信息,请参阅: targetNamespace

  • 仅限定制请求工作流程:使用相同的开始表单属性

    开始表单属性描述了在提交新请求时向用户提供的一组输入字段。 有关详细信息,请参阅 用户任务字段

助手模板
可以选择在工作流程类型中包含一个或多个助手模板。 帮助程序模板是 Flowable 流程定义。 但是,创建工作流程配置时不能使用助手模板。 助手模板可以由以下任一模板使用:
  • 顶级模板
  • 其他助手模板
所有助手模板必须位于 helper 名称空间中。 有关详细信息,请参阅 targetNamespace
限制: 不能单独上载帮助程序模板。 必须将其包括在包含至少一个顶级模板的 ZIP 文件中。

工作流程类型需求

计划工作流程类型时,请确保考虑以下需求:
  • 工作流程类型必须包含至少一个顶级模板(流程定义)。
    • 将具有相同 targetNamespace 的任何顶级模板导入到 Cloud Pak for Data时,这些模板将添加到相同工作流程类型。
    • 要创建新的工作流程类型,请指定唯一的目标名称空间。

    有关详细信息,请参阅: targetNamespace

  • 仅限定制请求工作流程:与给定工作流程类型关联的的任何顶级模板都必须具有相同的开始表单属性。
  • 每个流程定义都必须具有唯一标识。 在 Flowable中,此标识称为 进程定义密钥。 该标识在所有模板中必须唯一。
    标识在 <process> XML 标记的 id 属性中指定:
    <process  id="Unique_ID"  name="Process name" isExecutable="true">

如果未满足上述需求,那么无法将进程定义 BPMN 文件导入到 Cloud Pak for Data

流程定义的必需约定

开发流程定义时,请确保使用以下约定:

targetNamespace
使用 targetNamespace 基于与之关联的工作流程类型对流程定义进行分类。 targetNamespace 允许您按使用对工作流程模板分组,并定制特定上下文中可用于某个用户的模板列表。
要点: 工作流程类型中的所有模板都必须具有相同的 targetNamespace。 如果尝试上载多个进程定义 BPMN 文件,并且 targetNamespace 条目中存在任何变体,那么无法将这些文件上载到 Cloud Pak for Data
可以按下列其中一种方式指定 targetNamespace
  • Flowable Modeler 中,在流程属性的 名称空间 字段中指定 targetNamespace
  • 在每个 BPMN 文件的根 definitions 元素中。 例如:
    <definitions
      xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
      ...
      targetNamespace="targetNamespace="https://dataplatform.cloud.ibm.com/workflows/requests/Workflow_type">
         <process id="myProcess" name="My Sample Process">
         ...
         </process>
    
    </definitions>
    
targetNamespace 选择相应的格式:
  • 对于监管工件工作流程,指定:
    targetNamespace="https://dataplatform.cloud.ibm.com/workflows/artifacts/artifacts_cud"
  • 对于定制请求工作流程,指定:
    targetNamespace="https://dataplatform.cloud.ibm.com/workflows/requests/Workflow_type"

    Workflow_type 替换为您的工作流程类型的相应标识。

  • 对于助手模板,指定:
    targetNamespace="https://dataplatform.cloud.ibm.com/workflows/helper"
提示: 将流程定义文件导入到 Cloud Pak for Data时, targetNamespace 的突出显示部分将用作 模板类别 :
https://dataplatform.cloud.ibm.com/workflows/ requests/workflow_types 
用户任务
请确保每个用户任务包含下列元素:
用户任务名称
用于标识 Flowable Modeler 中的任务的显示名称。
提示: 当工作流管理员在 Cloud Pak for Data创建工作流配置时,用户任务名称也用于对工作流任务进行排序。 请考虑使用前缀来确定任务在 Cloud Pak for Data中的显示顺序。
样本代码
以下代码中突出显示的部分显示了如何定义用户任务名称:
<userTask id="myTask"  name="User task name"  >
  ...
</userTask>
标题
任务的短显示名称。

每个用户任务都有动态标题和动态指令 (在任务收件箱中向最终用户显示) 以及静态标题和静态指令 (在配置工作流程时向工作流程管理员显示)。

在用户任务的 <documentation> 部分中提供静态和动态标题和指示信息,并通过 $$$进行分隔。 确保在美元符号后包含一个空间。

静态标题
静态标题在工作流管理员创建工作流配置时显示。
样本代码
在用户任务的 documentation 元素中指定静态标题。 以下代码中突出显示的部分显示了如何定义静态标题:
<userTask id="myTask" name="User task name" >
  <documentation>
      dynamic title $$$ dynamic instruction $$$ static instruction $$$  static title 
  </documentation>
</userTask>
动态标题
在用户完成活动工作流程中的任务的过程中,会显示动态标题。
样本代码
在用户任务的 documentation 元素中指定动态标题。 以下代码中突出显示的部分显示了如何定义动态标题:
<userTask id="myTask" name="User task name" >
  <documentation>
       dynamic title  $$$ dynamic instruction $$$ static instruction $$$ static title
  </documentation>
</userTask>

动态标题可以包含 ${variableName} 格式的流程实例变量。

指示信息
任务的扩展描述。 指示信息应说明用户应该执行什么操作,并提供任务上下文。

请提供静态指示信息和动态指示信息。

静态指示信息
工作流程管理员创建工作流程配置时会显示静态指令。
样本代码
在用户任务的 documentation 元素中指定静态指示信息。 以下代码中突出显示的部分显示了如何定义静态指示信息:
<userTask id="myTask" name="User task name" >
  <documentation>
      dynamic title $$$ dynamic instruction $$$  static instruction  $$$ static title
  </documentation>
</userTask>
动态指示信息
在用户完成活动工作流程中的任务的过程中,会显示动态指示信息。
样本代码
在用户任务的 documentation 元素中指定动态指示信息。 以下代码中突出显示的部分显示了如何定义动态指示信息:
<userTask id="myTask" name="User task name" >
  <documentation>
      dynamic title $$$  dynamic instruction  $$$ static instruction $$$ static title
  </documentation>
</userTask>

动态指示信息可以包含 ${variableName} 格式的流程实例变量。

用户任务字段
用户任务字段确定了用户在完成任务时可以输入或选择的信息。 用户任务可以包含以下元素:
短文本字段
允许用户输入字母数字文本的短字符串。

formProperty 中指定 type="string"。 例如:

<flowable:formProperty 
   id="request_name" 
   name="Request name" 
    type="string" 
   readable="false" 
   required="true">
</flowable:formProperty>
长文本字段
允许用户输入长块的字母数字文本。
formProperty 中指定以下值:
  • type="string"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"long_text"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;long_text&quot;}')}"
例如:
<flowable:formProperty 
   id="request_summary" 
   name="Summary" 
    type="string"  
    expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;long_text&quot;}')}"  
   readable="false" 
   required="true">
</flowable:formProperty>
日期字段
允许用户指定预先确定格式的日期。

formProperty 中指定以下值:

  • type="date"

    Cloud Pak for Data 支持 ISO 8601 日期格式。

例如:
<flowable:formProperty 
   id="fulfill_date" 
   name="Fulfill by" 
    type="date" 
   readable="false">
</flowable:formProperty>
允许用户指定 URL。

formProperty 中指定以下值:

  • type="string"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"url"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;url&quot;}')}"
例如:
<flowable:formProperty 
   id="request_url" 
   name="Link to website (optional)" 
    type="string"  
    expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;url&quot;}')}"  
   readable="false">
</flowable:formProperty>
多选列表
允许用户从预定义的值列表中选择多个值。

formProperty 中指定以下值:

  • type="enum"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"multi_select"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;multi_select&quot;}')}"

此外,每个选项表示为 enum 集的一个值。

例如:
<flowable:formProperty 
  id="options_list" 
   type="enum"  
   expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;multi_select&quot;}')}"  
  readable="false" 
  required="true">
      <flowable:value id="option1" name="Option 1" /> 
      <flowable:value id="option2" name="Option 2" /> 
      <flowable:value id="option3" name="Option 3" /> 
</flowable:formProperty>
单选按钮
允许用户从预定义的值列表中选择仅一个选项。 选项显示为单选按钮。

formProperty 中指定以下值:

  • type="enum"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"radio"}')}"
    • BPMN 文件: expression=“${cpd:conf(‘{&quot;cpd_type&quot;:&quot;radio&quot;}’)}”

此外,每个选项表示为 enum 集的一个值。

例如:
<flowable:formProperty 
  id="options_list_2" 
   type="enum" 
   expression=“${cpd:conf(‘{&quot;cpd_type&quot;:&quot;radio&quot;}’)}”   
  readable="false" 
  required="true">
      <flowable:value id="option1" name="Option 1" /> 
      <flowable:value id="option2" name="Option 2" /> 
      <flowable:value id="option3" name="Option 3" /> 
</flowable:formProperty>
下拉列表
允许用户从预定义的值列表中选择仅一个选项。 选项显示为下拉列表。

formProperty 中指定以下值:

  • type="enum"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"dropdown"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;dropdown&quot;}')}"

此外,每个选项表示为 enum 集的一个值。

例如:
<flowable:formProperty 
   id="request_priority" 
   name="Priority" 
    type="enum"  
    expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;dropdown&quot;}')}" 
   readable="false">
       <flowable:value id="low" name="Low"></flowable:value> 
       <flowable:value id="medium" name="Medium"></flowable:value> 
       <flowable:value id="high" name="High"></flowable:value> 
</flowable:formProperty>
用户选取器
使用户能够选择一个或多个用户并将其传递到工作流程逻辑。

formProperty 中指定以下值:

  • type="string"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"cpd_user"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;cpd_user&quot;}')}"
例如:
<flowable:formProperty 
	id="user" 
	name="Some user" 
	type="string" 
	expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;cpd_user&quot;}')}" 
	readable="true"
	writeable="false" 
	required="true">
</flowable:formProperty>
类别-任务类型
您可以为每个用户任务提供一个 类别,也称为任务类型。 在任务收件箱和任务状态页面上,可以按任务类型对任务进行过滤。 您可以对类别使用任何值; 但是,以下类别会在 Cloud Pak for Data中触发特殊行为:
authoring
仅监管工件工作流程。 它描述了创建草稿的步骤: 已创建草稿,但尚未将其发送以待核准 (或工作流程中定义的任何其他第一个用户任务)。

编写任务不会显示在配置页面中,因此您无法为此步骤配置任何通知。 缺省情况下,受让人设置为类别角色 "所有者" , "管理员" 和 "编辑者"。

无法设置到期日期,因此任务无法过期。

通常,发送进行审批按钮会在作者查看工件详细信息页面时显示。

approval
指示常规用户任务。
voting
指示审批用户任务有审批选项下拉菜单。

工作流程模板必须能够处理特殊审批。 有关示例,请参阅 Multiple_approval_steps_and_one_review_step.bpmn20.xml 监管工件工作流程模板。

评论
指示可选用户任务。 当工作流程管理员创建工作流程配置时,管理员可以将受让人留空。
publish
仅限治理工件工作流:表示当工作流管理员创建工作流配置时,应为该步骤显示 " 自动发布工件 "复选框。
例如:
<userTask 
   id="review" 
   name="Review" 
   flowable:dueDate="${review_due_date}" 
    flowable:category="review"  
   flowable:formFieldValidation="true">
对于 V 4.6.1 和更高版本,要使复选框可见,模板还需要包含标识为 publishing_step_mode的其他工作流程级别配置属性:
<flowable:formProperty id="publishing_step_mode" type="enum" readable="false">
          <flowable:value id="auto_action" name="Automatically publish artifacts. Skip publishing approval."></flowable:value>
          <flowable:value id="explicit_action" name=""></flowable:value>
        </flowable:formProperty>
操作按钮
这是表单属性,它代表用户可以执行的操作。 表单属性必须包含下列元素:
  • id="action"
  • type="enum"

每个操作按钮都表示为 enum 集合的值。

样本代码
<flowable:formProperty 
    id="action"  
    type="enum"  
   readable="false" 
   required="true">
      <flowable:value id="option1" name="Action Button 1" /> 
      <flowable:value id="option2" name="Action Button 2" /> 
      <flowable:value id="option3" name="Action Button 3" /> 
</flowable:formProperty>

name 元素中指定的值是用户界面中按钮的显示名称。

受支持的前缀
可以选择在 id 上使用以下某个前缀以触发特殊行为:
前缀 描述
# 指示此操作是工作流程中的最后步骤。

在监管工件工作流程中,界面会将用户定向到发布的工件,而不是显示草稿。

? 指示界面应该在用户选择此操作时显示“确认”对话框。

例如,您可能希望在用户单击取消时显示“确认”对话框,以便其工作进展不会丢失。

- 指示在用户提供注释之前,该操作应该一直禁用。
例如:
<flowable:formProperty id="action" type="enum" readable="false" required="true">
  <flowable:value id="#approve" name="Approve" />
  <flowable:value id="-reject" name="Reject" />
  <flowable:value id="?" name="Cancel" />
</flowable:formProperty>
任务持续时间
使用户能够指定任务在标记为 "过期" 之前持续的时间长度。 仍然可以覆盖配置任务时设置的值,例如,在完成先前任务时为此任务设置了到期日期,或者用户在从 任务收件箱提交新请求时设置了特定到期日期。
formProperty 中指定以下值:
  • id="due_date_period"
  • type="string"
  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"period","kind":"config"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;period&quot;,&quot;kind&quot;:&quot;config&quot;}')}"
例如:
<flowable:formProperty 
id="due_date_period" 
name="Due date period" 
type="string" 
expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;period&quot;,&quot;kind&quot;:&quot;config&quot;}')}" 
readable="true" 
required="true">
</flowable:formProperty>
其他工作流程和任务配置属性
您可以为整个工作流程以及在工作流程中定义的各个任务添加具有一些额外配置属性的其他部分。 然后,在工作流程配置面板的新部分中列出这些额外属性 (在 Flowable中定义):
  • 对于整个工作流程- 属性 部分
  • 对于个别任务-每个工作流程步骤中的 任务配置属性 部分
您可以使用与用户任务字段相同的元素:
要在模板中添加属性,请在以下部分中添加 flowable:formProperty 部分:
  • 对于工作流程级别的配置属性: startEvent,例如:
        <startEvent>
          <extensionElements>
            <flowable:formProperty></flowable:formProperty>
          </extensionElements>
        </startEvent>
  • 对于任务级别的配置属性: 相应任务的 userTask 部分,例如:
        <userTask>
          <extensionElements>
            <flowable:formProperty></flowable:formProperty>
          </extensionElements>
        </userTask>
expression中,将 typecpd_type 设置为您需要的任何类型的字段,如上所示,并添加 "kind":"config",例如:
  • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"date","kind":"config"}')}"
  • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;date&quot;,&quot;kind&quot;:&quot;config&quot;}')}"
如果您希望该属性是必需的,请添加 required="true" ,如以下示例中所示:
 <flowable:formProperty id="workflow_level_config_prop3" name="Required String" type="string" expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;short_text&quot;,&quot;kind&quot;:&quot;config&quot;}')}" readable="true" required="true"></flowable:formProperty>
用作工作流程属性的下拉列表的样本代码:
    <startEvent id="startevent1" name="Start" flowable:formFieldValidation="true">
      <extensionElements>
        <flowable:formProperty id="publishing_step_mode" type="enum" readable="false">
          <flowable:value id="auto_action" name="Automatically publish artifacts. Skip publishing approval."></flowable:value>
          <flowable:value id="explicit_action" name=""></flowable:value>
        </flowable:formProperty>
        <flowable:formProperty id="workflow_level_config_prop6" name="Any priority" type="enum" default="med" readable="true" expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;dropdown&quot;,&quot;kind&quot;:&quot;config&quot;}')}">
          <flowable:value id="low" name="Low"></flowable:value>
          <flowable:value id="med" name="Medium"></flowable:value>
          <flowable:value id="high" name="High"></flowable:value>
        </flowable:formProperty>
      </extensionElements>
    </startEvent>
用作任务配置属性的多选列表的样本代码:
        <flowable:formProperty id="config_prop7" name="Multi select property name" type="enum" default="c" readable="true" expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;multi_select&quot;,&quot;kind&quot;:&quot;config&quot;}')}">
          <flowable:value id="a" name="Option A"></flowable:value>
          <flowable:value id="b" name="Option B"></flowable:value>
          <flowable:value id="c" name="Option C"></flowable:value>
        </flowable:formProperty>

向开始表单属性添加触发器

工作流程管理员创建工作流程配置时,可以指定哪些条件会触发工作流程。 但是,仅当流程定义包含触发器时,才能这样指定。

可以允许工作流程管理员根据触发器的值创建不同的配置。 您可以为每种工作流程类型定义触发器。 您可以使用以下触发器组合:
  • 无触发器
  • 一个类别触发器
  • 一个 enum 触发器
  • 两个 enum 触发器
  • 一个类别触发器和一个 enum 触发器
  • 一个类别触发器和两个 enum 触发器
Watson Knowledge Catalog 类别
仅限监管工件工作流程:用户在开始表单中选择或指定监管类别时,可以触发不同的工作流程。

formProperty 中指定以下值:

  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"wkc_category","kind":"trigger"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;wkc_category&quot;,&quot;kind&quot;:&quot;trigger&quot;}')}"
例如:
<flowable:formProperty 
   id="category" 
   name="Category" 
   type="string" 
    expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;wkc_category&quot;,&quot;kind&quot;:&quot;trigger&quot;}')}"  
   readable="false" 
   required="true">
</flowable:formProperty>
开始表单中的下拉列表
用户从下拉列表中选择选项时,可以触发不同的工作流程。

formProperty 中指定以下值:

  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"cpd_type":"dropdown","kind":"trigger"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;dropdown&quot;,&quot;kind&quot;:&quot;trigger&quot;}')}"
例如:
<flowable:formProperty 
   id="request_priority" 
   name="Priority" 
   type="enum" 
    expression="${cpd:conf('{&quot;cpd_type&quot;:&quot;dropdown&quot;,&quot;kind&quot;:&quot;trigger&quot;}')}"  
   readable="false">
      <flowable:value id="low" name="Low"></flowable:value>
      <flowable:value id="medium" name="Medium"></flowable:value>
      <flowable:value id="high" name="High"></flowable:value>
</flowable:formProperty>
开始表单中的单选按钮
用户从单选按钮列表中选择选项时,可以触发不同的工作流程。

formProperty 中指定以下值:

  • 带有适合您环境的相应格式的 expression
    • Flowable 建模器: expression="${cpd:conf('{"kind":"trigger"}')}"
    • BPMN 文件: expression="${cpd:conf('{&quot;kind&quot;:&quot;trigger&quot;}')}"
例如:
<flowable:formProperty 
  id="options_list_2" 
  type="enum"
   expression="${cpd:conf('{&quot;kind&quot;:&quot;trigger&quot;}')}"   
  readable="false" 
  required="true">
     <flowable:value id="option1" name="Option 1" />
     <flowable:value id="option2" name="Option 2" />
     <flowable:value id="option3" name="Option 3" />
</flowable:formProperty>

样本工作流程

需要再多一些指导? 查看样本 CP4DworkflowsGitHub 上。