.Net工作流elsa-workflows官方文檔學習:建立儀表盤和工作流主機


網頁:https://elsa-workflows.github.io/elsa-core/docs/guides-dashboard

本節包括以下內容:

  • 創建一個新的ASP.NET Core Web應用程序,該應用程序承載Elsa儀表盤和各種Elsa服務。
  • 配置實體框架提供程序。
  • 創建一些工作流。

創建ASP.NET Core項目

創建一個名為Elsa.Guides.Dashboard.WebApp的新的空ASP.NET Core 3.0項目,並添加以下程序包:

  • Elsa
  • Elsa.Dashboard
  • Elsa.Persistence.EntityFrameworkCore

更新Startup文件

用一下代碼來替換Startup.cs文件:

using Elsa.Activities.Email.Extensions;
using Elsa.Activities.Http.Extensions;
using Elsa.Activities.Timers.Extensions;
using Elsa.Dashboard.Extensions;
using Elsa.Persistence.EntityFrameworkCore.DbContexts;
using Elsa.Persistence.EntityFrameworkCore.Extensions;
using Microsoft.AspNetCore.Builder;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace Elsa.Guides.Dashboard.WebApp
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        
        private IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services
                // Add services used for the workflows runtime.
                .AddElsa(elsa => elsa.AddEntityFrameworkStores<SqliteContext>(options => options.UseSqlite(Configuration.GetConnectionString("Sqlite"))))
                .AddHttpActivities(options => options.Bind(Configuration.GetSection("Elsa:Http")))
                .AddEmailActivities(options => options.Bind(Configuration.GetSection("Elsa:Smtp")))
                .AddTimerActivities(options => options.Bind(Configuration.GetSection("Elsa:Timers")))
                
                // Add services used for the workflows dashboard.
                .AddElsaDashboard();
        }

        public void Configure(IApplicationBuilder app)
        {
            app
                .UseStaticFiles()
                .UseHttpActivities()
                .UseRouting()
                .UseEndpoints(endpoints => endpoints.MapControllers())
                .UseWelcomePage();
        }
    }
}
View Code

更新appsettings.json文件

配置HTTP,Email和Timer活動,您也可以手動配置:

{
  "ConnectionStrings": {
    "Sqlite": "Data Source=c:\\data\\elsa-dashboard.db;Cache=Shared"
  },
  "Elsa": {
    "Http": {
      "BaseUrl": "http://localhost:59862"
    },
    "Smtp": {
      "Host": "localhost",
      "Port": "2525"
    },
    "Timers": {
      "SweepInterval": "0:00:00:10"
    }
  }
}
View Code

運行EF遷移

在應用程序開始運行之前,我們需要創建Sqlite數據庫。 Elsa.Persistence.EntityFrameworkCore軟件包附帶了我們可以運行的必要遷移,實現了IDesignTimeDbContextFactory接口。

需要先安裝EF工具,dotnet tool install --global dotnet-ef --version 3.1.0(注:當前最新版本號已經更新到5.0.3)

打開一個終端窗口,然后導航到Elsa.Guides.Dashboard.WebApp項目文件夾。IDesignTimeDbContextFactory實現期望存在環境變量:EF_CONNECTIONSTRING。

 

我們將從終端窗口設置此變量,然后執行EF Core命令。 輸入以下命令:

SET EF_CONNECTIONSTRING=Data Source=c:\data\elsa-dashboard.db;Cache=Shared
dotnet ef database update --context SqliteContext

如果一切順利,現在應該在c:\ data中存在一個elsa-dashboard.db文件。

(注:我踩了一個坑,提示SQLite Error 14: 'unable to open database file'。折騰了許久,最后手工創建了c:\data目錄,才OK

運行儀表盤

運行應用程序,您將看到ASP.NET Core歡迎頁面。導航到/ elsa/home可以顯示儀表板:

 

 

 

創建工作流

從左側菜單中,選擇“Workflows”菜單項,此時workflow definitions列表是空的,點擊Create Workflow按鈕。

右鍵單擊畫布上的任意位置,然后單擊Add Activity以添加第一個活動。 選擇Receive HTTP Request活動,添加后,雙擊該活動以配置其屬性,如下所示:

  • Path: /hello-world
  • Method: GET
  • Read Content: unchecked

然后增加另外一個工作流Send HTTP Response(注:最新版本是Send HTTP Response),配置如下:

  • Status Code: 200
  • Content: Hello World!
  • Content Type; text/plain
  • Response Headers: x-powered-by:Elsa Workflows

然后連接這兩個工作流。

在單擊“Publish”之前,單擊設計器右上方的齒輪,補充工作流的名稱和說明。 例如:

  • Name: Hello World
  • Description: A simple Hello World workflow

如下圖所示:

 

 

 執行工作流

要使用剛才建立的工作流(注:剛才的工作流需要先Publish),請打開瀏覽器並導航到http://localhost:59862/hello-world(注:依賴於你自己的應用程序地址,我的是http://localhost:5001/hello-world)。

如下所示:

 

 

 查看工作流的執行情況

返回儀表盤,然后從左側菜單中選擇“工作流”。 您應該看到一個工作流列表,其中只有一個工作流名為Hello World和一個完成的實例。

 

 

 單擊“已完成”以查看已完成的工作流實例的列表:

 

 

 單擊超鏈接的工作流實例ID,以獲取其詳細信息:

 

 

 請注意,當您將鼠標懸停在每個活動上時,相應的活動執行日志條目也會突出顯示,從而可以輕松檢查哪些活動以什么順序運行。

總結

你也可以導入工作流,比如你可以導入this workflow definition workflow ,它描述的是A Simple Document Approval Workflow

盡管我們在同一ASP.NET Core應用程序中托管了Dashboard和Workflow Host,但這不是強制性的。 將儀表板與工作流運行時分開是很常見的。 只需確保兩個應用程序連接到相同的數據庫,除非您采用不同的策略將工作流定義發布到運行時。

源碼

https://github.com/elsa-workflows/elsa-guides/tree/master/src/Elsa.Guides.Dashboard.WebApp

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM