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

Posted 分享牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章83 - 验证图表并导出为自定义输出格式相关的知识,希望对你有一定的参考价值。

除了自定义调色板之外,您还可以创建Flowable Designer的扩展,以便执行验证并将信息从图中保存到Eclipse工作区中的自定义资源中。这里有内置的扩展点,本节介绍如何使用它们。

ExportMarshaller函数最近被重新引入。我们仍在研究验证功能。下面的文档详细说明了旧的行为,并将在新功能可用时进行更新。

Flowable Designer允许您编写验证图的扩展。在默认情况下,工具中已经有了对BPMN结构的验证,但是如果要验证其他项目(如建模约定或CustomServiceTasks 属性中的值),则可以添加自己的项目。这些扩展名被称为Process Validators。

您还可以自定义Flowable Designer以在保存图表时发布到其他格式。这些扩展被调用Export Marshallers,并由Flowable Designer在用户的每个保存操作中自动调用。通过在Eclipse的首选项对话框中为每个检测到扩展的格式设置首选项,可以启用或禁用此行为。设计师将确保您ExportMarshaller在保存图表时调用,具体取决于用户的偏好。

通常,你会想要结合一个ProcessValidator和一个ExportMarshaller。假设你有一些CustomServiceTask正在使用的具有你想在生成过程中使用的属性。但是,在生成过程之前,您首先需要验证其中一些值。结合ProcessValidator和ExportMarshaller是最好的方法来实现这一点,Flowable Designer使您能够无缝地将扩展插入到工具中。

要创建一个ProcessValidator或者一个ExportMarshaller,你需要创建一个不同于扩展调色板的扩展。原因很简单:从您的代码中,您将需要访问比集成库提供的API更多的API。尤其是,您将需要Eclipse中可用的类。因此,要开始,您应该创建一个Eclipse插件(您可以使用Eclipse的PDE支持来完成),并将其打包到自定义的Eclipse产品或功能中。这个用户指南的范围超出了开发Eclipse插件所涉及的所有细节,所以下面的说明仅限于扩展Flowable Designer的功能。

您的包应该依赖于以下库:

  • org.eclipse.core.runtime
  • org.eclipse.core.resources
  • org.flowable.designer.eclipse
  • org.flowable.designer.libs
  • org.flowable.designer.util

可选的,如果你想在你的扩展中使用org.apache.commons.lang包,可以通过Designer使用。

两个ProcessValidatorS和ExportMarshallerS被延伸的基部类创建的。这些基类从它们的超类,类继承了一些有用的方法AbstractDiagramWorker。使用这些方法,您可以创建出现在Eclipse问题视图中的信息,警告和错误标记,以便用户找出错误或重要的地方。你可以用Resources和的形式获得有关图表的信息InputStreams。这些信息DiagramWorkerContext由AbstractDiagramWorker课程提供。

clearMarkers()作为你在a ProcessValidator或a中做的第一件事情之一,可能是一个好主意ExportMarshaller。这将清除您的工作人员以前的任何标记(标记会自动链接到工作人员,清除标记对于一名工作人员不会触及其他标记)。例如:

// Clear markers for this diagram first
clearMarkersForDiagram();

您还应该使用提供的进度监视器(在)中将DiagramWorkerContext您的进度报告给用户,因为验证和编组操作可能需要一段时间来强制用户
等待。报告进度需要一些关于如何使用Eclipse功能的知识。

1、创建一个ProcessValidator扩展

org.flowable.designer.eclipse.extension.validation.ProcessValidator在您的plugin.xml文件中创建扩展点的扩展点。对于这个扩展点,你需要继承这个AbstractProcessValidator类。

<?eclipse version="3.6"?>
<plugin>
<extension
point="org.flowable.designer.eclipse.extension.validation.ProcessValidator">
<ProcessValidator
class="org.acme.validation.AcmeProcessValidator">
</ProcessValidator>
</extension>
</plugin>
public class AcmeProcessValidator extends AbstractProcessValidator 

你必须实现一些方法。最重要的是,实施,getValidatorId()所以你返回一个全球唯一的ID验证码。这将使你能够从中调用它ExportMarshaller,甚至让其他人从他们的调用你的验证器ExportMarshaller。实现getValidatorName()并返回验证器的逻辑名称。该名称在对话框中显示给用户。在中getFormatName(),您可以返回验证器通常验证的图的类型。

验证工作本身在validateDiagram()方法中完成。从这一点来看,这取决于你在这里编码的具体功能。但是,通常情况下,您首先需要掌握图表流程中的节点,以便遍历它们,收集,比较和验证数据。这个片段告诉你如何做到这一点:

final EList<EObject> contents = getResourceForDiagram(diagram).getContents();
for (final EObject object : contents) 
if (object instanceof StartEvent ) 
// Perform some validations for StartEvents

// Other node types and validations

当你通过验证时,不要忘记调用addProblemToDiagram()和/或addWarningToDiagram()等等。确保你在最后返回一个正确的布尔结果来表示你是否认为验证成功或失败了。这可以通过调用ExportMarshaller来确定下一个操作过程。

2、创建一个ExportMarshaller扩展

org.flowable.designer.eclipse.extension.ExportMarshaller在您的plugin.xml文件中创建扩展点的扩展点。对于这个扩展点,你需要继承这个AbstractExportMarshaller类。这个抽象基类在编组为自己的格式时为您提供了许多有用的方法,但最重要的是,它允许您将资源保存到工作区并调用验证器。

Designer的示例文件夹中提供了一个示例实现。这个例子展示了如何使用基类中的方法来完成基础知识,比如访问图表InputStream,使用它BpmnModel并将资源保存到工作区。

<?eclipse version="3.6"?>
<plugin>
<extension
point="org.flowable.designer.eclipse.extension.ExportMarshaller">
<ExportMarshaller
class="org.acme.export.AcmeExportMarshaller">
</ExportMarshaller>
</extension>
</plugin>
public class AcmeExportMarshaller extends AbstractExportMarshaller 

你需要实现一些方法,如getMarshallerName()和getFormatName()。这些方法用于向用户显示选项,并在进度对话框中显示信息,因此请确保您返回的描述反映了您正在实施的功能。

您的大部分工作是在该doMarshallDiagram()方法中执行的。

如果您想先执行某个验证,则可以直接从编组调用验证程序。你从验证器收到一个布尔结果,所以你知道验证是否成功。在大多数情况下,如果无效,则不想继续编组图表,但如果验证失败,则可以选择继续,甚至创建不同的资源。

一旦你有所有你需要的数据,你应该调用这个saveResource()方法来创建一个包含你的数据的文件。您可以saveResource()从一个ExportMarshaller 调用多次; 因此可以使用编组器创建多个输出文件。

您可以使用类中的saveResource()方法为输出资源构建一个文件名AbstractDiagramWorker。有几个有用的变量可以替代,允许你创建文件名,例如_original-filename__my-format-name.xml。这些变量在Javadoc中描述并由ExportMarshaller接口定义。resolvePlaceholders()如果您想自己替换占位符,也可以使用字符串(例如,路径)。getURIRelativeToDiagram()会为你调用这个。

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

以上是关于Flowable入门系列文章83 - 验证图表并导出为自定义输出格式的主要内容,如果未能解决你的问题,请参考以下文章

Flowable入门系列文章95 - 部署 03

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

Flowable入门系列文章65 - 流程启动授权

Flowable入门系列文章77 - Eclipse设计器安装

Flowable入门系列文章84 - 流动的UI应用程序

Flowable入门系列文章85 - 可流动的IDM应用程序