# wexflow2.0 **Repository Path**: DuHongfeng/wexflow ## Basic Information - **Project Name**: wexflow2.0 - **Description**: Wexflow 2.0的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2023-03-05 - **Last Updated**: 2023-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 介绍 Wexflow是一个开源的可扩展工作流引擎,具有跨平台管理器和设计器。Wexflow的目标是在没有用户干预的情况下自动执行重复任务。在Wexflow的帮助下,构建自动化和工作流过程变得简单。Wexflow还有助于使长期运行的流程变得简单。Wexflow还利用了大规模企业系统中使用的 Quartz.NET开源作业调度系统。因此,Wexflow在计划工作流作业(如cron工作流)时提供了可靠性 。 Wexflow提供以下功能: - [x] 顺序工作流。 - [x] 流程图工作流。 - [x] 工作流事件。 - [x] 用于管理工作流的跨平台应用程序。 - [x] 用于设计工作流的跨平台应用程序。 - [x] 一个用于管理工作流的安卓应用程序。 - [x] 自动化。 - [x] 工作流的热重载。 - [x] 监视。 - [x] 32 个内置任务。 - [x] 可扩展。 - [x] 简单易用。 以下是使用Wexflow的好处: - [x] 通过自动执行重复性任务来节省时间。 - [x] 通过避免返工和更正来节省资金。 - [x] 减少人为错误。 - [x] 在完成任务时变得更加高效和有效。 - [x] 在你所做的事情上变得更有效率。 - [x] 在你所做的事情上保持一致。 # Wexflow的体系结构 ![输入图片说明](img/image1.png) Wexflow由三个主要组件组成。分别是WindowsService、Manager和WebDesigner。WindowsService是创建的windows服务项目,内部引用了web api,主要是初始化相关配置及引用对应的核心Task。Manager是创建的winforms窗体项目,主要负责管理工作流程,如启动、暂停等。WebDesigner是创建的ASP.NET Web应用程序项目,主要是创建work flow及配置Task。 ![输入图片说明](wexflow-Page-1.drawio.png) # 如何运行 Wexflow? Wexflow用到的.NET框架是 .NET Framework 4.0。所有xml配置文件均在路径 "Wexflow-master\setup\wexflow"下。这里主要讲一下在 windows系统的安装过程: 1. 开启wexflow service服务,后面两个组件必须依托于它。 通过cmd命令安装服务(后面的路径自行修改) ``` C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe /i "F:\Wexflow.Clients.WindowsService.exe" ``` 通过cmd命令卸载服务(后面的路径自行修改) ``` C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u "F:\Wexflow.Clients.WindowsService.exe" ``` 在cmd中输入services.msc,找到 WexflowService 启动服务就行。 2. 开启 Wexflow.Clients.Manager。找到项目文件右键生成,到bin目录下的 启动Wexflow.Clients.Manager.exe。也可以通过打包好的程序进行安装(打包工具inno setup,文件在setup/WexflowSetup.exe) ![输入图片说明](img/image3.png) 将文件中的samples文件下的内容复制到c盘下,如下图所示 ![输入图片说明](5.png) 选中序号 5 Workflow_FileRemover,点击start,可以发现file10.txt、file11.txt两个文件被移除了。 3. 开启 Wexflow.Clients.WebDesigner。设为启动项,点击启动,可以看到如下画面 ![输入图片说明](img/7.png) 可以通过new workflow添加工作流程,new task添加任务,新的工作流保存在"\Wexflow-master\setup\wexflow\Workflows"路径下。您不必重新启动Wexflow Windows服务,以使这些修改生效。Wexflow引擎将自动检测更改并重新加载,添加或删除工作流。 要禁用工作流,您可以将工作流的enabled设置选项设置为false。如果要使工作流从Wexflow引擎加载的工作流列表中消失,则可以在"\Wexflow-master\setup\wexflow\Workflows"中创建一个名为disabled的目录,并将该工作流移动到该目录。 # 任务间如何进行通信 状态通过selectFiles设置在任务之间传输。 按以下方式工作: 1.工作流中的任务完成其工作并生成存储在集合中的文件。 2.另一项任务(必须在同一工作流程中)之后可以使用selectFiles XML属性引用这些文件,指定生成所需文件的任务的ID。然后它可以使用这些文件来完成自己的工作。 更直观(来自示例): ``` ``` # 工作流程运行方式 wexflow 运行tasks的方式分两种,顺序工作流和流程图工作流(包含If,While,Switch)。 ## 顺序工作流 顺序工作流按顺序逐个执行一组任务。任务以顺序方式执行,直到最后一个任务完成。可以通过修改工作流的执行图来更改任务执行的顺序。 ![输入图片说明](img/12.png) 此工作流加载文件C:\WexflowTesting\file1.txt ,然后将其上载到FTP服务器,然后将其移动到C:\WexflowTesting\Sent\文件夹。 ``` ``` 首先,FilesLoader任务加载文件C:\WexflowTesting\file1.txt,然后Ftp任务加载该文件并将其上传到FTP服务器。最后,FilesMover任务将该文件移动到C:\WexflowTesting\Sent\文件夹。 然后介绍一下ExecutionGraph部分: 按照惯例,要执行的第一个任务的父任务ID必须始终为-1。此工作流的执行图将按以下顺序执行任务: ![输入图片说明](img/14.png) 但是,如果执行图修改如下: ``` ``` 任务将按如下方式执行: ![输入图片说明](img/15.png) 如果执行图修改如下: ``` ``` 任务将按如下方式执行: ![输入图片说明](img/16.png) 执行图中禁止两件事: 无限循环。 并行任务。 这是一个无限循环的例子: ![输入图片说明](img/22.png) ``` ``` 以下是并行任务的示例: ![输入图片说明](img/23.png) ``` ``` ## 流程图工作流 流程图工作流是在其执行图中包含至少一个流程图节点(If / While / Switch)的工作流。流程图节点将流程图任务和一组任务按顺序逐个执行作为输入。可以通过修改流程图节点的执行图来改变任务执行的顺序。 ### if ![输入图片说明](img/30.png) 以下工作流是由文件file.trigger触发的流程图工作流。如果在文件系统上找到文件file.trigger,则此工作流程将文件file1.txt上载到FTP服务器,然后它将通知客户上载成功。否则,如果在文件系统上找不到触发器file.trigger,则工作流将通知客户上载失败。 ``` ``` 按照惯例,在节点中执行的第一个任务的父任务ID 必须始终为-1。 您可以在执行图中的任何位置添加If流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。 一个If可以在一个If,一个While和一个Switch里面(即嵌套使用)。 ### While ![输入图片说明](img/31.png) 此工作流由文件file.trigger触发。当文件file.trigger存在时,此工作流将文件file1.txt上传到FTP服务器然后它将通知客户然后它将等待2天然后它将再次启动。 ``` ``` 按照惯例,要在节点中执行的第一个任务的父任务标识必须始终为-1。 您可以在执行图中的任何位置添加While 流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。 一个 While可以在一个 While,一个If和一个Switch中。 ### Switch ![输入图片说明](img/32.png) 此工作流程每24小时启动一次。周一,它将文件上传到FTP服务器,并在周三通知客户。 ``` ``` 按照惯例,要在Case/Default节点中执行的第一个任务的父任务标识必须始终为-1。 您可以在执行图中的任何位置添加Switch流程图节点。此外,您可以根据需要添加。您也可以在事件节点OnSuccess,OnWarning和OnError中添加它们。 一个 Switch可以在一个 While,一个 If和一个Switch中。 ## 工作流事件 在工作流完成其工作后,其最终结果是成功、或警告或错误。如果其最终结果成功,则触发OnSuccess事件。如果其最终结果是警告,则会触发OnWarning事件。如果其最终结果是错误,则触发OnError事件。事件包含要按顺序逐个执行的一组任务和/或流程图节点。可以通过修改事件的执行图来改变任务和/或流程图节点的执行顺序。 ![输入图片说明](img/33.png) ``` ``` 流程图事件节点 OnWarning 和 OnError 可以以相同的方式使用。你可以把If,While和Switch流程图节点放在事件节点中。 这些是简单而基本的工作流程,可以让您了解如何制作自己的工作流程。但是,如果您在工作流程中涉及多个系统,应用程序和自动化,则工作流程可能会非常有趣。 # 定时任务 任务触发方式有三种,分别是Startup(启动service立即执行)、trigger(在manager触发执行)、period(通过quartz.net设置指定日期执行)。 定时触发器采用的是Quartz.net,内设几种触发设置方式,也可自定义cron表达式。 # 例子 以下工作流是由文件file.trigger触发的流程图工作流。如果在文件系统上找到文件file.trigger,则此工作流程将获取文件file10.txt中的脚本,然后执行数据库操作。否则,如果在文件系统上找不到触发器file.trigger,则工作流将通过邮箱的方式通知客户执行失败。 ``` ``` 1. 配置基础信息。设置id(不可重复),name,启动方式为startup等信息。path是保存后带出来的。 ![输入图片说明](img/8.png) 2. 新增两个task,这是if中do流程。第一个task模式选为FilesLoader,加载文件内脚本“delete from [netcoretest].[dbo].[Movie] where ID=4”。第二个task模式选为sql,配置好SelectFiles为第一个任务的内容,配置好数据库及连接字符串,工作流引擎创建完毕。 ![输入图片说明](img/9.png) 3. 新增两个task,这是if中else流程。第一个task模式选为FilesLoader,加载文件内邮箱发送方、接收方、抄送方及内容。第二个task模式选为MailsSender,配置邮箱的stmp设置,通过此配置发送此邮箱。 ![输入图片说明](img/40.png) 4. 配置if条件,task模式选为FileExists,判断是否存在此文件。 ![输入图片说明](img/35.png) 5. 打开配置文件 Workflow_Sql1.xml,配置 ExcetionGraph 。 ``` ``` 6. 打开Wexflow.Clients.Manager.exe,在最后可以找到 workflow_sql1,点击启动即可。效果展示如下 ![输入图片说明](img/37.png) ![输入图片说明](img/36.png)