目录

特征

例子

好处

如何安装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使用的库

历史


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

  • WexflowGitHub

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

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

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

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

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

特征

Wexflow提供以下功能:

  • 免费和开源
  • 易于安装和轻松配置
  • 简单易用
  • 模块化
  • 记录完整
  • 用户驱动
  • 跨平台工作流服务器
  • 跨平台后端
  • 用于管理工作流的跨平台应用程序
  • 用于设计工作流的跨平台应用程序
  • 用于管理工作流程的Android应用程序
  • 用户管理
  • 顺序工作流程
  • 流程图工作流程
  • 工作流程事件
  • Cron调度
  • 广泛的日志记录和事件报告
  • 有关工作流程的实时统计信息
  • 92个内置任务
  • RESTful API
  • 热重装
  • 自动化
  • 监控
  • 可扩展的

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 period00.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 bythe 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 herereturn 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日:
    • 发布1.0
  • 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日:
    • 发布1.3
    •  以只读模式实现  Wexflow Web Designer。编辑模式将在未来版本中实施。
    • 修正了一些错误。
  • 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服务。
    • 创建了以下新任务:
      • ImagesResizer:此任务调整图像集合的大小。
      • ImagesCropper:此任务裁剪图像集合。
  • 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
    • 创建了以下新任务:
      • 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:这是一个流程图任务,使用正则表达式模式检查目录中是否存在文件。
  • 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日:
    • 发布3.1
    • 创建用户配置文件。
    • 在后台创建“ 用户 ”页面。
    • 添加了对Wexflow Manager身份验证  
    •  为工作流创建  全局变量
  • 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

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. C++线程同步

    引用自http://js2854.tk/tb.php?sc=46723c&id=82 作者:中国电波传播研究所 郎锐■来自:yesky 摘要: 多线程同步技术是计算机软件开发的重要技术,本文对多线程的各种同步技术的原理和实现进行了初步探讨。关键词: VC++6.0; 线程同步;临界区;事件;互斥;信号量; 正…...

    2024/5/7 1:48:04
  2. CPLEX-求解TSP模型

    问题定义: TSP(Travelling Salesman Problem ) 是最基本的路线问题。它寻求的是旅行者由起点出发,通过所有给定的需求点后,再次返回起点所花费的最小路径成本(每个点只能访问一次),也叫旅行商问题、旅行推销员问题、货郎担问题…… 数学模型:其中,V为集合中所含图的顶点…...

    2024/4/21 8:02:08
  3. 使用Python完成公司名称和地址的模糊匹配

    正如题目中说的一样,这个程序的目的是实现公司名及公司地址的模糊匹配,也可以迁移到房产信息、电话号码之类的字段上。本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户,以及造假的房产信息和电…...

    2024/5/7 1:26:55
  4. 堆排序算法及C语言实现

    堆排序算法的时间复杂度是O(nlgn),比插入排序要好,跟归并排序相同,但是与归并排序不一样的地方在于,堆排序不需要额外的存储空间,或者说,只需要常数个额外的存储空间,属于内排序算法。 有关插入排序和归并排序,请参照: 插入排序及C语言实现,归并排序及C语言实现。 原…...

    2024/4/27 0:57:43
  5. 10.HCNA-HNTD——命令行基础

    熟悉VRP命令行并且熟练掌握VRP配置是高效管理华为网络设备的必备基础。学习目标: 1. 掌握VRP命令行的基础知识 2. 理由VRP命令行进行基本的配置 管理员和工程师如果要访问在通用路由平台VRP上运行的华为产品,首先要进入启动程序。开机界面信息提供了系统启动的运行程序和正在…...

    2024/4/26 14:12:44
  6. 算法-详解堆排序算法

    堆排序是利用堆的性质进行的一种选择排序。时间复杂度:时间复杂度:O(nlogn) 空间复杂度:O(1)(就地排序,用于堆化(又称筛选)的辅助空间)性能:由于建初始堆所需的比较次数较多,所以堆排序不适宜于记录数较少的。 堆排序的时间,主要由建立初始堆和反复重建堆这两部分…...

    2024/4/21 8:02:04
  7. 基于MVVM架构的开源项目,还在维护中

    传送门:https://gitee.com/xu_master/Book...

    2024/4/21 8:02:02
  8. 学习多线程的生产者和消费者系列的相关实践

    昨天很幸运的找到了这个系列的博客 http://blog.csdn.net/morewindows/article/details/7421759,点击打开链接 学习了一下关于多线程的知识,前面的系列讲解的非常详细,并且对生产消费这一篇(csdn博客无法打开,在其他网址浏览的)做了相关的代码实践记录如下备忘: ///////…...

    2024/5/6 21:08:25
  9. OptaPlanner –通过附近选择扩展车辆路线

    OptaPlanner 6.2在车辆路径问题(VRP),旅行商问题(TSP)和类似用例方面取得了重大进步。 邻近选择的新功能使它可以更有效地扩展到更大的问题,而不会牺牲潜在的最佳解决方案(这是劣等技术所常见的)。 让我们仔细看一下“车辆路径问题”附近的选择。 在这种用例中,我们必…...

    2024/5/7 7:35:57
  10. Java 开源企业信息化办公平台 O2OA

    O2OA是基于J2EE架构,集成移动办公、智能办公,支持私有化部署,自适应负载能力的,能够很大程度上节约企业软件开发成本的基于AGPL协议开放源代码的企业信息化系统需求定制开发解决方案,对外提供专业的开发运维等技术服务。其主要能力如下:流程管理:全功能流程引擎。基于任…...

    2024/4/21 8:02:00
  11. 程序员,对自己好点吧!

    昨天在Google图片中输入“程序员”,搜索到的第一张图片是这样的 一位平头兄桌上两台笔记本一台台式机。其中的一台中显示是某个论坛的页面【估计正在回答某个问题】、中间那台正在启动Eclipse【要开始写Java程序了】、平头兄的目光此时盯在台式机的显示器上【应该是正在远程…...

    2024/4/21 8:01:58
  12. 内核对象(VC_Win32)

    目录内核对象概述互斥对象事件对象可等待的计时器内核对象信号量内核对象内核对象状态速查表保证实例的唯一性(本章节中例子都是用 VS2010 编译调试的) 内核对象概述 何为内核对象 内核对象为一个数据结构且只能被内核访问,因此应用程序无法在内存中找到这些数据结构并直接改变…...

    2024/4/21 8:01:57
  13. 【优化算法】变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)

    【优化算法】变邻域搜索算法(VNS)求解TSP(附C++详细代码及注释)00 前言 上次变邻域搜索的推文发出来以后,看过的小伙伴纷纷叫好。小编大受鼓舞,连夜赶工,总算是完成了手头上的一份关于变邻域搜索算法解TSP问题的代码。今天,就在此给大家双手奉上啦,希望大家能ENJOY哦! …...

    2024/4/21 8:01:57
  14. 数据结构之堆排序算法详解+C语言实现

    堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均…...

    2024/4/21 8:01:56
  15. 学习Lemon OA系统:一、流程定义

    记录学习Lemon OA 开源项目的过程: 下载最新的1.7.0版本的开源项目,地址是http://www.mossle.com/lemon.do,解压后运行startup.bat,启动服务,然后输入http://localhost:8080登录到页面上,登录帐号为:lingo密码为:1,登录平台。 然后直…...

    2024/4/21 8:01:55
  16. (转载)程序员,对自己好一点

    昨天在Google图片中输入“程序员”,搜索到的第一张图片是这样的一位平头兄桌上两台笔记本一台台式机。其中的一台中显示是某个论坛的页面【估计正在回答某个问题】、中间那台正在启动Eclipse【要开始写Java程序了】、平头兄的目光此时盯在台式机的显示器上【应该是正在远程或者…...

    2024/5/7 5:35:57
  17. OptaPlanner –具有真实道路距离的车辆路线

    在现实世界中,车辆路径问题(VRP)中的车辆必须走这条路:它们不能在客户之间直线行驶。 大多数VRP研究论文和演示都乐于忽略此实现细节。 和我一样,过去。 尽管使用道路距离(而不是空中距离)不会对VRP的NP硬性产生很大影响,但确实会带来一些额外的挑战。 让我们来看看这些…...

    2024/4/27 22:13:15
  18. Visual C++线程同步技术

    线程同步的方式有:  临界区  管理事件内核对象  信号量内核对象  互斥内核对象分别介绍如下:使线程同步  在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作。更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了…...

    2024/5/7 3:46:02
  19. java OA ERP CMS 项目源码 网站源码

    获取【下载地址】 QQ: 313596790 【免费支持更新】支持三大数据库 mysql oracle sqlsever 更专业、更强悍、适合不同用户群体【新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统】A 代码生成器(开发利器); 增删改查的处理类,service层,mybatis的x…...

    2024/4/20 18:38:47
  20. Marco's Java【SpringBoot入门(一) 之 神奇的SpringBoot】

    前言 前面的阶段我们学习了Spring全家桶中的Spring和SpringMVC,其实早在Spring的系列篇中,我有稍微提到过SpringBoot,在讲SSM三兄弟篇的时候,也有讲到现如今的开发中SpringBoot逐渐 “取代” 了SSM,有木有一种吕布战三英的赶脚? 其实我个人觉得把SpringBoot当作Spring工会…...

    2024/5/6 20:00:02

