سبد (0)

ذخیره Workflow در پایگاه داده

استفاده ازاکتیویتی Foreach در Workflow

در اینجا قصد داریم، نحوه ی ذخیره ی Workflow در پایگاه داده را آموزش دهیم. این کار تنها با چند کلیک انجام خواهد شد و به این ترتیب ماندگاری یا Persistence سیستم گردش فرم، تضمین خواهد شد.

مراحل انجام کار

 پروژه گردش کار UsingForeachActivity شامل شش مرحله زیر است:

  1. ایجاد یک پروژه از نوع Workflow Console Application
  2. تنظیمات پایگاه داده
  3. طراحی Workflow
  4. کدهای لازم برای Host کردن Workflow
  5. اجرای Workflow
  6. سیستم گردش کار ConfiguringSqlPersistenceStore چگونه کار می کند؟

ایجاد یک پروژه از نوع Workflow Console Application

بعد از اینکه Visual Studio 2013 را اجرا نمودید منوی File -> New -> Project را انتخاب نمایید:

در پنجره باز شده یعنی New Project از سمت چپ، از شاخه ی #Visual C گزینه ی Workflow را انتخاب نمایید. حالا از سمت راست Workflow Console Application را انتخاب نمایید. قسمت Name و Solution name را بترتیب با ConfiguringSqlPersistenceStore و Chapter06 تنظیم نمایید. نهایتاً بعد از اینکه از محل ذخیره شدن پروژه مطمئن شدید (Location)، روی دکمه OK کلیک نمایید.


تنظیمات پایگاه داده

در این مرحله قصد داریم پایگاه داده لازم برای ذخیره Workflow را ایجاد کنیم.

ابتدا SQL Server را اجرا کرده و دو فایل زیر را در آن باز نمایید:

  1. SqlWorkflowInstanceStoreSchema.sql

  2. SqlWorkflowInstanceStoreLogic.sql

برای دسترسی به فایل های بالا، به آدرس زیر بروید:

 در تصویر زیر، نمایی از دو فایل باز شده در محیط SQL Server را مشاهده می کنید:

 حالا باید یک پایگاه داده جدید با نام دلخواه "PersistenceWorkflow" ایجاد نماییم:

 حالا نوبت به اجرای فایل های مذکور رسیده است، اما قبل از هر چیز باید پایگاه داده "PersistenceWorkflow" را Use کنیم، بنابراین مطابق تصویر زیر، از بالای پنجره، پایگاه داده "PersistenceWorkflow" را انتخاب نمایید:

توجه: ابتدا باید فایل SqlWorkflowInstanceStoreSchema.sql  و سپس SqlWorkflowInstanceStoreLogic.sql اجرا شود.

همان طور که در شکل زیر مشاهده می کنید، بعد از اجرای کوئری ها، جداول و Viewها و Roleهای مورد نیاز برای ذخیره Workflow در پایگاه داده ایجاد شده است:


طراحی Workflow

حالا به محیط Visual Studio 2013 باز گردید و از پنل Solution Explorerr فایل Workflow1.xaml را باز کنید و Workflow را مطابق زیر طراحی نمایید:

  1. از پنل ToolBox، اکتیویتی Sequence را انتخاب کرده و به داخل صفحه طراحی گردش کار بکشید.
  2. از پنل Toolbox اکتیویتی WriteLine را به داخل Sequence بکشید و آنرا مطابق زیر تنظیم نمایید.
  3. حالا یک اکتیویتی Delay زیر WriteLine قرار دهید و خصوصیت Duration آنرا با "00:00:01" تنظیم نمایید.
  4. مجدداً از پنل Toolbox یک اکتیویتی WriteLine دیگر به داخل Sequence بکشید و آنرا مطابق زیر تنظیم نمایید.

در اکتیویتی Delay، خصوصیت Duration را با 1 ثانیه تنظیم کردیم، بنابراین زمانی که Workflow به اکتیویتی Delay می رسد، گردش کار متوقف یا Idle شده و Workflow در پایگاه داده ذخیره می شود.


کدهای لازم برای Host کردن Workflow

 ابتدا فضانام های زیر را به پروژه Add Reference کنید:

  1. System.Activities.DurableInstancing
  2. System.Runtime.DurableInstancing

حالا فایل Program.cs را باز کنید و کدهای زیر را در آن جایگزین نمایید:

Program.cs

using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Activities.DurableInstancing;
using System.Threading;

namespace ConfiguringSqlPersistenceStore
{

    class Program
    {
        static void Main(string[] args)
        {
            //setup sql persistence store
            string sqlPersistenceDBConnectionString = @"Data Source=192.16.33.12; Initial Catalog=PersistenceWorkflow; User ID=sa; Password=!@#123";
            SqlWorkflowInstanceStore sqlWFInstanceStore = new SqlWorkflowInstanceStore(sqlPersistenceDBConnectionString);
            
            //create and run workflow application
            AutoResetEvent waitHandler = new AutoResetEvent(false);
            WorkflowApplication wfApp = new WorkflowApplication(new Workflow1());
            wfApp.InstanceStore = sqlWFInstanceStore;
            wfApp.Unloaded = (arg) =>
            {
                waitHandler.Set();
            };
            wfApp.PersistableIdle = (arg) =>
            {
                return PersistableIdleAction.Unload;
            };
            wfApp.Run();
            waitHandler.WaitOne();
        }

    }
}

اجرای Workflow

 برای اجرای Workflow دکمه های میانبر Ctrl+F5 را فشار دهید. همان طور که در شکل زیر مشاهده می کنید زمانی که Workflow به اکتیویتی Delay می رسد، متوقف شده و اطلاعات آن در پایگاه داده ذخیره می شود:

برای مشاهده داده های ذخیره شده در پایگاه داده، می توانید روی جدول InstancesTable در پایگاه داده PersistenceWorkflow یک Select بزنید:


سیستم گردش کار ConfiguringSqlPersistenceStore چگونه کار می کند؟

همان طور که گفته شد، در سیستم گردش کار بالا، زمانی که Workflow به اکتیویتی Delay می رسد، متوقف شده و همین امر باعث می شود که داده های آن در پایگاه داده ذخیره شود. 

لطفاً توجه داشته باشید که بعد از اینکه Workflow متوقف شد و داده های آن در پایگاه داده ذخیره شد، گردش کار نمی تواند بصورت اتوماتیک، ادامه یابد. حتی بعد از گذشت 1 ثانیه که برای اکتیویتی Delay تنظیم کردیم...!

برای ادامه جریان کار Workflow، یا باید آنرا بصورت دستی راه اندازی کنیم و یا یک سرویس ای بنویسیم که زمان را مونیتور کرده و سپس اجرای Workflow را ادامه دهد.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه