目录
高性能,可扩展,模块化和跨平台的工作流引擎。
Wexflow是一个高性能、可扩展、模块化和跨平台的工作流引擎。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。Wexflow还有助于使长期运行的流程变得简单。
Wexflow旨在使系统,应用程序和人员之间的自动化、工作流程、长时间运行的流程和交互变得简单,直接和干净。通过这个功能强大的工作流引擎,系统或应用程序之间的通信变得容易。
Wexflow使用 .NET Core,这是一个跨平台版本的.NET,用于构建网站、服务和控制台应用程序。因此,Wexflow提供了一个跨平台的工作流服务器和一个跨平台的后端,可以轻松灵活地管理、设计和跟踪工作流。Wexflow服务器及其后端程序运行在Windows,Linux和macOS上。
Wexflow还利用了大规模企业系统中使用的 Quartz.NET开源作业调度系统。因此,Wexflow在计划工作流作业(如cron工作流)时提供了可靠性 。
此外,Wexflow 在其服务器和后端程序中使用LiteDB NoSQL文档存储数据库,这增强并改善了此工作流引擎的性能。
特征
Wexflow提供以下功能:
- 免费和开源。
- 易于安装和轻松配置。
- 简单易用。
- 模块化。
- 记录完整。
- 用户驱动。
- 跨平台工作流服务器。
- 跨平台后端。
- 用于管理工作流的跨平台应用程序。
- 用于设计工作流的跨平台应用程序。
- 用于管理工作流程的Android应用程序。
- 用户管理。
- 顺序工作流程。
- 流程图工作流程。
- 工作流程事件。
- Cron调度。
- 广泛的日志记录和事件报告。
- 有关工作流程的实时统计信息。
- 92个内置任务。
- RESTful API。
- 热重装。
- 自动化。
- 监控。
- 可扩展的。
Wexflow也带有后端,因此您可以在所有工作流程中进行搜索和过滤,拥有工作流程的实时统计数据,轻松管理工作流程,轻松设计工作流程,并轻松跟踪工作流程:
只是为了让您了解Wexflow的功能,这是“Designer”页面的截图。使用“Designer”页面,我们可以获得工作流依赖关系图的良好视觉概览。每个节点代表一个必须运行的任务:
找到更多的功能细节。
例子
以下是使用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 XP,Windows Server 2003或更高版本上。Wexflow支持.NET Framework 4.0或更高版本。
要安装Wexflow,请执行以下操作:
1.安装Microsoft .NET Framework 4.0或更高版本。
2.安装Wexflow:
3.选择目标位置:
4.您可以选择创建桌面快捷方式:
5.单击“安装”以执行安装:
6.安装程序将在系统上安装Wexflow:
7.最后,单击“完成”以完成安装:
8. 如果要使用同步任务,请安装Microsoft Sync Framework 2.1 Redistributables:
8.1如果您使用的是Wexflow x86,则安装Synchronization-v2.1-x86-ENU.msi和ProviderServices-v2.1-x86-ENU.msi。
8.2如果使用Wexflow x64,则安装Synchronization-v2.1-x64-ENU.msi和ProviderServices-v2.1-x64-ENU.msi。
开始菜单中添加了以下菜单:
- “后端”菜单打开后端。
- “配置”菜单打开Wexflow的配置文件夹。
- “文档”菜单打开Wexflow的文档文件夹。
- “日志”菜单打开当天的日志文件。
- “管理”菜单打开Wexflow管理界面。
- “卸载”菜单卸载Wexflow。
安装Wexflow后,将安装名为Wexflow的Windows服务并自动启动。要启动Wexflow Manager,必须运行此Windows服务。但是,如果要停止它,可以从Windows服务控制台执行此操作:
Windows(.NET核心)
- 下载并安装 .NET Core运行时。
- 在系统上的某个位置下载并解压缩.NET Core软件包。
- 双击“install.bat”以安装Wexflow的配置文件。
- 就这些。双击“run.bat”启动Wexflow工作流服务器:
端口8000必须是免费的。如果您已经在使用.NET版本的Wexflow,则必须停止Wexflow Windows服务或更改.NET Core版本的端口。
要更改.NET Core版本的端口,请编辑文件Wexflow.Server \ appsettings.json并更改设置“WexflowServicePort”的值。然后,通过编辑配置文件Backend \ _js \ settings.js来更改后端中的端口。
最后,您可以通过在浏览器上打开Backend \ index.html网页来打开后端。
要打开后端,请转到“后端”文件夹,然后双击“index.html”文件:
如果您是第一次安装Wexflow,则可以使用这些凭据登录:
用户名:admin
密码:wexflow2018
然后,您可以从后端更改密码。
Linux
- 下载并安装 .NET Core运行时。
- 在/opt/中下载并解压缩.NET Core包。
- 打开终端并键入以下命令:
cd /opt/wexflow/Wexflow.Server
sudo dotnet Wexflow.Server.dll
就是这样,Wexflow已安装并准备工作:
最后,您可以通过在浏览器上打开网页/opt/wexflow/Backend/index.html来打开后端:
如果您是第一次安装Wexflow,则可以使用这些凭据登录:
用户名:admin
密码:wexflow2018
然后,您可以从后端更改密码。
如果要使用图形处理任务,则必须安装以下库:
sudo apt install libc6-dev libgdiplus
macOS
- 下载并安装 .NET Core运行时。
- 在/ Applications /中下载并解压缩.NET Core包。
- 打开终端并键入以下命令:
cd /Applications/wexflow/Wexflow.Server
dotnet Wexflow.Server.dll
就是这样,Wexflow已经安装并准备好工作了。
最后,您可以通过在浏览器上打开网页/Applications/wexflow/Backend/index.html来打开后端:
如果您是第一次安装Wexflow,则可以使用这些凭据登录:
用户名:admin
密码:wexflow2018
然后,您可以从后端更改密码。
Android
安装Wexflow服务器后,按照以下步骤在Android设备上安装Wexflow Manager:
1.下载wexflow.apk
2.安装wexflow.apk
3.启动Wexflow应用程序并通过设置菜单打开应用程序设置:
5.单击“Wexflow Web Service URI”:
6.配置Wexflow Web Service Uri:
确保Wexflow服务器正在运行,并且防火墙中的端口8000已打开。
就是这样,Wexflow应用程序已准备就绪。如果您是第一次安装Wexflow,则可以使用这些凭据登录:
用户名:admin
密码:wexflow2018
您可以从后端更改密码。
登录后,您将获得可以从Android设备轻松管理的工作流列表:
如何卸载Wexflow?
Windows
要卸载Wexflow,只需单击“Windows开始菜单> Wexflow”中的“卸载”菜单。
或者转到“控制面板>添加/删除程序”,然后选择“Wexflow”并单击卸载:
卸载Wexflow后,将显示一个窗口,通知卸载成功:
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.xml是Wexflow引擎的主要配置文件。其路径可以从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工作流程,请阅读以下文档以获取更多详细信息。
这里解释全局变量 。
Task的name选项必须是以下之一。
执行图在示例部分中说明。
要了解如何创建自己的工作流程,可以查看可用的工作流程示例 C:\Wexflow\Workflows\ 并阅读任务文档。
如果在创建新工作流程C:\Wexflow\Workflows\或删除或修改现有工作流程时,您不必重新启动Wexflow Windows服务,以使这些修改生效。Wexflow引擎将自动检测更改并重新加载,添加或删除工作流。
要禁用工作流,您可以将工作流的enabled设置选项设置为false。如果要使工作流从Wexflow引擎加载的工作流列表中消失,则可以在C:\Wexflow\Workflows\中创建一个名为disabled的目录,并将该工作流移动到该目录。
任务之间如何进行通信?
状态通过selectFiles和selectEntities设置在任务之间传输。
这按以下方式工作:
- 工作流中的任务完成其工作并生成存储在集合中的文件。
- 另一项任务(必须在同一工作流程中)之后可以使用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时,您将看到以下窗口:
以下是登录凭据:
- 用户名:admin
- 密码:wexflow2018
登录后,您将看到此窗口:
然后,您可以从后端更改密码。
使用Wexflow Manager,您可以轻松管理工作流程。Wexflow Manager是一个简单的应用程序,允许用户执行以下操作:
- 查看Wexflow Engine加载的所有工作流程。
- 查看所选工作流的状态(运行,暂停或禁用)。
- 启动工作流程。
- 暂停工作流程。
- 恢复工作流程。
- 停止工作流程。
- “后端”按钮打开后端,您可以从中管理工作流程、设计工作流程、跟踪工作流程并获得有关工作流程的实时统计信息。
- “日志”按钮允许查看当天的日志。
- “刷新”按钮允许重新加载工作流列表。
- “重新启动服务器”按钮允许重新启动Wexflow服务器。
- “搜索”按钮允许搜索工作流程。
- “帮助”菜单打开帮助页面。
- “关于”菜单显示Wexflow的版本并检查新版本是否可用。
要查看Wexflow中发生了什么,请在如Notepad ++等文本编辑器中打开日志文件C:\Program Files\Wexflow\Wexflow.log。Notepad ++将在填满时更新日志文件。
后端
后端是一个可以托管在IIS,Apache,Nginx或任何其他Web服务器上的网站。后端也可以在本地运行。
后端提供有关工作流程的实时统计信息。它可以让您轻松灵活地管理、设计和跟踪您的工作流程。您可以使用后端轻松访问、配置、管理(manage)、治理(administer)和开发工作流程。
登录
当您第一次打开后端时,您将到达登录页面:
以下是登录凭据:
- 用户名:admin
- 密码:wexflow2018
登录后,您可以从“用户”页面更改密码。
重设密码
如果用户忘记了密码,可以点击“忘记密码?” 链接重置他的密码:
当用户点击“提交”按钮时,会向他发送一封电子邮件,上面写着他可以在登录后更改的临时密码。
要允许后端发送电子邮件,必须在配置文件中设置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)
登录后,您将到达仪表板页面:
Wexflow为您提供了一个漂亮的仪表板,可以查看工作流程的实时统计数据。实际上,“仪表板”页面为您提供了有关工作流程的实时统计信息,可让您轻松、详细地跟踪工作流程服务器。在仪表板中,您还可以按关键字或按日期过滤工作流条目。您还可以按日期、名称等排序工作流条目。
管理(Manager)
“管理”页面可让您轻松管理工作流程。实际上,您可以从此页面启动工作流、暂停正在运行的工作流、恢复暂停的工作流、停止正在运行的工作流并按关键字搜索工作流:
设计(Designer)
“设计”页面可让您轻松设计工作流程。实际上,您可以从此页面创建新工作流程,编辑现有工作流程或删除工作流程。此页面还允许您可视化工作流的依赖关系图。使用“设计”页面,我们可以获得工作流依赖关系图的良好视觉概览。每个节点代表一个必须运行的任务:
历史
“历史”页面将允许您跟踪工作流服务器上发生的所有工作流程和所有内容。实际上,在此页面中,您将概览在工作流服务器上执行的所有工作流实例。此外,您可以按关键字或日期过滤条目。您还可以按日期、名称等排序条目。
用户
“用户”页面允许创建新用户,更改密码和用户信息,以及删除具有受限访问权限的用户。
具有受限权限的用户只能访问“仪表板”页面和“历史记录”页面。当他登录时,他看到的后端界面如下:
安装
后端是一个可以托管在IIS,Apache,Nginx或任何其他Web服务器上的网站。后端也可以在本地运行。
要在Web服务器上安装后端,只需在Web服务器中复制文件夹“C:\Program Files\Wexflow\Backend”的内容即可。然后,如果要在另一台计算机上安装后端,请配置工作流服务器URI。只需编辑配置文件“js/settings.js”:
Settings = {
Uri: "http://localhost:8000/wexflow/"
};
而不是localhost,将机器的IP或DNS放在安装Wexflow服务器的位置。
Android Manager
Wexflow提供了一个用于管理工作流程的Android应用程序。
Wexflow Android Manager允许用户执行以下操作:
- 查看Wexflow Engine加载的所有工作流程。
- 查看所选工作流的状态(运行,暂停或禁用)。
- 启动工作流程。
- 停止工作流程。
- 暂停工作流程。
- 恢复工作流程。
- “刷新”按钮允许重新加载工作流列表。
工作流程示例
Wexflow旨在为工作流程和自动化领域的初学者提供简单易用的方法。
可以通过设计人员或通过编辑工作流程的配置文件进行XML编辑来设计工作流程。但是,强烈建议您了解Wexflow工作流语法,以熟悉此工作流引擎。
Wexflow中的每个工作流都有一个默认位于文件夹 C:\Wexflow\Workflows中的 配置文件。每个配置文件都包含一组要执行的设置和任务,具体取决于指定的计划和指定的配置。
在本节中,将介绍几个工作流程示例,以使最终用户熟悉Wexflow工作流程语法。
顺序工作流程
顺序工作流按顺序逐个执行一组任务。任务以顺序方式执行,直到最后一个任务完成。可以通过修改工作流的执行图来更改任务执行的顺序。
工作流程1
此工作流将发票上载到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
此工作流等待文件到达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
此工作流程通过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
此工作流等待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
此工作流程从FTP服务器下载特定文件。此工作流程首先列出位于服务器根文件夹中的所有文件,然后通过XSLT(LisFiles.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>要标记和/或重命名的文件列表。
要了解标记和重命名文件的工作方式,请参阅ListFiles和Xslt任务的文档。
以下是用于标记文件的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>
执行图
此工作流加载文件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。此工作流的执行图将按以下顺序执行任务:
但是,如果执行图修改如下:
<ExecutionGraph>
<Task id="1"><Parent id="-1" /></Task>
<Task id="3"><Parent id="1" /></Task>
<Task id="2"><Parent id="3" /></Task>
</ExecutionGraph>
任务将按如下方式执行:
如果执行图修改如下:
<ExecutionGraph>
<Task id="3"><Parent id="-1" /></Task>
<Task id="2"><Parent id="3" /></Task>
<Task id="1"><Parent id="2" /></Task>
</ExecutionGraph>
任务将按如下方式执行:
执行图中禁止两件事:
- 无限循环。
- 并行任务。
这是一个无限循环的例子:
<ExecutionGraph>
<Task id="1"><Parent id="-1" /></Task>
<Task id="2"><Parent id="1" /></Task>
<Task id="1"><Parent id="2" /></Task>
</ExecutionGraph>
以下是并行任务的示例:
<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
以下工作流是由文件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流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。
一个If可以在一个If,一个While和一个Switch里面(即嵌套使用)。
While
此工作流由文件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 流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。
一个 While可以在一个 While,一个If和一个Switch中。
Switch
此工作流程每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流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。
一个 Switch可以在一个 While,一个 If和一个Switch中。
工作流事件
在工作流完成其工作后,其最终结果是成功、或警告或错误。如果其最终结果成功,则触发OnSuccess事件。如果其最终结果是警告,则会触发OnWarning事件。如果其最终结果是错误,则触发OnError事件。事件包含要按顺序逐个执行的一组任务和/或流程图节点。可以通过修改事件的执行图来改变任务和/或流程图节点的执行顺序。
此工作流将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>可以以相同的方式使用。你可以把If,While和Switch流程图节点放在事件节点中。
这些是简单而基本的工作流程,可以让您了解如何制作自己的工作流程。但是,如果您在工作流程中涉及多个系统,应用程序和自动化,则工作流程可能会非常有趣。
如何创建自定义任务?
通常的做法
自定义任务是工作流引擎中必须的,允许系统和应用程序进行交互。
例如,要创建自定义任务MyTask,您需要按以下步骤操作:
- 在Visual Studio中创建一个类库项目并命名它为Wexflow.Tasks.MyTask。
- 通过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之外,流程图任务在执行其操作后返回true或false。
顺序任务的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)
文件可以通过调用方法Add或AddRange加载到任务中:
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或其他任何东西检索的对象。然后,这些对象可以通过调用方法Add或AddRange加载到任务中:
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.sln或Wexflow.vs2010.sln,并按照这些指南调试Wexflow服务器。然后,您可以在解决方案中创建自定义任务并进行调试。当然,要调试它,你必须按如下方式进行:
- 创建自定义任务。
- 在Wexflow.Server中引用您的自定义任务。
- 使用自定义任务创建工作流程(请参阅文档)。
- 将工作流程放在C:\Wexflow\Workflows中。
- 打开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.sln或Wexflow.vs2010.sln。
- 确保将Wexflow.Server设置为启动项目。
- 调试项目Wexflow.Server以调试模式启动Wexflow服务器。
- 调试项目Wexflow.Clients.Manager以调试模式启动Wexflow Manager,或者您可以打开后端并从那里触发工作流。
这就完成了。我希望你喜欢阅读这篇文章。如果您有任何改进Wexflow的想法,或者如果您遇到任何问题或想要为此项目做出贡献,请在评论或GitHub中告诉我。
Wexflow使用的库
以下是Wexflow使用的库列表:
- FluentFTP:支持用C#和MIT许可证编写的FTP和FTPS(exmplicit / implicit)的FTP客户端。
- SSH.NET:用C#编写并使用MIT许可证的.NET SSH库。
- SharpZipLib:用C#和MIT许可证编写的Zip,GZip,Tar和BZip2库。
- Saxon-HE:XSLT和XQuery处理器,提供WSLC定义的基本一致性级别的XSLT(2.0),XQuery(1.0,3.0和3.1)和XPath(2.0,3.0和3.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):用于.NET的Oracle数据库客户端。
- MySQL Connector / Net:用于MySQL的完全托管的ADO.NET驱动程序。
- System.Data.SQLite:SQLite的ADO.NET提供程序。
- Npgsql:一个用C#编写的PostgreSQL开源ADO.NET数据提供程序,以及PostgreSQL许可证,这是一个自由OSI认可的开源许可证。
- Teradata的.NET数据提供程序:Teradata的ADO.NET提供程序。
- Eto.Forms:用于.NET中桌面和移动应用程序的跨平台GUI框架。
- highlight.js:Javascript语法荧光笔。
- Cytoscape.js:用于分析和可视化的图论/网络库。
- OpenPop.NET:POP3客户端的开源实现和用C#编写的健壮的MIME解析器。它允许开发人员在几分钟内轻松访问POP3服务器上的电子邮件。
- iTextSharp:iText库的.NET端口。
- DiffPlex:一个Netstandard 1.0 C#库,用于生成文本差异。
- MonoTorrent:实现BitTorrent协议的跨平台库。它基于.NET Framework的Mono实现。
- Quartz.NET:Java Quartz的一个端口,它是一个企业级作业调度系统。
- SharpCompress:一个完全托管的C#库,用于处理许多压缩类型和格式。
- DiscUtils:与光盘,文件系统格式等交互的实用程序库。
- SevenZipSharp:用C#编写的托管7-zip库,提供数据(自我)提取和压缩(支持所有7-zip格式)。它包装7z.dll或任何兼容的,并使用LZMA SDK。
- 7-Zip:7-Zip是一个具有高压缩比的文件存档器。
- Selenium WebDriver:一组不同的软件工具,每种工具都有不同的方法来支持浏览器自动化。
- ChromeDriver:一种开源工具,用于跨多种浏览器自动测试Web应用程序。
- NUglify:用于.NET的HTML,JavaScript和CSS缩小库。
- SharpScss:一个可移植的跨平台pinvoke围绕libsass的.NET包装器,将SCSS转换为CSS。
- libsass:Sass编译器的AC / C ++实现。
- YamlDotNet:YAML的.NET库。
- LiteDB:一个.NET NoSQL文档存储在一个数据文件中。
- Nancy:用于在.Net和Mono上构建基于HTTP的服务的轻量级、低仪式的框架。
- Kestrel:ASP.NET Core的跨平台Web服务器。
历史
- 2017年1月5日:
- 2017年1月9日:
- 发布1.0.1版。
- 创建了Wexflow Windows服务。
- 创建Tar,Tgz和Sql任务。
- 更新了Wexflow Manager。
- 修正了一些错误。
- 2017年1月16日:
- 发布1.0.2版。
- 创建Wmi和 ImagesTransformer任务。
- 更新了Wexflow Manager。
- 2017年1月23日:
- 发布1.0.3版。
- 创建Http, Sync, FilesRenamer, FilesExist和 Wait 任务。
- 创建文件标签功能。
- 添加列表,下载和删除Ftp任务命令(FTP / FTPS(显式/隐式)/ SFTP)。
- 添加retryCount并retryTimeout设置Ftp任务选项。
- 更新了Wexflow管理器。
- 更新了Wexflow引擎。
- 修正了一些错误。
- 更新了安装文件。
- 更新了文章内容。
- 2017年1月26日:
- 发布1.0.4版。
- 在加载工作文件之前创建了对工作文件文件的XSD验证。
- 创建任务执行图。
- 创建流程图工作流程(DoIf和DoWhile)。
- 创建工作流事件(OnSuccess,OnWarning和OnError)。
- 创建FileExists流程图任务。
- 更新设置。
- 更新了文章内容。
- 2017年1月30日:
- 发布1.0.5版。
- 创建Wexflow Web Manager:用于管理工作流的轻量级JavaScript API(~6Kb)。
- 为Linux创建了Wexflow Manager GUI。
- 更新了适用于Windows的Wexflow Manager。
- 更新了Windows的设置。
- 为Linux创建了一个设置。
- 2017年2月6日:
- 发布1.0.6版。
- 创建了Wexflow Android Manager:用于管理工作流程的Android应用程序。
- 更新了Wexflow Web Manager。
- 更新了Wexflow Manager(Windows和Linux)。
- 更新了Wexflow引擎。
- 2017年2月17日:
- 发布1.0.7版。
- 创建了Movedir任务。
- 更新了Wexflow Web Manager。
- 更新了Wexflow Manager(Windows,Linux和Android)。
- 更新了Wexflow引擎。
- 修正了一些错误。
- 2017年3月6日:
- 发布1.0.8版。
- 创建Swictch / Case流程图节点。
- 立即创建任务。
- 为macOS创建了Wexflow Manager。
- 更新了If和While流程图节点语法。
- 更新了安装项目。
- 现在,If流程图节点可以位于If,a While和Switch流程图节点内。
- 现在,While流程图节点可以位于If,a While和Switch流程图节点内。
- 现在,Switch流程图节点可以位于If,a While和Switch流程图节点内。
- 代码重构。
- 修正了一些错误。
- 2017年4月7日:
- 发布1.0.9版。
- 固定Switch流程图节点子进程执行。
- 修复了WCF服务配置问题。
- 2017年5月22日:
- 发布1.1版。
- 创建Workflow任务。此任务允许启动,暂停,恢复或停止工作流列表。
- 性能优化。
- 代码重构。
- 2017年10月7日:
- 发布1.2版。
- 在MailsSender任务中实现邮件附件。
- 在日志记录 和 Wexflow Web服务客户端中将编码更改为UTF-8 。
- 热重载工作流程:
- 如果将工作流XML文件添加到Workflows文件夹,则会自动加载它而无需重新启动Wexflow Windows服务。
- 如果从Workflows文件夹中删除工作流XML文件,则会自动停止并删除它,而无需重新启动Wexflow Windows服务。
- 如果更改了工作流XML文件。无需重新启动Wexflow Windows服务即可自动重新加载。
- 修复了Switch流量图节点中的空缺省节点问题。
- 更新了Windows,macOS和Linux管理器应用程序。
- 2017年10月11日:
- 发布1.3版。
- 以只读模式实现 Wexflow Web Designer。编辑模式将在未来版本中实施。
- 修正了一些错误。
- 2017年10月13日:
- 发布1.4版。
- 实现Wexflow Designer编辑模式:
- 现在可以通过Wexflow Designer编辑工作流程配置。
- 现在可以通过Wexflow Designer编辑任务配置和设置。
- 2017年10月15日:
- 发布1.5版。
- 为Wexflow Designer添加了新功能:
- 添加任务设置。
- 删除任务设置。
- 将属性添加到selectFiles并选择“附件”任务设置。
- 从selectFiles中删除属性并选择“附件”任务设置。
- 将任务添加到线性工作流程。
- 从线性工作流中删除任务。
- 2017年10月16日:
- 发布1.6版。
- 现在我们可以在Wexflow Designer中创建线性工作流程。
- 2017年10月17日:
- 发布1.7版。
- 现在我们可以删除Wexflow Designer中的工作流程。
- 增强的任务设置版本。
- 更新了MailsSender 任务文档 。
- 修复了Wexflow Designer中的一些错误。
- 更新了Windows安装项目。
- 2017年10月18日:
- 发布1.8版。
- 在Wexflow Designer中实现了线性工作流的执行图的可视化。
- 更新了Windows安装项目。
- 2017年10月19日:
- 发布1.9版。
- 添加了新功能并修复了Wexflow Designer中的一些问题:
- 实现了非lienar工作流的执行图的可视化。
- 保存新工作流后显示xml按钮。
- 修复了保存后编辑新工作流ID的问题。
- 修复了保存新工作流并编辑其名称后有关工作流文件路径值的问题。
- 修复了更改所选工作流程ID的问题。
- 2017年10月20日:
- 发布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。
- 2017年10月27日:
- 发布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文件夹。
- 更新了任务FilesExist和Xslt的文档。
- 更新了Windows安装程序
- 2017年11月5日:
- 发布2.2版。
- 在Wexflow Manager中添加了Designer和Logs按钮。
- 在Wexflow Manager中添加了帮助和关于菜单。
- 在Wexflow Designer的执行图中添加了任务描述。
- 修复了Wexflow Designer中的一个问题:由于wexflow-designer.js中存在拼写错误,我们无法保存工作流程
- 创建了Wexflow.Core nuget包。
- 添加了新任务:
- 在任务Xslt中添加了扩展设置。
- 更新了任务FilesCopier。
- 修复了Task.GetSetting中的一个问题。
- 添加了新的单元测试。
- 更新ImagesTransformer和ProcessKiller单元测试。
- 更新了samples \ WexflowTesting文件夹。
- 更新了samples \ Workflows文件夹。
- 更新了Windows安装程序
- 代码重构。
- 2017年11月14日:
- 发布2.3版。
- Wexflow设计师:
- 将任务名称和任务设置移动到外部文件(C:\ Wexflow \ TasksNames.json和C:\ Wexflow \ TasksSettings.json)。
- 为任务添加了Xml和文档按钮。
- 添加Hashtable作为任务的共享内存。
- 将deleteMessages设置添加到任务MailsReceiver。
- 修复了Sql,SqlToCsv和SqlToXml任务中的一些问题。
- 记录Wexflow.Core。
- 更新了Wexflow.Core nuget包。
- 更新了我们调试Wexflow Windows服务和Wexflow Manager的方式。
- 修正了问题 #36。
- 修复了Wexflow引擎中的一个问题。
- 2018年10月12日:
- 发布2.4版。
- 通过FilesRenamer 任务重命名的文件不能通过后续任务访问。现在,FilesRenamer可以通过后续任务访问重命名的文件。
- SqlToCsv 任务现在更具可配置性:
- 添加了是否写入标题的设置,默认为true。
- 添加了引号字符的设置,例如“可以引用列,例如”column1“,”column2“,默认为空字符串。
- 添加了将多个结果表导出到单个文件的功能。
- 重构代码将每一行写入输出文件,因为将非常大的数据集写入单个StringBuilder将使用过多的内存并失败。也许最好的权衡是使用原始StringBuilder方法并写入每50,000或100,000条记录,但是对于所有用例的代码而言,优先于代码而不是代码。
- Ziptask:现在,如果zip文件名留空,RenameToOrName则集合中第一个文件的名称将被视为zip文件名。例如,如果RenameToOrName第一个文件的文件是file1.txt,则zip文件名将为file1.zip。
- 2018年10月18日:
- 发布2.5版。
- 创建了以下新任务:
- Torrent:此任务下载torrent文件。
- FilesDiff:此任务计算两个文件的差异。
- FilesEqual:此任务允许检查两个文件是否相同。
- 添加了刷新按钮并在Wexflow Manager中滚动。
- 更新的Android应用:
- 更新的应用程序
- 添加了刷新按钮。
- 修复了UI中的问题。
- XmlToCsv 任务现在更易于配置:
- 添加了写入分隔符的设置,默认为;
- 添加了引号字符的设置,例如“可以引用列,例如”column1“,”column2“,默认为空字符串。
- 重构代码将每一行写入输出文件,因为将非常大的数据集写入单个StringBuilder将使用过多的内存并失败。也许最好的权衡是使用原始的StringBuilder方法并写入每50,000或100,000条记录,但是对于所有用例的函数优先于代码而不是代码。
- MailsSender 任务现在更具可配置性:
- 抄送现在是可选的。
- 添加密送。它也是可选的。
- 修复了在Http 任务中通过HTTPS下载文件的问题 。
- 2018年10月20日:
- 发布2.6版。
- 创建了64位版本的Wexflow。
- 在Wexflow Manager中添加了“重新启动服务器”按钮:此按钮允许从Wexflow Manager重新启动Wexflow Windows服务。
- 创建了以下新任务:
- ImagesResizer:此任务调整图像集合的大小。
- ImagesCropper:此任务裁剪图像集合。
- 2018年10月23日:
- 发布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版 。
- 2018年10月29日:
- 发布2.8版。
- 现在使用Quartz.NET 调度程序启动定期工作流程 。
- 现在,Wexflow Server以异步方式从Wexflow Manager重新启动。
- 修复了Wexflow Manager中的拼写错误。
- 修复了MediaInfo任务中的问题。
- 修复了有关登录Workflow任务的问题。
- 修复了FilesMover单元测试中的问题。
- 更新了任务FileExists。
- 更新了nuget包到版本2.8.1。
- 创建了以下新任务:
- FilesEncryptor:此任务加密文件。
- FilesDecryptor:此任务通过任务FilesEncryptor解密加密文件。
- TextsEncryptor:此任务加密基于文本的文件。
- TextsDecryptor:此任务解密由任务TextsEncryptor加密的文件。
- Unrar:此任务提取RAR档案。
- UnSevenZip:此任务提取7Z档案。
- ImagesConcat:此任务连接图像。
- ImagesOverlay:此任务覆盖图像。
- CsvToSql:此任务将CSV文件转换为SQL脚本。
- DatabaseBackup:此任务备份数据库。
- DatabaseRestore:此任务恢复数据库。
- IsoCreator:此任务从源文件夹创建.iso。
- IsoExtractor:此任务提取.iso文件。
- SevenZip:此任务从文件集合中创建.7z。
- TextToSpeech:此任务将文本文件转换为语音文件。
- SpeechToText:此任务将音频文件转换为文本文件。
- FileMatch:这是一个流程图任务,使用正则表达式模式检查目录中是否存在文件。
- 2018年11月4日:
- 发布2.9版。
- 在RESTful API中添加了搜索功能。
- 在Wexflow Manager,Wexflow Web Manager和Wexflow 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脚本。
- 2018年11月7日:
- 发布3.0版。
- 创建了 Wexflow的后台办公室 ,它允许:
- 获得有关工作流程的实时统计信息。
- 轻松管理工作流程。
- 轻松设计工作流程。
- 轻松跟踪工作流程。
- 2018年11月9日:
- 发布3.1版。
- 创建用户配置文件。
- 在后台创建“ 用户 ”页面。
- 添加了对Wexflow Manager的身份验证 。
- 为工作流创建 全局变量。
- 2018年11月12日:
- 发布3.2版。
- 为Android应用程序添加了身份验证 。
- 在后台添加了“forgot-password.html”页面 。
- 添加了“忘记密码?” Wexflow Manager中的链接 。
- 修复了Wexflow Manager中有关身份验证的问题。
- 修复了Wexflow Manager中有关安全性的问题(仅限管理员使用Wexflow Manager)。
- 修复了SpeechToText和TextToSpeech任务中的问题。
- 修复了DatabaseBackup和DatabaseRestore任务中的问题。
- 2018年11月16日:
- 2018年11月19日:
- 2018年11月23日:
- 发布3.5版。
- 在设计器中添加了局部变量。
- 创建任务 EnvironmentVariable (.NET和.NET Core):这是一个检索环境变量值的流程图任务。
- 更新了Wexflow Manager。
- 更新了Workflow.xsd和Workflow.xml。
- 将nuget包更新到3.5.0版。
- 2018年11月28日:
- 发布3.6版。
- 在设计器中添加了局部变量版本。
- 在设计器中添加了全局变量。
- 修复了更改设计器中现有任务时出现的问题。
- 修复了设计器中有关selectAttachments设置的问题。
- 修复了Wexflow Manager中的问题。
- 修复了Workflow.xsd中的一个问题。
- 修复了日志记录中的拼写错误。
- 代码重构。
- 将nuget包更新到版本3.6.0。
- 2018年12月3日:
- 2018年12月10日:
- 发布3.8版。
- 增强数据库性能。
- 修复了macOS问题。
- 将nuget包更新到版本3.8.0
原文地址:https://www.codeproject.com/Articles/1164009/Wexflow-Open-source-workflow-engine-in-Csharp