最新文章

  1. 【栈】Leetcode 1047. 删除字符串中的所有相邻重复项

    题目讲解 1047. 删除字符串中的所有相邻重复项 算法讲解 使用栈这个数据结构&#xff0c;每一次入栈的时候观察此时的字符和当前栈顶字符是否相等&#xff0c;如相等&#xff1a;栈顶出栈&#xff1b;不相等&#xff1a;入栈 class Solution { public:string removeDuplica…...

    2024/5/7 10:40:37
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/7 10:36:02
  3. Topaz Video AI for Mac v5.0.0激活版 视频画质增强软件

    Topaz Video AI for Mac是一款功能强大的视频处理软件&#xff0c;专为Mac用户设计&#xff0c;旨在通过人工智能技术为视频编辑和增强提供卓越的功能。这款软件利用先进的算法和深度学习技术&#xff0c;能够自动识别和分析视频中的各个元素&#xff0c;并进行智能修复和增强&…...

    2024/5/5 8:52:36
  4. ArcGIS10.8保姆式安装教程

    ArcGIS 10.8是一款非常强大的地理信息系统软件&#xff0c;用于创建、管理、分析和可视化地理数据。以下是ArcGIS 10.8的详细安装教程&#xff1a; 确保系统满足安装要求 在开始安装之前&#xff0c;请确保您的计算机满足以下系统要求&#xff1a; 操作系统&#xff1a;Windo…...

    2024/5/5 8:36:10
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/7 5:50:09
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/7 9:45:25
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/6 9:21:00
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/4 23:55:16
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/4 23:55:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/4 23:55:06
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/4 23:55:16
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/6 21:42:42
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/4 23:54:56
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57