Wexflow:C#中的开源工作流引擎

目录

特征

例子

好处

如何安装Wexflow?

Windows(.NET)

Windows(.NET核心)

Linux

macOS

Android

如何卸载Wexflow?

Windows

Linux

macOS

Android

如何使用Wexflow?

通常的做法

Wexflow Manager

后端

登录

重设密码

仪表板(Dashboard)

管理(Manager)

设计(Designer)

历史

用户

安装

Android Manager

工作流程示例

顺序工作流程

工作流程1

工作流程2

工作流程3

工作流程4

工作流程5

执行图

流程图工作流

If

While

Switch

工作流事件

如何创建自定义任务?

通常的做法

日志记录(Logging)

文件(Files)

实体(Entities)

共享内存(Shared memory)

设计(Designer)

调试(Debugging)

如何调试Wexflow?

Wexflow使用的库

历史


高性能,可扩展,模块化和跨平台的工作流引擎。

Wexflow是一个高性能、可扩展、模块化和跨平台的工作流引擎。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。Wexflow还有助于使长期运行的流程变得简单。

Wexflow旨在使系统,应用程序和人员之间的自动化、工作流程、长时间运行的流程和交互变得简单,直接和干净。通过这个功能强大的工作流引擎,系统或应用程序之间的通信变得容易。

Wexflow使用  .NET Core,这是一个跨平台版本的.NET,用于构建网站、服务和控制台应用程序。因此,Wexflow提供了一个跨平台的工作流服务器和一个跨平台的后端,可以轻松灵活地管理、设计和跟踪工作流。Wexflow服务器及其后端程序运行在WindowsLinuxmacOS上。

Wexflow还利用了大规模企业系统中使用的 Quartz.NET开源作业调度系统。因此,Wexflow在计划工作流作业(如cron工作流)时提供了可靠性  

此外,Wexflow 在其服务器和后端程序中使用LiteDB NoSQL文档存储数据库,这增强并改善了此工作流引擎的性能。

特征

Wexflow提供以下功能:

Wexflow也带有后端,因此您可以在所有工作流程中进行搜索和过滤,拥有工作流程的实时统计数据,轻松管理工作流程,轻松设计工作流程,并轻松跟踪工作流程:

https://www.codeproject.com/KB/cs/1164009/wbo-dashboard-3.2.png

只是为了让您了解Wexflow的功能,这是“Designer”页面的截图。使用“Designer”页面,我们可以获得工作流依赖关系图的良好视觉概览。每个节点代表一个必须运行的任务:

https://www.codeproject.com/KB/cs/1164009/wbo-designer-3.2.png  

找到更多的功能细节

例子

以下是使用Wexflow的一些示例:

  • 编排引擎。
  • 批量录制实时视频源。
  • 批量转码音频和视频文件。
  • 将视频及其元数据批量上传到YouTube SFTP保管箱。
  • 批量加密和解密大文件。
  • 批量转换,调整大小和裁剪图像。
  • 通过电子邮件创建和发送报告和发票。
  • 通过监视文件夹连接系统和应用程序
  • 通过FTP / FTPS / SFTP / HTTP / HTTPS / Torrent批量下载文件。
  • 通过FTP / FTPS / SFTP批量上传文件。
  • 数据库管理和维护。
  • 同步本地或远程目录的内容。
  • 批量发送推文。
  • 等等

好处

以下是使用Wexflow的好处:

  • 通过自动执行重复性任务节约了时间。
  • 通过避免重新工作和更正来节省了资金。
  • 减少人为错误。
  • 在完成任务时变得更有效率。
  • 提高工作效率。
  • 与您的工作保持一致。

如何安装Wexflow

Wexflow易于安装,需要轻松配置。它可以在几秒钟内安装和配置。

本节介绍如何在Windows系统上安装.NET版本的Wexflow,以及如何在Windows系统,Linux系统或macOS系统上安装.NET Core版本的Wexflow

Windows.NET

Wexflow可以安装在Windows XPWindows Server 2003或更高版本上。Wexflow支持.NET Framework 4.0或更高版本。

要安装Wexflow,请执行以下操作:

1.安装Microsoft .NET Framework 4.0或更高版本。

2.安装Wexflow

https://www.codeproject.com/KB/cs/1164009/setup-3.5-1.png

3.选择目标位置:

https://www.codeproject.com/KB/cs/1164009/setup-3.5-2.png

4.您可以选择创建桌面快捷方式:

https://www.codeproject.com/KB/cs/1164009/setup-3.5-3.png

5.单击安装以执行安装:

https://www.codeproject.com/KB/cs/1164009/setup-3.5-4.png

6.安装程序将在系统上安装Wexflow

https://www.codeproject.com/KB/cs/1164009/setup-3.5-5.png

7.最后,单击完成以完成安装:

https://www.codeproject.com/KB/cs/1164009/setup-3.5-6.png

8.  如果要使用同步任务,请安装Microsoft Sync Framework 2.1 Redistributables

     8.1如果您使用的是Wexflow x86,则安装Synchronization-v2.1-x86-ENU.msiProviderServices-v2.1-x86-ENU.msi

     8.2如果使用Wexflow x64,则安装Synchronization-v2.1-x64-ENU.msiProviderServices-v2.1-x64-ENU.msi

开始菜单中添加了以下菜单:

https://www.codeproject.com/KB/cs/1164009/sm-3.5.png

  • 后端菜单打开后端。
  • 配置菜单打开Wexflow的配置文件夹。
  • 文档菜单打开Wexflow的文档文件夹。 
  • 日志菜单打开当天的日志文件。
  • 管理菜单打开Wexflow管理界面。 
  • 卸载菜单卸载Wexflow

安装Wexflow后,将安装名为WexflowWindows服务并自动启动。要启动Wexflow Manager,必须运行此Windows服务。但是,如果要停止它,可以从Windows服务控制台执行此操作:

https://www.codeproject.com/KB/cs/1164009/ws-3.5.png

Windows.NET核心)

  1. 下载并安装  .NET Core运行时
  2. 在系统上的某个位置下载并解压缩.NET Core软件包。
  3. 双击“install.bat”以安装Wexflow的配置文件。
  4. 就这些。双击“run.bat”启动Wexflow工作流服务器:

https://www.codeproject.com/KB/cs/1164009/ws-dotnet-core-windows.png

端口8000必须是免费的。如果您已经在使用.NET版本的Wexflow,则必须停止Wexflow Windows服务或更改.NET Core版本的端口。

要更改.NET Core版本的端口,请编辑文件Wexflow.Server \ appsettings.json并更改设置“WexflowServicePort”的值。然后,通过编辑配置文件Backend \ _js \ settings.js来更改后端中的端口。

最后,您可以通过在浏览器上打开Backend \ index.html网页来打开后端。

要打开后端,请转到后端文件夹,然后双击“index.html”文件:

https://www.codeproject.com/KB/cs/1164009/wbo-login-3.2.png

如果您是第一次安装Wexflow,则可以使用这些凭据登录:

用户名admin

密码wexflow2018

然后,您可以从后端更改密码。

Linux

  1. 下载并安装  .NET Core运行时
  2. /opt/中下载并解压缩.NET Core包。
  3. 打开终端并键入以下命令:

cd /opt/wexflow/Wexflow.Server

sudo dotnet Wexflow.Server.dll

就是这样,Wexflow已安装并准备工作:

https://www.codeproject.com/KB/cs/1164009/ws-dotnet-core-linux.png

最后,您可以通过在浏览器上打开网页/opt/wexflow/Backend/index.html来打开后端:

https://www.codeproject.com/KB/cs/1164009/wbo-login-3.2.png

如果您是第一次安装Wexflow,则可以使用这些凭据登录:

用户名admin

密码wexflow2018

然后,您可以从后端更改密码。

如果要使用图形处理任务,则必须安装以下库:

sudo apt install libc6-dev libgdiplus

macOS

  1. 下载并安装  .NET Core运行时
  2. / Applications /中下载并解压缩.NET Core包。
  3. 打开终端并键入以下命令:

cd /Applications/wexflow/Wexflow.Server

dotnet Wexflow.Server.dll

就是这样,Wexflow已经安装并准备好工作了。

最后,您可以通过在浏览器上打开网页/Applications/wexflow/Backend/index.html来打开后端:

https://www.codeproject.com/KB/cs/1164009/wbo-login-3.2.png

如果您是第一次安装Wexflow,则可以使用这些凭据登录:

用户名admin

密码wexflow2018

然后,您可以从后端更改密码。

Android

安装Wexflow服务器后,按照以下步骤在Android设备上安装Wexflow Manager

1.下载wexflow.apk

2.安装wexflow.apk

3.启动Wexflow应用程序并通过设置菜单打开应用程序设置:

https://www.codeproject.com/KB/cs/1164009/android-3.2-1.png 

5.单击“Wexflow Web Service URI”

https://www.codeproject.com/KB/cs/1164009/android-3.2-2.png

6.配置Wexflow Web Service Uri

https://www.codeproject.com/KB/cs/1164009/android-3.2-3.png

确保Wexflow服务器正在运行,并且防火墙中的端口8000已打开。

就是这样,Wexflow应用程序已准备就绪。如果您是第一次安装Wexflow,则可以使用这些凭据登录:

用户名admin

密码wexflow2018

您可以从后端更改密码。

https://www.codeproject.com/KB/cs/1164009/android-3.2-1.png

登录后,您将获得可以从Android设备轻松管理的工作流列表:

https://www.codeproject.com/KB/cs/1164009/android-3.2-4.png

如何卸载Wexflow

Windows

要卸载Wexflow,只需单击“Windows开始菜单> Wexflow”中的卸载菜单。

或者转到控制面板>添加/删除程序,然后选择“Wexflow”并单击卸载:

https://www.codeproject.com/KB/cs/1164009/wu-3.5-1.png

卸载Wexflow后,将显示一个窗口,通知卸载成功:

https://www.codeproject.com/KB/cs/1164009/wu-3.5-2.png

Wexflow卸载之后,文件夹C:\Wexflow\ C:\WexflowTesting\不会被删除,以防止用户定义的工作流和测试场景被删除。但是,如果您不需要它们,可以手动删除它们。

日志文件  C:\Program Files\Wexflow\Wexflow.log 也不会被删除,以跟踪Wexflow完成的上一次操作。但是,如果您不需要日志,则可以删除日志文件。

Linux

要从Linux系统卸载Wexflow,请执行以下操作:

sudo rm -rf /opt/wexflow

macOS

要从macOS系统卸载Wexflow,只需从/Applications/文件夹中删除wexflow即可。

Android

要从Android设备卸载Wexflow,只需打开设置”>“应用程序”>“Wexflow”,然后将其卸载即可。

如何使用Wexflow

通常的做法

安装Wexflow后,将创建文件夹 C:\Wexflow\C:\WexflowTesting\。文件夹C:\ Wexflow\Wexflow的主要配置文件夹,包含以下元素:

  • Wexflow.xmlWexflow引擎的主要配置文件。其路径可以从C:\Program Files\Wexflow\Wexflow.Server.exe.config配置。
  • Workflows/ 包含工作流程。
  • Workflow.xsd 它是工作流XML Schema Definition
  • Trash/ 垃圾文件夹。
  • Temp / Wexflow的临时文件夹。
  • Database/ 包含Wexflow工作流引擎的数据库。
  • Tasks/ 是一个可选文件夹,可以包含自定义任务dll 
  • GlobalVariables.xml,包含工作流的全局变量
  • TasksNames.json  ,包含任务的名称。此配置文件由设计人员使用。
  • TasksSettings.json  ,包含任务的设置。此配置文件由设计人员使用。

文件夹C:\WexflowTesting\ 包含测试方案的数据。

日志用写在C:\Program Files\Wexflow\Wexflow.log中。每天有一个日志文件。旧的日志文件以Wexflow.logyyyyMMdd格式保存。

.NET Core版本中:

  • Windows:创建文件夹C:\Wexflow-dotnet-core\C:\WexflowTesting\。主配置文件C:\Wexflow-dotnet-core\Wexflow.xml的路径可以从Wexflow.Server\appsettings.json中配置。日志写在Wexflow.Server\Wexflow.log中。
  • Linux:创建文件夹/opt/wexflow/Wexflow/ /opt/wexflow/WexflowTesting/。主配置文件/opt/wexflow/Wexflow/Wexflow.xml的路径可以从/opt/wexflow/Wexflow.Server/appsettings.json中配置。日志写在/opt/wexflow/Wexflow.Server/Wexflow.log中。
  • macOS:创建文件夹/Applications/wexflow/Wexflow//Applications/wexflow/WexflowTesting/。主配置文件/Applications/wexflow/Wexflow/Wexflow.xml的路径可以从/Applications/wexflow/Wexflow.Server/appsettings.json中配置。日志写在/Applications/wexflow/Wexflow.Server/Wexflow.log中。

在工作流的配置文件如下:

<!--
    This is the configuration file of a workflow. 
    A workflow is composed of:
      - An id which is an integer that must be unique.
      - A name which is a string that must be unique.
      - A description which is a string.
      - A Settings section which is composed of the following elements:
        - A launchType which is one of the following options:
          - startup: The workflow is launched when Wexflow Engine starts.
          - trigger: The workflow is launched manually from Wexflow Manager.
          - periodic: The workflow is launched periodically.
          - corn: The workflow is launched depending on a cron expression.
        - A period which is necessary for the periodic launchType. It is 
          a timeSpan in this format dd.hh:mm:ss. For example the period
          00.00:02:00 will launch the workflow every 2 minutes.
        - A cron expression which is necessary for the cron launchType.
          For example '0 0/2 * * * ?' will launch the workflow every 2 minutes.
        - The enabled option which allows to enable or disable a workflow.
          The possible values are true or false.
      - A LocalVariables section which contains local variables.
      - A Tasks section which contains the tasks that will be executed by
        the workflow one after the other.
        - A Task is composed of:
          - An id which is an integer that must be unique.
          - A name which is one of the options described in the tasks documentation.
          - A description which is a string.
          - The enabled option which allows to enable or disable a task. The possible 
            values are true or false.
          - A collection of settings.
      - An ExecutionGraph section which contains the execution graph of the workflow.
-->
<Workflow xmlns="urn:wexflow-schema" id="$int" name="$string" description="$string">
  <Settings>
    <Setting name="launchType" value="startup|trigger|periodic|cron" />
    <Setting name="period" value="dd.hh:mm:ss" />
    <Setting name="cronExpression" value="$string" />
    <Setting name="enabled" value="true|false" />
  </Settings>
  <LocalVariables>
    <Variable name="$string" value="$string" />
    <Variable name="$string" value="$string" />
    <!-- You can add as many variables as you want. -->
  </LocalVariables>
  <Tasks>
    <Task id="$int" name="$string" description="$string" enabled="true|false">
      <Setting name="$string" value="$string" />
      <Setting name="$string" value="$string" />
      <!-- You can add as many settings as you want. -->
    </Task>
    <Task id="$int" name="$string" description="$string" enabled="true|false">
      <Setting name="$string" value="$string" />
      <Setting name="$string" value="$string" />
    </Task>
    <!-- You can add as many tasks as you want. -->
  </Tasks>
  <!-- This section is optional and described in the samples section. -->
  <ExecutionGraph />
</Workflow>

有关cron工作流程,请阅读以下文档以获取更多详细信息。

这里解释局部变量  

这里解释全局变量  

Taskname选项必须是以下之一

执行图在示例部分中说明

要了解如何创建自己的工作流程,可以查看可用的工作流程示例  C:\Wexflow\Workflows\ 并阅读任务文档

如果在创建新工作流程C:\Wexflow\Workflows\或删除或修改现有工作流程时,您不必重新启动Wexflow Windows服务,以使这些修改生效。Wexflow引擎将自动检测更改并重新加载,添加或删除工作流。

要禁用工作流,您可以将工作流的enabled设置选项设置为false。如果要使工作流从Wexflow引擎加载的工作流列表中消失,则可以在C:\Wexflow\Workflows\中创建一个名为disabled的目录,并将该工作流移动到该目录。

任务之间如何进行通信?

状态通过selectFilesselectEntities设置在任务之间传输。

这按以下方式工作:

  1. 工作流中的任务完成其工作并生成存储在集合中的文件。
  2. 另一项任务(必须在同一工作流程中)之后可以使用selectFiles XML属性引用这些文件,指定生成所需文件的任务的ID。然后它可以使用这些文件来完成自己的工作。

更直观(来自示例):

<Workflow xmlns="urn:wexflow-schema" id="1" name="Workflow_Invoices" description="Workflow_Invoices">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading invoices" enabled="true">
            <Setting name="folder" value="C:\WexflowTesting\Invoices\" />
        </Task>
        <!-- some more tasks here -->
        <Task id="6" name="FilesMover" description="Moving invoices" enabled="true">
            <Setting name="selectFiles" value="1" />
            <Setting name="destFolder" value="C:\WexflowTesting\Invoices_sent\" />
        </Task>
    </Tasks>
</Workflow>

selectEntities设置与selectFiles的工作方式相同。唯一的区别是selectEntities旨在用于处理来自数据库或Web服务的自定义对象的任务。要进一步了解,请阅读有关实体的文档说明

Wexflow Manager

当您第一次打开Wexflow Manager时,您将看到以下窗口:

https://www.codeproject.com/KB/cs/1164009/wm-login-3.2.png

以下是登录凭据:

  • 用户名admin
  • 密码wexflow2018

登录后,您将看到此窗口:

https://www.codeproject.com/KB/cs/1164009/wm-3.5.png

然后,您可以从后端更改密码。

使用Wexflow Manager,您可以轻松管理工作流程。Wexflow Manager是一个简单的应用程序,允许用户执行以下操作:

  • 查看Wexflow Engine加载的所有工作流程。
  • 查看所选工作流的状态(运行,暂停或禁用)。
  • 启动工作流程。
  • 暂停工作流程。
  • 恢复工作流程。
  • 停止工作流程。
  • 后端按钮打开后端,您可以从中管理工作流程、设计工作流程、跟踪工作流程并获得有关工作流程的实时统计信息。
  • 日志按钮允许查看当天的日志。
  • 刷新按钮允许重新加载工作流列表。
  • 重新启动服务器按钮允许重新启动Wexflow服务器。
  • 搜索按钮允许搜索工作流程。
  • 帮助菜单打开帮助页面。
  • 关于菜单显示Wexflow的版本并检查新版本是否可用。

要查看Wexflow中发生了什么,请在如Notepad ++等文本编辑器中打开日志文件C:\Program Files\Wexflow\Wexflow.logNotepad ++将在填满时更新日志文件。

后端

后端是一个可以托管在IISApacheNginx或任何其他Web服务器上的网站。后端也可以在本地运行。

后端提供有关工作流程的实时统计信息。它可以让您轻松灵活地管理、设计和跟踪您的工作流程。您可以使用后端轻松访问、配置、管理(manage)治理(administer)和开发工作流程。

登录

当您第一次打开后端时,您将到达登录页面:

https://www.codeproject.com/KB/cs/1164009/wbo-login-3.2.png

以下是登录凭据:

  • 用户名admin
  • 密码wexflow2018

登录后,您可以从用户页面更改密码。

重设密码

如果用户忘记了密码,可以点击忘记密码?” 链接重置他的密码:

https://www.codeproject.com/KB/cs/1164009/wbo-forgot-password-3.2.png

当用户点击提交按钮时,会向他发送一封电子邮件,上面写着他可以在登录后更改的临时密码。

要允许后端发送电子邮件,必须在配置文件中设置SMPT配置:C:\Program Files\Wexflow\Wexflow.Server.exe.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <appSettings>
    <add key="WexflowSettingsFile" value="C:\Wexflow\Wexflow.xml"/>
    <add key="Smtp.Host" value="smtp.gmail.com"/>
    <add key="Smtp.Port" value="587"/>
    <add key="Smtp.EnableSsl" value="true"/>
    <add key="Smtp.User" value="user"/>
    <add key="Smtp.Password" value="password"/>
    <add key="Smtp.From" value="user"/>
  </appSettings>
  ...
 </configuration>

.NET Core版本中,要在Windows系统中编辑的配置文件是Wexflow.Server\appsettings.json

{
  "WexflowSettingsFile": "C:\\Wexflow-dotnet-core\\Wexflow.xml",
  "WexflowServicePort":  8000, 
  "Smtp.Host": "smtp.gmail.com",
  "Smtp.Port": 587,
  "Smtp.EnableSsl": true,
  "Smtp.User": "user",
  "Smtp.Password": "password",
  "Smtp.From": "user",
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

Linux系统中,要编辑的配置文件是/opt/wexflow/Wexflow.Server/appsettings.json

{
  "WexflowSettingsFile": "/opt/wexflow/Wexflow/Wexflow.xml",
  "WexflowServicePort":  8000, 
  "Smtp.Host": "smtp.gmail.com",
  "Smtp.Port": 587,
  "Smtp.EnableSsl": true,
  "Smtp.User": "user",
  "Smtp.Password": "password",
  "Smtp.From": "user",
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

macOS系统中,要编辑的配置文件是/Applications/wexflow/Wexflow.Server/appsettings.json

{
  "WexflowSettingsFile": "/Applications/wexflow/Wexflow/Wexflow.xml",
  "WexflowServicePort":  8000, 
  "Smtp.Host": "smtp.gmail.com",
  "Smtp.Port": 587,
  "Smtp.EnableSsl": true,
  "Smtp.User": "user",
  "Smtp.Password": "password",
  "Smtp.From": "user",
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

仪表板(Dashboard)

登录后,您将到达仪表板页面:

https://www.codeproject.com/KB/cs/1164009/wbo-dashboard-3.2.png

Wexflow为您提供了一个漂亮的仪表板,可以查看工作流程的实时统计数据。实际上,仪表板页面为您提供了有关工作流程的实时统计信息,可让您轻松、详细地跟踪工作流程服务器。在仪表板中,您还可以按关键字或按日期过滤工作流条目。您还可以按日期、名称等排序工作流条目。

管理(Manager)

管理页面可让您轻松管理工作流程。实际上,您可以从此页面启动工作流、暂停正在运行的工作流、恢复暂停的工作流、停止正在运行的工作流并按关键字搜索工作流:

https://www.codeproject.com/KB/cs/1164009/wbo-manager-3.2.png

设计(Designer)

设计页面可让您轻松设计工作流程。实际上,您可以从此页面创建新工作流程,编辑现有工作流程或删除工作流程。此页面还允许您可视化工作流的依赖关系图。使用设计页面,我们可以获得工作流依赖关系图的良好视觉概览。每个节点代表一个必须运行的任务:

https://www.codeproject.com/KB/cs/1164009/wbo-designer-3.2.png

历史

历史页面将允许您跟踪工作流服务器上发生的所有工作流程和所有内容。实际上,在此页面中,您将概览在工作流服务器上执行的所有工作流实例。此外,您可以按关键字或日期过滤条目。您还可以按日期、名称等排序条目。

https://www.codeproject.com/KB/cs/1164009/wbo-history-3.2.png

用户

用户页面允许创建新用户,更改密码和用户信息,以及删除具有受限访问权限的用户。

https://www.codeproject.com/KB/cs/1164009/wbo-users-3.2.png

具有受限权限的用户只能访问仪表板页面和历史记录页面。当他登录时,他看到的后端界面如下:

https://www.codeproject.com/KB/cs/1164009/wbo-restricted-3.2.png

安装

后端是一个可以托管在IISApacheNginx或任何其他Web服务器上的网站。后端也可以在本地运行。

要在Web服务器上安装后端,只需在Web服务器中复制文件夹C:\Program Files\Wexflow\Backend的内容即可。然后,如果要在另一台计算机上安装后端,请配置工作流服务器URI。只需编辑配置文件“js/settings.js”

Settings = {
    Uri: "http://localhost:8000/wexflow/"
};

而不是localhost,将机器的IPDNS放在安装Wexflow服务器的位置。

Android Manager

https://www.codeproject.com/KB/cs/1164009/android-3.2-1.png

https://www.codeproject.com/KB/cs/1164009/android-2.5-1.png

Wexflow提供了一个用于管理工作流程的Android应用程序。

Wexflow Android Manager允许用户执行以下操作:

  • 查看Wexflow Engine加载的所有工作流程。
  • 查看所选工作流的状态(运行,暂停或禁用)。
  • 启动工作流程。
  • 停止工作流程。
  • 暂停工作流程。
  • 恢复工作流程。
  • 刷新按钮允许重新加载工作流列表。

工作流程示例

Wexflow旨在为工作流程和自动化领域的初学者提供简单易用的方法。

可以通过设计人员或通过编辑工作流程的配置文件进行XML编辑来设计工作流程。但是,强烈建议您了解Wexflow工作流语法,以熟悉此工作流引擎。

Wexflow中的每个工作流都有一个默认位于文件夹 C:\Wexflow\Workflows中的  配置文件。每个配置文件都包含一组要执行的设置和任务,具体取决于指定的计划和指定的配置。

在本节中,将介绍几个工作流程示例,以使最终用户熟悉Wexflow工作流程语法。

顺序工作流程

顺序工作流按顺序逐个执行一组任务。任务以顺序方式执行,直到最后一个任务完成。可以通过修改工作流的执行图来更改任务执行的顺序。

工作流程1

https://www.codeproject.com/KB/cs/1164009/Workflow_Invoices.png

此工作流将发票上载到SFTP服务器,然后等待2天,然后通知客户。

<Workflow xmlns="urn:wexflow-schema" id="1" name="Workflow_Invoices" description="Workflow_Invoices">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading invioces" enabled="true">
            <Setting name="folder" value="C:\WexflowTesting\Invoices\" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading invoices" enabled="true">
            <Setting name="protocol" value="sftp" /> <!-- ftp|ftps|sftp -->
            <Setting name="command" value="upload" /> <!-- list|upload|download|delete -->
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
        <Task id="3" name="Wait" description="Waiting for 2 days" enabled="true">
            <Setting name="duration" value="2.00:00:00" />
        </Task>
        <Task id="4" name="FilesLoader" description="Loading emails" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\Emails\Invoices.xml" />
        </Task>
       <Task id="5" name="MailsSender" description="Notifying customers" enabled="true">
            <Setting name="selectFiles" value="4" />
            <Setting name="host" value="127.0.0.1" />
            <Setting name="port" value="587" />
            <Setting name="enableSsl" value="true" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
        </Task>
        <Task id="6" name="FilesMover" description="Moving invoices" enabled="true">
            <Setting name="selectFiles" value="1" />
            <Setting name="destFolder" value="C:\WexflowTesting\Invoices_sent\" />
        </Task>
    </Tasks>
</Workflow>

首先,FilesLoader任务加载位于文件夹C:\WexflowTesting\Invoices\中的所有发票,然后Ftp任务将它们上传到SFTP服务器,然后Wait任务等待2天,然后FilesLoader任务以XML格式加载电子邮件,然后MailsSender任务发送电子邮件。最后,FilesMover任务将发票移动到文件夹C:\WexflowTesting\Invoices_sent\中。

工作流程2

https://www.codeproject.com/KB/cs/1164009/Workflow_FilesSender.png

此工作流等待文件到达C:\WexflowTesting\Watchfolder1\C:\WexflowTesting\Watchfolder2\,然后将它们上载到FTP服务器,然后在将它们移动到C:\WexflowTesting\Sent\文件夹中。此工作流程每2分钟执行一次。

<Workflow xmlns="urn:wexflow-schema" id="2" name="Workflow_FilesSender" description="Workflow_FilesSender">
    <Settings>
        <Setting name="launchType" value="periodic" />
        <Setting name="period" value="00.00:02:00.00" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading files" enabled="true">
            <Setting name="folder" value="C:\WexflowTesting\Watchfolder1\" />
            <Setting name="folder" value="C:\WexflowTesting\Watchfolder2\" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading files" enabled="true">
            <Setting name="protocol" value="ftp" /> <!-- ftp|ftps|sftp -->
            <Setting name="command" value="upload" /> <!-- list|upload|download|delete -->
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
        <Task id="3" name="FilesMover" description="Moving files to Sent folder" enabled="true">
            <Setting name="selectFiles" value="1" />
            <Setting name="destFolder" value="C:\WexflowTesting\Sent\" />
        </Task>
    </Tasks>
</Workflow>

首先,该FilesLoader任务加载位于文件夹C:\WexflowTesting\Watchfolder1\C:\WexflowTesting\Watchfolder2\和中的所有文件,然后Ftp任务加载文件并将它们上载到FTP服务器。最后,FilesMover任务将文件移动到C:\WexflowTesting\Sent\文件夹  

工作流程3

https://www.codeproject.com/KB/cs/1164009/Workflow_ffmpeg.png

此工作流程通过FFMPEG将位于C:\WexflowTesting\WAV\中的WAV文件转码MP3格式,并将转码后的文件移动到  C:\WexflowTesting\MP3\

<Workflow xmlns="urn:wexflow-schema" id="3" name="Workflow_ffmpeg" description="Workflow_ffmpeg">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading WAV files" enabled="true">
            <Setting name="folder" value="C:\WexflowTesting\WAV\" />
        </Task>
        <Task id="2" name="ProcessLauncher" description="WAV to MP3" enabled="true">
            <Setting name="selectFiles" value="1" />
            <!-- You need to install FFMPEG -->
            <Setting name="processPath" value="C:\Program Files\ffmpeg\bin\ffmpeg.exe" />
            <!-- variables: {$filePath},{$fileName},{$fileNameWithoutExtension}-->
            <Setting name="processCmd" value="-i {$filePath} -codec:a libmp3lame -qscale:a 2 {$output:$fileNameWithoutExtension.mp3}" /> 
            <Setting name="hideGui" value="true" />
            <Setting name="generatesFiles" value="true" /> 
        </Task>
        <Task id="3" name="FilesMover" description="Moving MP3 files from temp folder" enabled="true">
            <Setting name="selectFiles" value="2" />
            <Setting name="destFolder" value="C:\WexflowTesting\MP3\" />
        </Task>
    </Tasks>
</Workflow>

首先,FilesLoader任务加载位于C:\WexflowTesting\WAV\ 文件夹中的所有文件,  然后 ProcessLauncher 任务通过指定正确的命令来为每个文件启动FFMPEG进程以创建MP3文件。最后,FilesMover任务将MP3文件移动到C:\WexflowTesting\MP3\文件夹 

工作流程4

https://www.codeproject.com/KB/cs/1164009/Workflow_vlc.png

此工作流等待WAV文件到达C:\WexflowTesting\WAV\,然后通过VLC将它们转码为MP3文件,然后将MP3文件上传到FTP服务器,然后将WAV文件移动到C:\WexflowTesting\WAV_processed\。此工作流程每2分钟执行一次。

<Workflow xmlns="urn:wexflow-schema" id="4" name="Workflow_vlc" description="Workflow_vlc">
    <Settings>
        <Setting name="launchType" value="periodic" />
        <Setting name="period" value="00.00:02:00.00" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading WAV files" enabled="true">
            <Setting name="folder" value="C:\WexflowTesting\WAV\" />
        </Task>
        <Task id="2" name="ProcessLauncher" description="WAV to MP3" enabled="true">
            <Setting name="selectFiles" value="1" />
            <!-- You need to install VLC-->
            <Setting name="processPath" value="C:\Program Files\VideoLAN\VLC\vlc.exe" />
            <!-- variables: {$filePath},{$fileName},{$fileNameWithoutExtension}-->
            <Setting name="processCmd" value="-I dummy {$filePath} :sout=#transcode{acodec=mpga}:std{dst={$output:$fileNameWithoutExtension.mp3},access=file} vlc://quit" />
            <Setting name="hideGui" value="true" />
            <Setting name="generatesFiles" value="true" />
        </Task>
        <Task id="3" name="Ftp" description="Uploading MP3 files" enabled="true">
            <Setting name="protocol" value="ftp" />
            <Setting name="command" value="upload" />
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="2" />
        </Task>
        <Task id="4" name="FilesMover" description="Moving WAV files" enabled="true">
            <Setting name="selectFiles" value="1" />
            <Setting name="destFolder" value="C:\WexflowTesting\WAV_processed\" />
        </Task>
    </Tasks>
</Workflow>

首先,FilesLoader任务加载位于C:\WexflowTesting\WAV\ 文件夹中的所有文件,然后ProcessLauncher 任务通过指定正确的命令来启动每个文件的VLC过程以创建MP3文件。然后,Ftp任务加载ProcessLauncher 任务生成的MP3文件,然后将其上载到FTP服务器。最后,FilesMover任务将处理后的WAV文件移动到C:\WexflowTesting\WAV_processed\文件夹。

工作流程5

https://www.codeproject.com/KB/cs/1164009/Workflow_Ftp_download_tag.png

此工作流程从FTP服务器下载特定文件。此工作流程首先列出位于服务器根文件夹中的所有文件,然后通过XSLTLisFiles.xslt)标记要下载的特定文件,然后通过Ftp任务通过todo="toDownload" from="app4"标签下载文件,然后将下载的文件移动到C:\WexflowTesting\Ftp_download\文件夹。

<Workflow xmlns="urn:wexflow-schema" id="5" name="Workflow_Ftp_download_tag" description="Workflow_Ftp_download_tag">
    <Settings>
        <Setting name="launchType" value="trigger" /> <!-- startup|trigger|periodic -->
        <Setting name="enabled" value="true" /> <!-- true|false -->
    </Settings>
    <Tasks>
        <Task id="1" name="Ftp" description="Listing files (FTP)" enabled="true">
            <Setting name="command" value="list" />
            <Setting name="protocol" value="ftp" /> <!-- ftp|ftps|sftp -->
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
        </Task>
        <Task id="2" name="ListFiles" description="Listing files" enabled="true">
        </Task>
        <Task id="3" name="Xslt" description="Renaming and tagging files" enabled="true">
            <Setting name="selectFiles" value="2" />
            <Setting name="xsltPath" value="C:\Wexflow\Xslt\ListFiles.xslt" />
            <Setting name="version" value="2.0" /> <!-- 1.0|2.0 -->
            <Setting name="removeWexflowProcessingNodes" value="false" />
        </Task>
        <Task id="4" name="Ftp" description="Downloading files" enabled="true">
            <Setting name="command" value="download" />
            <Setting name="protocol" value="ftp" /> <!-- ftp|ftps|sftp -->
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" todo="toDownload" from="app4" />
        </Task>
        <Task id="5" name="FilesMover" description="Moving files to Ftp_download" enabled="true">
            <Setting name="selectFiles" value="4" />
            <Setting name="destFolder" value="C:\WexflowTesting\Ftp_download\" />
            <Setting name="overwrite" value="true" />
        </Task>
    </Tasks>
</Workflow>

粗略地说,Ftp任务加载位于工作流运行实例中的FTP服务器根文件夹的文件列表,然后是ListFiles任务输出和包含所有加载文件的XML文件,然后该Xslt任务将此XML作为输入并生成包含被调用的系统节点的XML,其中包含<WexflowProcessing>要标记和/或重命名的文件列表。

要了解标记和重命名文件的工作方式,请参阅ListFilesXslt任务的文档。

以下是用于标记文件的XSLT ListFiles.xslt

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <root>
      <WexflowProcessing>
        <xsl:for-each select="//WexflowProcessing/Workflow/Files//File">
          <xsl:choose>
            <xsl:when test="@name = 'file1.txt'">
              <File taskId="{@taskId}" name="{@name}" renameTo="file1_renamed.txt" todo="toRename" from="app1" />
            </xsl:when>
            <xsl:when test="@name = 'file2.txt'">
              <File taskId="{@taskId}" name="{@name}" renameTo="file2_renamed.txt" todo="toSend" from="app2" />
            </xsl:when>
            <xsl:when test="@name = 'file3.txt'">
              <File taskId="{@taskId}" name="{@name}" renameTo="file3_renamed.txt" todo="toDownload" from="app3" />
            </xsl:when>
            <xsl:when test="@name = 'file4.txt'">
              <File taskId="{@taskId}" name="{@name}" renameTo="file4_renamed.txt" todo="toDownload" from="app4" />
            </xsl:when>
          </xsl:choose>
        </xsl:for-each>
      </WexflowProcessing>
    </root>
  </xsl:template>
</xsl:stylesheet>

执行图

https://www.codeproject.com/KB/cs/1164009/Workflow_FilesSender.png

此工作流加载文件C:\WexflowTesting\file1.txt ,然后将其上载到FTP服务器,然后将其移动到C:\WexflowTesting\Sent\文件夹。

<Workflow xmlns="urn:wexflow-schema" id="6" name="Workflow_Ftp_upload" description="Workflow_Ftp_upload">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading files" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file1.txt" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading files" enabled="true">
            <Setting name="protocol" value="ftp" />
            <Setting name="command" value="upload" />
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
        <Task id="3" name="FilesMover" description="Moving files to Sent folder" enabled="true">
            <Setting name="selectFiles" value="1" />
            <Setting name="destFolder" value="C:\WexflowTesting\Sent\" />
        </Task>
    </Tasks>
    <ExecutionGraph>
      <Task id="1"><Parent id="-1" /></Task>
      <Task id="2"><Parent id="1"  /></Task>
      <Task id="3"><Parent id="2"  /></Task>
    </ExecutionGraph>
</Workflow>

首先,FilesLoader任务加载文件C:\WexflowTesting\file1.txt,然后Ftp任务加载该文件并将其上传到FTP服务器。最后,FilesMover任务将该文件移动到C:\WexflowTesting\Sent\文件夹。

按照惯例,要执行的第一个任务的父任务ID必须始终为-1。此工作流的执行图将按以下顺序执行任务:

https://www.codeproject.com/KB/cs/1164009/Workflow_ExecutionGraph_upload_1.png

但是,如果执行图修改如下:

<ExecutionGraph>
  <Task id="1"><Parent id="-1" /></Task>
  <Task id="3"><Parent id="1"  /></Task>
  <Task id="2"><Parent id="3"  /></Task>
</ExecutionGraph>

任务将按如下方式执行:

https://www.codeproject.com/KB/cs/1164009/Workflow_ExecutionGraph_upload_2.png

如果执行图修改如下:

<ExecutionGraph>
  <Task id="3"><Parent id="-1" /></Task>
  <Task id="2"><Parent id="3"  /></Task>
  <Task id="1"><Parent id="2"  /></Task>
</ExecutionGraph>

任务将按如下方式执行:

https://www.codeproject.com/KB/cs/1164009/Workflow_ExecutionGraph_upload_3.png

执行图中禁止两件事:

  1. 无限循环。
  2. 并行任务。

这是一个无限循环的例子:

https://www.codeproject.com/KB/cs/1164009/Workflow_ExecutionGraph_infinite_loop_2.png

<ExecutionGraph>
  <Task id="1"><Parent id="-1" /></Task>
  <Task id="2"><Parent id="1"  /></Task>
  <Task id="1"><Parent id="2"  /></Task>
</ExecutionGraph>

以下是并行任务的示例:

https://www.codeproject.com/KB/cs/1164009/Workflow_ExecutionGraph_parallel_tasks.png

<ExecutionGraph>
  <Task id="1"><Parent id="-1" /></Task>
  <Task id="2"><Parent id="1"  /></Task>
  <Task id="3"><Parent id="1"  /></Task>
</ExecutionGraph>

流程图工作流

流程图工作流是在其执行图中包含至少一个流程图节点(If / While / Switch)的工作流。流程图节点将流程图任务和一组任务按顺序逐个执行作为输入。可以通过修改流程图节点的执行图来改变任务执行的顺序。

If

https://www.codeproject.com/KB/cs/1164009/Workflow_DoIf.png

以下工作流是由文件file.trigger触发的流程图工作流。如果在文件系统上找到文件file.trigger,则此工作流程将文件file1.txt上载到FTP服务器,然后它将通知客户上载成功。否则,如果在文件系统上找不到触发器file.trigger,则工作流将通知客户上载失败。

<Workflow xmlns="urn:wexflow-schema" id="7" name="Workflow_If" description="Workflow_If">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading files" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file1.txt" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading files" enabled="true">
            <Setting name="protocol" value="ftp" />
            <Setting name="command" value="upload" />
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
        <Task id="3" name="FilesLoader" description="Loading emails (OK)" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\Emails\Emails.xml" />
        </Task>
       <Task id="4" name="MailsSender" description="Notifying customers (OK)" enabled="true">
            <Setting name="selectFiles" value="3" />
            <Setting name="host" value="127.0.0.1" />
            <Setting name="port" value="587" />
            <Setting name="enableSsl" value="true" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
        </Task>
        <Task id="5" name="FilesLoader" description="Loading emails (KO)" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\Emails\Emails.xml" />
        </Task>
       <Task id="6" name="MailsSender" description="Notifying customers (KO)" enabled="true">
            <Setting name="selectFiles" value="5" />
            <Setting name="host" value="127.0.0.1" />
            <Setting name="port" value="587" />
            <Setting name="enableSsl" value="true" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
        </Task>
        <Task id="99" name="FileExists" description="Checking trigger file" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file.trigger" />
        </Task>
    </Tasks>
    <ExecutionGraph>
      <If id="100" parent="-1" if="99">
         <Do>
            <Task id="1"><Parent id="-1" /></Task>
            <Task id="2"><Parent id="1"  /></Task>
            <Task id="3"><Parent id="2"  /></Task>
            <Task id="4"><Parent id="3"  /></Task>
         </Do>
         <Else>
            <Task id="5"><Parent id="-1" /></Task>
            <Task id="6"><Parent id="5"  /></Task>
         </Else>
      </If>
    </ExecutionGraph>
</Workflow>

按照惯例,在<Do><Else>节点中执行的第一个任务的父任务ID 必须始终为-1

您可以在执行图中的任何位置添加If流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccessOnWarningOnError中添加它们。

一个If可以在一个If,一个While和一个Switch里面(即嵌套使用)。

While

https://www.codeproject.com/KB/cs/1164009/Workflow_DoWhile2.png

此工作流由文件file.trigger触发。当文件file.trigger存在时,此工作流将文件file1.txt上传到FTP服务器然后它将通知客户然后它将等待2天然后它将再次启动。

<Workflow xmlns="urn:wexflow-schema" id="8" name="Workflow_While" description="Workflow_While">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading files" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file1.txt" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading files" enabled="true">
            <Setting name="protocol" value="ftp" />
            <Setting name="command" value="upload" />
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
        <Task id="3" name="FilesLoader" description="Loading emails" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\Emails\Emails.xml" />
        </Task>
       <Task id="4" name="MailsSender" description="Notifying customers" enabled="true">
            <Setting name="selectFiles" value="3" />
            <Setting name="host" value="127.0.0.1" />
            <Setting name="port" value="587" />
            <Setting name="enableSsl" value="true" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
        </Task>
        <Task id="5" name="Wait" description="Waiting for 2 days..." enabled="true">
            <Setting name="duration" value="02.00:00:00" />
        </Task>
        <Task id="99" name="FileExists" description="Checking trigger file" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file.trigger" />
        </Task>
    </Tasks>
    <ExecutionGraph>
      <While id="100" parent="-1" while="99">
        <Task id="1"><Parent id="-1" /></Task>
        <Task id="2"><Parent id="1"  /></Task>
        <Task id="3"><Parent id="2"  /></Task>
        <Task id="4"><Parent id="3"  /></Task>
        <Task id="5"><Parent id="4"  /></Task>
      </While>
    </ExecutionGraph>
</Workflow>

按照惯例,要在<While>节点中执行的第一个任务的父任务标识必须始终为-1

您可以在执行图中的任何位置添加While 流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccessOnWarningOnError中添加它们。

一个 While可以在一个 While,一个If和一个Switch中。

Switch

https://www.codeproject.com/KB/cs/1164009/Switch.png

此工作流程每24小时启动一次。周一,它将文件上传到FTP服务器,并在周三通知客户。

<Workflow xmlns="urn:wexflow-schema" id="43" name="Workflow_Switch" description="Workflow_Switch">
  <Settings>
    <Setting name="launchType" value="periodic" />
	<Setting name="period" value="1.00:00:00" />
    <Setting name="enabled" value="true" />
  </Settings>
  <Tasks>
    <Task id="1" name="Now" description="Getting current day" enabled="true">
      <Setting name="culture" value="en-US" />  
      <Setting name="format" value="dddd" />
    </Task>
	<Task id="2" name="FilesLoader" description="Loading files" enabled="true">
      <Setting name="file" value="C:\WexflowTesting\file1.txt" />
    </Task>
    <Task id="3" name="Ftp" description="Uploading files" enabled="true">
      <Setting name="protocol" value="ftp" />
      <Setting name="command" value="upload" />
      <Setting name="server" value="127.0.1" />
      <Setting name="port" value="21" />
      <Setting name="user" value="user" />
      <Setting name="password" value="password" />
      <Setting name="path" value="/" />
      <Setting name="selectFiles" value="1" />
    </Task>
   <Task id="4" name="FilesLoader" description="Loading emails" enabled="true">
      <Setting name="file" value="C:\WexflowTesting\Emails\Emails.xml" />
   </Task>
   <Task id="5" name="MailsSender" description="Notifying customers" enabled="true">
        <Setting name="selectFiles" value="3" />
        <Setting name="host" value="127.0.0.1" />
        <Setting name="port" value="587" />
        <Setting name="enableSsl" value="true" />
        <Setting name="user" value="user" />
        <Setting name="password" value="password" />
    </Task>
  </Tasks>
  <ExecutionGraph>
    <Switch id="100" parent="-1" switch="1">
      <Case value="Monday">
        <Task id="2"><Parent id="-1" /></Task>
		<Task id="3"><Parent id="2" /></Task>
      </Case>
      <Case value="Wednesday">
        <Task id="4"><Parent id="-1" /></Task>
        <Task id="5"><Parent id="4" /></Task>
      </Case>
      <Default />
    </Switch>
  </ExecutionGraph>
</Workflow>

按照惯例,要在Case/Default节点中执行的第一个任务的父任务标识必须始终为-1

您可以在执行图中的任何位置添加Switch流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccessOnWarningOnError中添加它们。

一个 Switch可以在一个 While,一个 If和一个Switch中。

工作流事件

在工作流完成其工作后,其最终结果是成功、或警告或错误。如果其最终结果成功,则触发OnSuccess事件。如果其最终结果是警告,则会触发OnWarning事件。如果其最终结果是错误,则触发OnError事件。事件包含要按顺序逐个执行的一组任务和/或流程图节点。可以通过修改事件的执行图来改变任务和/或流程图节点的执行顺序。

https://www.codeproject.com/KB/cs/1164009/Workflow_Events.png

此工作流将file1.txt上载到FTP服务器,然后在成功的情况下通知客户。

<Workflow xmlns="urn:wexflow-schema" id="9" name="Workflow_Events" description="Workflow_Events">
    <Settings>
        <Setting name="launchType" value="trigger" />
        <Setting name="enabled" value="true" />
    </Settings>
    <Tasks>
        <Task id="1" name="FilesLoader" description="Loading files" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\file1.txt" />
        </Task>
        <Task id="2" name="Ftp" description="Uploading files" enabled="true">
            <Setting name="protocol" value="ftp" />
            <Setting name="command" value="upload" />
            <Setting name="server" value="127.0.1" />
            <Setting name="port" value="21" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
            <Setting name="path" value="/" />
            <Setting name="selectFiles" value="1" />
        </Task>
       <Task id="3" name="FilesLoader" description="Loading emails" enabled="true">
            <Setting name="file" value="C:\WexflowTesting\Emails\Emails.xml" />
        </Task>
       <Task id="4" name="MailsSender" description="Notifying customers" enabled="true">
            <Setting name="selectFiles" value="3" />
            <Setting name="host" value="127.0.0.1" />
            <Setting name="port" value="587" />
            <Setting name="enableSsl" value="true" />
            <Setting name="user" value="user" />
            <Setting name="password" value="password" />
        </Task>
    </Tasks>
    <ExecutionGraph>
      <Task id="1"><Parent id="-1" /></Task>
      <Task id="2"><Parent id="1"  /></Task>
      <OnSuccess>
        <Task id="3"><Parent id="-1" /></Task>
        <Task id="4"><Parent id="3"  /></Task>
      </OnSuccess>
    </ExecutionGraph>
</Workflow>

流程图事件节点<OnWarning><OnError>可以以相同的方式使用。你可以把IfWhileSwitch流程图节点放在事件节点中。

这些是简单而基本的工作流程,可以让您了解如何制作自己的工作流程。但是,如果您在工作流程中涉及多个系统,应用程序和自动化,则工作流程可能会非常有趣。

如何创建自定义任务?

通常的做法

自定义任务是工作流引擎中必须的,允许系统和应用程序进行交互。

例如,要创建自定义任务MyTask,您需要按以下步骤操作:

  1. Visual Studio中创建一个类库项目并命名它为Wexflow.Tasks.MyTask
  2. 通过nuget包管理器引用Wexflow.Core.dll及其依赖项:
PM> Install-Package Wexflow

     3.创建一个实现抽象类Wexflow.Core.Task的公共类MyTask

Wexflow.Tasks.MyTask 代码应如下所示:

using System.Threading;
using System.Xml.Linq;
using Wexflow.Core;

namespace Wexflow.Tasks.MyTask
{
    public class MyTask : Task
    {
        public MyTask(XElement xe, Workflow wf) : base(xe, wf)
        {
            // Task settings goes here
        }

        public override TaskStatus Run()
        {
            try
            {
                // Task logic goes here

                return new TaskStatus(Status.Success);
            }
            catch (ThreadAbortException)
            {
                throw;
            }
        }
    }
}

每个任务在完成执行其作业时返回一个TaskStatus对象。TaskStatus由以下元素组成:

public Status Status { get; set; }
public bool Condition { get; set; }
public string SwitchValue { get; set; }

Status可以是下列条件之一:

public enum Status
{
  Success,
  Warning,
  Error
}

例如,如果任务对文件集合执行操作,并且如果此操作对所有文件成功,那么它的Status应该是Success否则,如果此操作对某些文件成功而对其他文件失败则Status应该是Warning。否则,如果此操作对所有文件都失败,那么它Status应该是Error

Condition属性专为流程图任务而设计。除了任务的Status之外,流程图任务在执行其操作后返回truefalse

顺序任务的Condition属性应始终设置为false

SwitchValue被设计为由Switch流程图节点使用。如果在SwitchValue属性中设置值并在Switch流程图节点中使用此任务,则将执行与该值对应的大小写。否则,如果Default设置了大小写,它将被执行。

您可以使用适合您需要的TaskStatus构造函数。

要检索设置,您可以使用以下方法:

string settingValue = this.GetSetting("settingName");
string settingValue = this.GetSetting("settingName", defaultValue);
string[] settingValues = this.GetSettings("settingName");

要通过selectFiles设置选项选择正在运行的工作流实例加载的文件,您可以按如下方式执行此操作:

FileInf[] files = this.SelectFiles();

要通过selectEntities设置选项选择正在运行的工作流实例加载的实体,可以按如下方式执行:

Entity[] entities = this.SelectEntities();

在处理从数据库或Web服务操作对象的自定义任务时,Entity类可能非常有用。

要在任务中加载文件,可以按如下方式执行:

this.Files.Add(new FileInf(path, this.Id));

要在任务中加载实体,可以按如下方式执行:

this.Entities.Add(myEntity);

最后,如果您完成了自定义任务的编码,请编译类库项目并将程序集Wexflow.Tasks.MyTask.dll复制到C:\Program Files\Wexflow\C:\Wexflow\Tasks\中。可以通过C:\Wexflow\Wexflow.xml配置文件中的tasksFolder设置来配置C:\Wexflow\Tasks\ 文件夹的路径。

然后,您可以按如下方式使用自定义任务:

<Task id="$int" name="MyTask" description="My task description" enabled="true">
    <Setting name="settingName" value="settingValue" />
</Task>

就这样完成了。这就是开始编写自己的自定义任务所需要知道的所有事情。

要测试自定义任务,请创建一个新工作流(新XML文件)并将自定义任务的配置放在其中,如下所示:

<Workflow xmlns="urn:wexflow-schema" id="99" name="Workflow_MyWorkflow" description="Workflow_MyWorkflow">
	<Settings>
		<Setting name="launchType" value="trigger" /> <!-- startup|trigger|periodic|cron -->
		<Setting name="enabled" value="true" /> <!-- true|false -->
	</Settings>
	<Tasks>
        <Task id="1" name="MyTask" description="My task description" enabled="true">
            <Setting name="settingName" value="settingValue" />
        </Task>
	</Tasks>
</Workflow>

然后,将XML文件放在C:\Wexflow\Workflows\中。

然后,工作流将显示在Wexflow Manager的工作流列表中。然后你可以从那里启动它。

日志记录(Logging)

Task类可以使用以下方法进行日志记录:

public void Info(string msg);
public void InfoFormat(string msg, params object[] args);
public void Debug(string msg);
public void DebugFormat(string msg, params object[] args);
public void Error(string msg);
public void ErrorFormat(string msg, params object[] args);
public void Error(string msg, Exception e);
public void ErrorFormat(string msg, Exception e, params object[] args);

文件(Files)

文件可以通过调用方法AddAddRange加载到任务中:

this.Files.Add(myFile);
this.Files.AddRange(myFiles);

然后,可以通过其任务ID在其他任务中选择加载的文件,如下所示:

<Setting name="selectFiles" value="$taskId" />

要通过selectFiles设置选项选择正在运行的工作流实例加载的文件,您可以按如下方式执行此操作:

FileInf[] files = this.SelectFiles();

实体(Entities)

实体是一个具有任务的Id作为属性抽象类:

namespace Wexflow.Core
{
    public abstract class Entity
    {
        public int TaskId { get; set; }
    }
}

实体类被设计为由其他类继承,例如从数据库或Web服务或API或其他任何东西检索的对象。然后,这些对象可以通过调用方法AddAddRange加载到任务中:

this.Entities.Add(myEntity);
this.Entities.AddRange(myEntities);

然后,可以通过其任务ID在其他任务中选择加载的实体,如下所示:

<Setting name="selectEntities" value="$taskId" />

实体旨在用于自定义任务。

要通过selectEntities设置选项选择正在运行的工作流实例加载的实体,可以按如下方式执行:

Entity[] entities = this.SelectEntities();

在处理从数据库或Web服务操作对象的自定义任务时,Entity类非常有用。

共享内存(Shared memory)

任务包含一个Hashtable,可用作它们之间的共享内存。

要将对象添加到Hashtable,只需按以下步骤操作:

this.Hashtable.Add("myKey", myObject);

要从Hashtable中检索对象,只需按以下步骤操作:

var myObject = this.Hashtable["myKey"];

要从Hashtable中删除对象,只需按以下步骤操作:

this.Hashtable.Remove("myKey");

设计(Designer)

要使您的自定义任务MyTask出现在设计器的下拉列表中,只需打开文件C:\Wexflow\TasksNames.json并在其中添加“MyTask”,如下所示:

[
...
"MyTask"
]

您还必须通过打开文件C:\Wexflow\TasksSettings.json并添加自定义设置来添加设置,如下所示:

{
...
"MyTask": ["settingName"]
}

这就完成了。MyTask将显示在设计器下拉列表中,选中时它的设置也会显示出来。

调试(Debugging)

要调试自定义任务,可以使用日志记录

您还可以克隆此Wexflow的存储库并在Visual Studio中打开Wexflow.vs2017.slnWexflow.vs2010.sln,并按照这些指南调试Wexflow服务器。然后,您可以在解决方案中创建自定义任务并进行调试。当然,要调试它,你必须按如下方式进行:

  1. 创建自定义任务。
  2. Wexflow.Server中引用您的自定义任务。
  3. 使用自定义任务创建工作流程(请参阅文档)。
  4. 将工作流程放在C:\Wexflow\Workflows中。
  5. 打开Wexflow Manager或后端,从那里触发您的工作流程。

如何调试Wexflow

要调试Wexflow,请执行以下操作:

  • 安装Microsoft .NET Framework 4.0或更高版本。
  •  如果要调试同步任务,请安装Microsoft Sync Framework 2.1 SDK
  • 安装Visual Studio 2010或更高版本。
  • C:\中复制文件夹“Wexflow”“WexflowTesting”。你可以从这里下载它们。
  • Visual Studio中打开Wexflow.vs2017.slnWexflow.vs2010.sln
  • 确保将Wexflow.Server设置为启动项目。
  • 调试项目Wexflow.Server以调试模式启动Wexflow服务器。
  • 调试项目Wexflow.Clients.Manager以调试模式启动Wexflow Manager,或者您可以打开后端并从那里触发工作流。

这就完成了。我希望你喜欢阅读这篇文章。如果您有任何改进Wexflow的想法,或者如果您遇到任何问题或想要为此项目做出贡献,请在评论或GitHub中告诉我。

Wexflow使用的库

以下是Wexflow使用的库列表:

  • FluentFTP:支持用C#和MIT许可证编写的FTPFTPSexmplicit / implicit)的FTP客户端。
  • SSH.NET:用C#编写并使用MIT许可证的.NET SSH库。
  • SharpZipLib:用C#和MIT许可证编写的ZipGZipTarBZip2库。
  • Saxon-HEXSLTXQuery处理器,提供WSLC定义的基本一致性级别的XSLT2.0),XQuery1.0,3.03.1)和XPath2.0,3.03.1)的实现。它是Mozilla Public License 1.0版下的开源库。
  • log4net:著名的Apache log4j框架到Microsoft .NET运行时的端口。它在Apache许可证版本2.0下。
  • TweetSharp:围绕用C#编写的Twitter AP的快速而干净的包装器。
  • Microsoft Sync Framework 2.1:一种数据同步平台,允许跨多个数据存储同步数据。
  • Json.NET:用C#编写并在MIT许可下使用的高性能JSON框架。
  • Hammock:一个简化消费和包装RESTful服务的HTTP库。
  • Mono.Security:一个为.NET安全提供缺失部分的库。
  • Oracle数据访问组件(ODAC:用于.NETOracle数据库客户端。
  • MySQL Connector / Net:用于MySQL的完全托管的ADO.NET驱动程序。
  • System.Data.SQLiteSQLiteADO.NET提供程序。
  • Npgsql:一个用C#编写的PostgreSQL开源ADO.NET数据提供程序,以及PostgreSQL许可证,这是一个自由OSI认可的开源许可证。
  • Teradata.NET数据提供程序TeradataADO.NET提供程序。
  • Eto.Forms:用于.NET中桌面和移动应用程序的跨平台GUI框架。
  • highlight.jsJavascript语法荧光笔。
  • Cytoscape.js:用于分析和可视化的图论/网络库。
  • OpenPop.NETPOP3客户端的开源实现和用C#编写的健壮的MIME解析器。它允许开发人员在几分钟内轻松访问POP3服务器上的电子邮件。
  • iTextSharpiText库的.NET端口。
  • DiffPlex:一个Netstandard 1.0 C#库,用于生成文本差异。
  • MonoTorrent:实现BitTorrent协议的跨平台库。它基于.NET FrameworkMono实现。
  • Quartz.NETJava Quartz的一个端口,它是一个企业级作业调度系统。
  • SharpCompress:一个完全托管的C#库,用于处理许多压缩类型和格式。
  • DiscUtils:与光盘,文件系统格式等交互的实用程序库。
  • SevenZipSharp:用C#编写的托管7-zip库,提供数据(自我)提取和压缩(支持所有7-zip格式)。它包装7z.dll或任何兼容的,并使用LZMA SDK
  • 7-Zip7-Zip是一个具有高压缩比的文件存档器。
  • Selenium WebDriver:一组不同的软件工具,每种工具都有不同的方法来支持浏览器自动化。
  • ChromeDriver:一种开源工具,用于跨多种浏览器自动测试Web应用程序
  • NUglify:用于.NETHTMLJavaScriptCSS缩小库。
  • SharpScss:一个可移植的跨平台pinvoke围绕libsass.NET包装器,将SCSS转换为CSS
  • libsassSass编译器的AC / C ++实现。
  • YamlDotNetYAML.NET库。
  • LiteDB:一个.NET NoSQL文档存储在一个数据文件中。
  • Nancy:用于在.NetMono上构建基于HTTP的服务的轻量级、低仪式的框架。
  • KestrelASP.NET Core的跨平台Web服务器。

历史

  • 201715日:
  • 201719日: 
    • 发布1.0.1
    • 创建了Wexflow Windows服务。
    • 创建TarTgzSql任务。
    • 更新了Wexflow Manager
    • 修正了一些错误。
  • 2017116日:
    • 发布1.0.2
    • 创建Wmi  ImagesTransformer任务。
    • 更新了Wexflow Manager
  • 2017123日:
    • 发布1.0.3
    • 创建Http  Sync  FilesRenamer  FilesExist  Wait 任务。
    • 创建文件标签功能。
    • 添加列表,下载和删除Ftp任务命令(FTP / FTPS(显式/隐式)/ SFTP)。
    • 添加retryCountretryTimeout设置Ftp任务选项。
    • 更新了Wexflow管理器。
    • 更新了Wexflow引擎。
    • 修正了一些错误。
    • 更新了安装文件。
    • 更新了文章内容。
  • 2017126日:
    • 发布1.0.4
    • 在加载工作文件之前创建了对工作文件文件的XSD验证。
    • 创建任务执行图。
    • 创建流程图工作流程(DoIfDoWhile)。
    • 创建工作流事件(OnSuccessOnWarningOnError)。
    • 创建FileExists流程图任务。
    • 更新设置。
    • 更新了文章内容。
  • 2017130日:
    • 发布1.0.5
    • 创建Wexflow Web Manager:用于管理工作流的轻量级JavaScript API~6Kb)。
    • Linux创建了Wexflow Manager GUI
    • 更新了适用于WindowsWexflow Manager
    • 更新了Windows的设置。
    • Linux创建了一个设置。
  • 201726日:
    • 发布1.0.6
    • 创建了Wexflow Android Manager:用于管理工作流程的Android应用程序。
    • 更新了Wexflow Web Manager
    • 更新了Wexflow ManagerWindowsLinux)。
    • 更新了Wexflow引擎。
  • 2017217日:
    • 发布1.0.7
    • 创建了Movedir任务。
    • 更新了Wexflow Web Manager
    • 更新了Wexflow ManagerWindowsLinuxAndroid)。
    • 更新了Wexflow引擎。
    • 修正了一些错误。
  • 201736日:
    • 发布1.0.8
    • 创建Swictch / Case流程图节点。
    • 立即创建任务。
    • macOS创建了Wexflow Manager
    • 更新了IfWhile流程图节点语法。
    • 更新了安装项目。
    • 现在,If流程图节点可以位于Ifa WhileSwitch流程图节点内。
    • 现在,While流程图节点可以位于Ifa WhileSwitch流程图节点内。
    • 现在,Switch流程图节点可以位于Ifa WhileSwitch流程图节点内。
    • 代码重构。
    • 修正了一些错误。
  • 201747日:
    • 发布1.0.9
    • 固定Switch流程图节点子进程执行。
    • 修复了WCF服务配置问题。
  • 2017522日:
    • 发布1.1
    • 创建Workflow任务。此任务允许启动,暂停,恢复或停止工作流列表。
    • 性能优化。
    • 代码重构。
  • 2017107日:
    • 发布1.2
    • MailsS​​ender任务中实现邮件附件。
    • 日志记录    Wexflow Web服务客户端中将编码更改为UTF-8  
    • 热重载工作流程
      • 如果将工作流XML文件添加到Workflows文件夹,则会自动加载它而无需重新启动Wexflow Windows服务。
      • 如果从Workflows文件夹中删除工作流XML文件,则会自动停止并删除它,而无需重新启动Wexflow Windows服务。
      • 如果更改了工作流XML文件。无需重新启动Wexflow Windows服务即可自动重新加载。
    • 修复了Switch流量图节点中的空缺省节点问题。
    • 更新了WindowsmacOSLinux管理器应用程序。
  • 20171011日:
  • 20171013日:
    • 发布1.4
    • 实现Wexflow Designer编辑模式:
      • 现在可以通过Wexflow Designer编辑工作流程配置。
      • 现在可以通过Wexflow Designer编辑任务配置和设置。
  • 20171015日:
    • 发布1.5
    • Wexflow Designer添加了新功能:
      • 添加任务设置。
      • 删除任务设置。
      • 将属性添加到selectFiles并选择附件任务设置。
      • selectFiles中删除属性并选择附件任务设置。
      • 将任务添加到线性工作流程。
      • 从线性工作流中删除任务。
  • 20171016日:
    • 发布1.6
    • 现在我们可以在Wexflow Designer中创建线性工作流程。
  • 20171017日:
    • 发布1.7
    • 现在我们可以删除Wexflow Designer中的工作流程。
    • 增强的任务设置版本。
    • 更新了MailsSender 任务文档  
    • 修复了Wexflow Designer中的一些错误。
    • 更新了Windows安装项目。
  • 20171018日:
    • 发布1.8
    • Wexflow Designer中实现了线性工作流的执行图的可视化。
    • 更新了Windows安装项目。
  • 20171019日:
    • 发布1.9
    • 添加了新功能并修复了Wexflow Designer中的一些问题:
      • 实现了非lienar工作流的执行图的可视化。
      • 保存新工作流后显示xml按钮。
      • 修复了保存后编辑新工作流ID的问题。
      • 修复了保存新工作流并编辑其名称后有关工作流文件路径值的问题。
      • 修复了更改所选工作流程ID的问题。
  • 20171020日:
    • 发布2.0
    • 添加了一项新功能并修复了Wexflow Web Designer中的一些问题:
      • 改变了Wexflow Web Designer的风格。
      • 修复了保存现有工作流程时的问题。
      • 修复了多次更改现有工作流的ID时出现的问题。
    • Wexflow Web Manager添加了新功能:
      • 改变了Wexflow Web Manager的风格。
      • 停止工作流程时添加了确认对话框。
    • regexPattern在任务中添加了选项FilesLoader
    • recursive在任务中添加了加载选项FilesLoader
    • 更新了任务的文档FilesLoader
    • 更新了Wexflow Web服务。
    • 更新了工作流Workflow_FilesLoader
    • 更新了文件夹samples \ WexflowTesing
    • 更新了Windows安装项目。
    • 更新了任务的文档FilesRenamer
  • 20171027日:
    • 发布2.1
    • 添加了新任务:
      • Sha1:此任务生成文件集合的SHA-1哈希值,并将结果写入XML文件。
      • Sha256:此任务生成一组文件的SHA-256哈希值,并将结果写入XML文件。
      • Sha512:此任务生成一组文件的SHA-512哈希值,并将结果写入XML文件。
      • FilesConcat:此任务连接文件集合。
      • FilesSplitter:此任务将文件拆分为块。
      • FilesInfo:此任务生成文件集合的文件信息,并将结果写入XML文件。
      • MediaInfo:此任务为视频和音频文件生成最相关的技术和标签数据,并将结果输出到XML文件中。
      • MailsReceiver:此任务获取一组电子邮件。
      • ProcessKiller:此任务会终止进程。
    • 实施单元测试(vs2017)。
    • 更新了samples \ WexflowTesting文件夹。
    • 更新了samples \ Workflows文件夹。
    • 更新了任务FilesExistXslt的文档。
    • 更新了Windows安装程序
  • 2017115日:
    • 发布2.2
    • Wexflow Manager中添加了DesignerLogs按钮。
    • Wexflow Manager中添加了帮助和关于菜单。
    • Wexflow Designer的执行图中添加了任务描述。
    • 修复了Wexflow Designer中的一个问题:由于wexflow-designer.js中存在拼写错误,我们无法保存工作流程
    • 创建了Wexflow.Core nuget包。
    • 添加了新任务:
      • 解压缩:此任务提取ZIP存档。
      • Untar:此任务提取TAR档案。
      • Untgz:此任务提取TAR.GZ档案。
      • ProcessInfo:此任务显示有关进程的信息。
      • TextToPdf:此任务从TEXT文件生成PDF文件。
      • HtmlToPdf:此任务从HTML文件生成PDF文件。
      • SqlToXml:此任务执行SQL脚本集合(选择查询)并将结果输出到XML文件中。
      • SqlToCsv:此任务执行SQL脚本集合(选择查询)并以CSV文件格式输出结果。
      • Guid:此任务生成Guids并将结果输出到XML文件中。
    • 在任务Xslt中添加了扩展设置。
    • 更新了任务FilesCopier
    • 修复了Task.GetSetting中的一个问题。
    • 添加了新的单元测试。
    • 更新ImagesTransformerProcessKiller单元测试。
    • 更新了samples \ WexflowTesting文件夹。
    • 更新了samples \ Workflows文件夹。
    • 更新了Windows安装程序
    • 代码重构。
  • 20171114日:
    • 发布2.3
    • Wexflow设计师:
      • 将任务名称和任务设置移动到外部文件(C\ Wexflow \ TasksNames.jsonC\ Wexflow \ TasksSettings.json)。
      • 为任务添加了Xml和文档按钮。
    • 添加Hashtable作为任务的共享内存。
    • deleteMessages设置添加到任务MailsReceiver
    • 修复了SqlSqlToCsvSqlToXml任务中的一些问题。
    • 记录Wexflow.Core
    • 更新了Wexflow.Core nuget包。
    • 更新了我们调试Wexflow Windows服务和Wexflow Manager的方式。
    • 修正了问题  36
    • 修复了Wexflow引擎中的一个问题。
  • 20181012日:
    • 发布2.4
    • 通过FilesRenamer 任务重命名的文件不能通过后续任务访问。现在,FilesRenamer可以通过后续任务访问重命名的文件。
    • SqlToCsv 任务现在更具可配置性:
      • 添加了是否写入标题的设置,默认为true
      • 添加了引号字符的设置,例如可以引用列,例如”column1“”column2“,默认为空字符串。
      • 添加了将多个结果表导出到单个文件的功能。
      • 重构代码将每一行写入输出文件,因为将非常大的数据集写入单个StringBuilder将使用过多的内存并失败。也许最好的权衡是使用原始StringBuilder方法并写入每50,000100,000条记录,但是对于所有用例的代码而言,优先于代码而不是代码。
    • Ziptask:现在,如果zip文件名留空,RenameToOrName则集合中第一个文件的名称将被视为zip文件名。例如,如果RenameToOrName第一个文件的文件是file1.txt,则zip文件名将为file1.zip
  • 20181018日:
    • 发布2.5
    • 创建了以下新任务:
      • Torrent:此任务下载torrent文件。
      • FilesDiff:此任务计算两个文件的差异。
      • FilesEqual:此任务允许检查两个文件是否相同。
    • 添加了刷新按钮并在Wexflow Manager中滚动。
    • 更新的Android应用:
      • 更新的应用程序
      • 添加了刷新按钮。
      • 修复了UI中的问题。
    • XmlToCsv  任务现在更易于配置:
      • 添加了写入分隔符的设置,默认为;
      • 添加了引号字符的设置,例如可以引用列,例如”column1“”column2“,默认为空字符串。
      • 重构代码将每一行写入输出文件,因为将非常大的数据集写入单个StringBuilder将使用过多的内存并失败。也许最好的权衡是使用原始的StringBuilder方法并写入每50,000100,000条记录,但是对于所有用例的函数优先于代码而不是代码。
    • MailsS​​ender  任务现在更具可配置性:
      • 抄送现在是可选的。
      • 添加密送。它也是可选的。
    • 修复了在Http  任务中通过HTTPS下载文件的问题  
  • 20181020日:
    • 发布2.6
    • 创建了64位版本的Wexflow
    • Wexflow Manager中添加了重新启动服务器按钮:此按钮允许从Wexflow Manager重新启动Wexflow Windows服务。
    • 创建了以下新任务:
  • 20181023日:
    • 发布2.7
    • 添加了  cron调度:现在可以根据cron表达式启动工作流。
      • 更新了Wexflow引擎。
      • 更新了Wexflow服务器。
      • 更新了Wexflow Manager
      • 更新了Wexflow Web Manager
      • 更新了Wexflow设计器。
    • Wexflow Designer中为周期性工作流添加了期间字段验证。
    • Wexflow Designer中为cron工作流添加了cron表达式验证。
    • Sql  SqlToXml    SqlToCsv  任务升级    Oracle.ManagedDataAccess  59)。
    • 修复了Wexflow Manager中的图形问题。
    • 修复了Wexflow Designer中的一些问题。
    • 修复了停止Wexflow服务器时的问题。
    • 修复了在Wexflow Engine中删除或修改定期或cron工作流时的问题。
    • 修复了System.Data.SQLite.dll问题(61)。
    • nuget包更新到2.7.2  
  • 20181029日:
    • 发布2.8
    • 现在使用Quartz.NET  调度程序启动定期工作流程  
    • 现在,Wexflow Server以异步方式从Wexflow Manager重新启动。
    • 修复了Wexflow Manager中的拼写错误。
    • 修复了MediaInfo任务中的问题。
    • 修复了有关登录Workflow任务的问题。
    • 修复了FilesMover单元测试中的问题。
    • 更新了任务FileExists
    • 更新了nuget包到版本2.8.1
    • 创建了以下新任务:
  • 2018114日:
    • 发布2.9
    • RESTful API中添加了搜索功能。
    • Wexflow ManagerWexflow Web ManagerWexflow Web Designer中添加了搜索功能。
    • 修复了Wexflow Manager中滚动的问题。
    • 更新了Wexflow Web Designer的样式。
    • 创建了以下新任务:
      • WebToScreenshot:此任务从网址获取屏幕截图。
      • WebToHtml:此任务从URL检索HTML源。
      • UglifyJs:此任务用于解释JavaScript文件。
      • UglifyCss:此任务压缩和缩小CSS文件。
      • UglifyHtml:此任务压缩和缩小HTML文件。
      • HtmlToText:此任务从HTML文件中提取文本。
      • ScssToCss:此任务将SCSS文件转换为CSS文件。
      • YamlToJson:此任务将YAML文件转换为JSON文件。
      • JsonToYaml:此任务将JSON文件转换为YAML文件。
      • CsvToJson:此任务将CSV文件转换为JSON文件。
      • CsvToYaml:此任务将CSV文件转换为YAML文件。
      • HttpGet:此任务执行GET请求。
      • HttpPost:此任务执行POST请求。
      • HttpPut:此任务执行PUT请求。
      • HttpPatch:此任务执行PATCH请求。
      • HttpDelete:此任务执行DELETE请求。
      • Ping:这是一个流程图任务,用于检查服务器是否响应ping请求。
      • ExecCs:此任务执行C#脚本。
      • ExecVb:此任务执行Visual Basic脚本。
  • 2018117日:
    • 发布3.0
    • 创建了  Wexflow的后台办公室  ,它允许:
      • 获得有关工作流程的实时统计信息。
      • 轻松管理工作流程。
      • 轻松设计工作流程。
      • 轻松跟踪工作流程。
  • 2018119日:
  • 20181112日:
    • 发布3.2
    • Android应用程序添加了身份验证  
    • 后台添加了“forgot-password.html”页面  
    • 添加了忘记密码?” Wexflow Manager中的链接  
    • 修复了Wexflow Manager中有关身份验证的问题。
    • 修复了Wexflow Manager中有关安全性的问题(仅限管理员使用Wexflow Manager)。
    • 修复了SpeechToTextTextToSpeech任务中的问题。
    • 修复了DatabaseBackupDatabaseRestore任务中的问题。
  • 20181116日:
    • 发布3.3
    • Wexflow工作流引导到.NET Core 2.1
      • 以下  是在Windows上安装.NET Core版本的说明。
      • 以下  是在Linux上安装.NET Core版本的说明。
    • 修复了后台办公室中的条目和历史记录条目的问题。
    • 修复了ImagesConcatImagesOverlay任务中的问题。
    • 修复了Sha256Sha512任务中的一个问题。
    • 修复了设计器中的验证问题。
    • 更新了模板任务。
    • 更新了Wexflow Web Manager
  • 20181119日:
    • 发布3.4
    •  为工作流创建  局部变量
    • 创建.NET Core macOS安装程序。
    • 创建以下.NET Core任务:
      • Zip:此任务从文件集合创建.zip
      • 解压缩:此任务提取.zip压缩文件。
      • Ftp:此任务允许通过FTPFTPSSFTP列出,上载,下载或删除文件。
    • 修复了后台的一些问题。
  • 20181123日:
    • 发布3.5
    • 在设计器中添加了局部变量。
    • 创建任务  EnvironmentVariable  .NET.NET Core):这是一个检索环境变量值的流程图任务。
    • 更新了Wexflow Manager
    • 更新了Workflow.xsdWorkflow.xml
    • nuget包更新到3.5.0版。
  • 20181128日:
    • 发布3.6
    • 在设计器中添加了局部变量版本。
    • 在设计器中添加了全局变量。
    • 修复了更改设计器中现有任务时出现的问题。
    • 修复了设计器中有关selectAttachments设置的问题。
    • 修复了Wexflow Manager中的问题。
    • 修复了Workflow.xsd中的一个问题。
    • 修复了日志记录中的拼写错误。
    • 代码重构。
    • nuget包更新到版本3.6.0
  • 2018123日:
    • 发布3.7
    • 允许自定义dll与安装文件夹位于不同的文件夹中。
    • Ftp  任务升级  FluentFTP 19.2.2
    • 升级到Newtonsoft.Json 12.0.1
    • nuget包更新到3.7.0版。
  • 20181210日:
    • 发布3.8
    • 增强数据库性能。
    • 修复了macOS问题。
    • nuget包更新到版本3.8.0

 

原文地址:https://www.codeproject.com/Articles/1164009/Wexflow-Open-source-workflow-engine-in-Csharp

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页