Flowable入门系列文章82 - 自定义调色板 02

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章82 - 自定义调色板 02相关的知识,希望对你有一定的参考价值。

1、配置自定义服务任务的运行时执行

通过设置字段并将扩展应用于Designer,用户可以在对流程建模时配置服务任务的属性。在大多数情况下,当流程由Flowable执行时,您将需要使用这些用户配置的属性。要做到这一点,你必须告诉Flowable当进程到达你的时候实例化哪个类CustomServiceTask。

没有用于指定你的运行特征特别注明CustomServiceTask,该@Runtime注释。这是一个如何使用它的例子:

@Runtime(javaDelegateClass = "org.acme.runtime.AcmeMoneyJavaDelegation")

您CustomServiceTask将在ServiceTask与其建模的流程的BPMN输出中得到正常的结果。Flowable可以使用几种方法来定义ServiceTasks 的运行时特性。因此,@Runtime注释可以取三个属性中的一个,这些属性直接与Flowable提供的选项相匹配,如下所示:

  • javaDelegateClass映射到flowable:classBPMN输出中。指定实现的类的完全限定类名JavaDelegate。
  • expression映射到flowable:expressionBPMN输出中。为要执行的方法指定一个表达式,例如Spring Bean中的方法。您应该不指定任
    何@Property使用此选项时的字段说明。有关更多信息,请参见下文。
  • javaDelegateExpression映射到flowable:delegateExpressionBPMN输出中。为一个实现的类指定一个表达式JavaDelegate。

如果您提供Flowable类中的成员注入,则用户的属性值将被注入到运行时类中。这些名字应该和你的成员名字一致CustomServiceTask。有关更多信息,请参阅用户指南的这一部分。请注意,从Designer的版本5.11.0开始,可以使用该Expression接口来获取动态字段值。这意味着Flowable Designer中属性的值必须包含一个表达式,然后这个表达式将被注入到实现类的一个Expression属性中JavaDelegate。

你可以@Property在你的成员上使用注释CustomServiceTask,但是如果你使用@Runtimes expression属性
@Propertyexpression@Runtime,这将不起作用。原因是您指定的表达式将被尝试由Flowable解析为方法,而不是类。因此,不会进行课堂上的注射。如果您在注释中使用了标记的任何成员,Designer将会忽略它们。Designer不会将其呈现为节点属性窗格中的可编辑字段,并且不会为流程 BPMN中的属性生成输出。

请注意,运行时类不应该在扩展JAR中,因为它依赖于Flowable库。Flowable需要能够在运行时找到它,所以它需要在Flowable引擎的类路径上。

Designer的源代码树中的示例项目包含用于配置的不同选项的示例@Runtime。看看一些起点的货币任务项目。这些例子涉及货币代理项目中
的委托类例子。

2、物业类型

本节CustomServiceTask通过将其类型设置为PropertyType值来描述可用于a的属性类型。
PropertyType.TEXT
创建一个单行文本字段,如下所示。可以是必填字段,并将验证消息显示为工具提示。通过将字段的背景更改为浅红色显示验证失败。

PropertyType.MULTILINE_TEXT
创建如下所示的多行文本字段(高度固定为80像素)。可以是必填字段,并将验证消息显示为工具提示。通过将字段的背景更改为浅红色显示验证失败。

PropertyType.PERIOD
通过使用微调控件编辑每个单位的数量,创建一个结构化编辑器来指定一段时间。结果如下所示。可以是必填字段(解释为不是所有值都可以是0,所以期间的至少一部分必须具有非零值),并将验证消息显示为工具提示。通过将整个字段的背景更改为浅红色显示验证失败。该字段的值存储为1年,2个月,3周,4天,6分7秒的形式的字符串。整个字符串始终存储,即使部分为0。

PropertyType.BOOLEAN_CHOICE
为布尔或切换选项创建单个复选框控件。请注意,您可以required在Property注释中指定属性,但不会对其进行评估,因为这会使用户无法
选择是否选中该框。存储在图中的值是java.lang.Boolean.toString(boolean),结果为“true”或“false”。

PropertyType.RADIO_CHOICE
创建一组单选按钮,如下所示。选择任何一个单选按钮与选择其他任何单选按钮是互斥的(换句话说,只允许一个选择)。可以是必填字段,并将验证消息显示为工具提示。通过将组的背景更改为浅红色来显示验证失败。

此属性类型期望您已注释的类成员也具有相应的@PropertyItems注释(例如,请参见下文)。使用这个额外的注解,你可以指定应该在一个字符串数组中提供的项目列表。通过为每个项目添加两个数组条目来指定项目:首先,要显示的标签; 第二,要存储的值。

@Property(type = PropertyType.RADIO_CHOICE, displayName = "Withdrawl limit", required = true)
@Help(displayHelpShort = "The maximum daily withdrawl amount ",
displayHelpLong = "Choose the maximum daily amount that can be withdrawn from the account.")
@PropertyItems( LIMIT_LOW_LABEL, LIMIT_LOW_VALUE, LIMIT_MEDIUM_LABEL, LIMIT_MEDIUM_VALUE,
LIMIT_HIGH_LABEL, LIMIT_HIGH_VALUE )
private String withdrawlLimit;


PropertyType.COMBOBOX_CHOICE
使用固定选项创建一个组合框,如下所示。可以是必填字段,并将验证消息显示为工具提示。通过将组合框的背景更改为浅红色显示验证失败。

此属性类型期望您已注释的类成员也具有相应的@PropertyItems注释(例如,请参见下文)。使用这个额外的注解,你可以指定应该在一个
字符串数组中提供的项目列表。通过为每个项目添加两个数组条目来指定项目:首先,要显示的标签; 第二,要存储的值。

@Property(type = PropertyType.COMBOBOX_CHOICE, displayName = "Account type", required = true)
@Help(displayHelpShort = "The type of account",
displayHelpLong = "Choose a type of account from the list of options")
@PropertyItems( ACCOUNT_TYPE_SAVINGS_LABEL, ACCOUNT_TYPE_SAVINGS_VALUE, ACCOUNT_TYPE_JUNIOR_LABEL,
ACCOUNT_TYPE_JUNIOR_VALUE, ACCOUNT_TYPE_JOINT_LABEL, ACCOUNT_TYPE_JOINT_VALUE,
ACCOUNT_TYPE_TRANSACTIONAL_LABEL, ACCOUNT_TYPE_TRANSACTIONAL_VALUE, ACCOUNT_TYPE_STUDENT_LABEL,
ACCOUNT_TYPE_STUDENT_VALUE, ACCOUNT_TYPE_SENIOR_LABEL, ACCOUNT_TYPE_SENIOR_VALUE )
private String accountType;


PropertyType.DATE_PICKER
创建日期选择控件,如下所示。可以是必填字段,并将验证消息显示为工具提示(请注意,所使用的控件将自动将选择设置为系统上的日期,因此该值很少为空)。通过将控件的背景更改为浅红色来显示验证失败。

此属性类型期望您已注释的类成员也具有相应的@DatePickerProperty注释(例如,请参见下文)。使用这个额外的注释,你可以指定日期时间模式,用来存储图表中的日期以及你想要显示的日期选择器的类型。这两个属性都是可选的,如果不指定默认值(这些是DatePickerProperty注释中的静态变量),将使用默认值。该dateTimePattern属性应该被用来为类提供一个模式SimpleDateFormat。当使用swtStyle属性,你应该指定一个由支持的整数值SWT的DateTime控制,因为这是用来渲染这一类财产的控制权。

@Property(type = PropertyType.DATE_PICKER, displayName = "Expiry date", required = true)
@Help(displayHelpShort = "The date the account expires.",
displayHelpLong = "Choose the date when the account will expire if not extended before the date.")
@DatePickerProperty(dateTimePattern = "MM-dd-yyyy", swtStyle = 32)
private String expiryDate;

PropertyType.DATA_GRID
创建一个数据网格控件,如下所示。可以使用数据网格来允许用户输入任意数量的数据行并输入每一行中的固定的一组列(每个单独的行和列的组合被称为单元格)的值。行可以添加和删除,因为用户认为合适。

此属性类型期望您已注释的类成员也具有相应的@DataGridProperty注释(例如,请参见下文)。使用这个额外的注解,你可以指定一些数据网格的特定属性。您需要引用一个不同的类来确定哪些列与itemClass属性一起进入网格。Flowable Designer期望成员类型是一个List。按照惯例,你可以使用itemClass属性的类作为它的泛型类型。例如,如果您有在网格中编辑的购物清单,则可以在GroceryListItem该类中定义网格的列。从你的CustomServiceTask,你会参考这样的:

@Property(type = PropertyType.DATA_GRID, displayName = "Grocery List")
@DataGridProperty(itemClass = GroceryListItem.class)
private List<GroceryListItem> groceryList;

“itemClass”类使用相同的注释,否则将使用它来指定CustomServiceTask(数据网格除外)的字段。具体来说,TEXT,MULTILINE_TEXT和PERIOD目前支持。您会注意到网格将为每个字段创建单行文本控件,无论如何PropertyType。这是为了保持网格的图形吸引力和可读性。如果您考虑常规的显示模式,PERIOD PropertyType例如,您可以想象,它将永远不会正确地适应网格单元而不会混乱屏幕。对于MULTILINE_TEXT和PERIOD,双击机制被添加到每个字段,弹出一个更大的编辑器PropertyType。在用户单击“确定”后,该值将存储在字段中,因此可在网格中进行读取。

所需的属性与类型的常规字段类似地处理,TEXT并且只要任何字段失去焦点,整个网格就被验证。如果存在验证失败,则数据网格的特定单元格中的文本控件的背景颜色将变为浅红色。

默认情况下,组件允许用户添加行,但不能确定这些行的顺序。如果你想允许这个,你应该设置orderable属性为true,这使得每行末尾的按钮可以在网格中向上或向下移动。

此刻,这个属性类型没有被正确地注入到你的运行时类中

3、禁用调色板中的默认形状

这个定制要求你在实现DefaultPaletteCustomizer接口的扩展中包含一个类。你不应该直接实现这个接口,而是继承AbstractDefaultPaletteCustomizer基类。目前,这个类没有提供任何功能,但是未来版本的DefaultPaletteCustomizer接口将提供更多的功能,这个基类将提供一些合理的默认值,所以最好将它继承下来,以确保你的扩展将与未来的版本兼容。

扩展AbstractDefaultPaletteCustomizer类需要你实现一个方法,disablePaletteEntries()你必须从中返回一个PaletteEntry值列表。对于每个默认形状,您可以通过将其相应的PaletteEntry值添加到列表中来禁用它。请注意,如果您从默认设置中删除形状,并且特定抽屉中没有剩余的形状,该抽屉将从整个调色板中删除。如果你想禁用所有的默认形状,你只需要添加PaletteEntry.ALL到你的结果。例如,下面的代码将禁用调色板中的手动任务和脚本任务形状。

public class MyPaletteCustomizer extends AbstractDefaultPaletteCustomizer 
@Override
public List<PaletteEntry> disablePaletteEntries() 
List<PaletteEntry> result = new ArrayList<PaletteEntry>();
result.add(PaletteEntry.MANUAL_TASK);
result.add(PaletteEntry.SCRIPT_TASK);
return result;


下图显示了应用此扩展的结果。如您所见,手动任务和脚本任务形状在Tasks抽屉中不再可用。

要禁用所有的默认形状,可以使用类似于下面的代码的东西。

public class MyPaletteCustomizer extends AbstractDefaultPaletteCustomizer 
@Override
public List<PaletteEntry> disablePaletteEntries() 
List<PaletteEntry> result = new ArrayList<PaletteEntry>();
result.add(PaletteEntry.ALL);
return result;


结果将如下所示(请注意,默认形状所在的抽屉不再位于调色板中):

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:

以上是关于Flowable入门系列文章82 - 自定义调色板 02的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章83 - 验证图表并导出为自定义输出格式

Flowable入门系列文章78 - Flowable Designer编辑器功能

Flowable入门系列文章55 - 任务侦听器

Flowable入门系列文章24 - BPMN 2.0构造

Flowable入门系列文章21 - 基本的Flowable概念二

Flowable入门系列文章67 - 表单定义