سبد (0)

اکتیویتی Pick

نحوه ی استفاده ازاکتیویتی Pick در Workflow

اکتیویتی Pick در WF4 بسیار شبیه اکتیویتی Listen در اکتیویتی WF3 است.

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

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

  1. ایجاد یک پروژه از نوع Workflow Console Application
  2. طراحی Workflow و نحوه استفاده از اکتیویتی Pick
  3. نوشتن کدهای #C
  4. اجرای Workflow
  5. سیستم گردش کار UsingPickActivity چگونه کار می کند؟

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

یک پروژه جدید از نوع Workflow Console Application ایجاد کرده و آنرا UsingPickActivity نامگذاری کنید.


طراحی Workflow و نحوه استفاده از اکتیویتی Parallel

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

  1. از پنل ToolBox، اکتیویتی Pick را انتخاب کرده و به داخل صفحه طراحی گردش کار بکشید و مطابق شکل زیر آنرا تنظیم نمایید:

توجه: در اکتیویتی Pick مجاز به تعریف متغییر (Variables) نیستیم.


نوشتن کدهای #C

فایل Program.cs را باز کنید و کدهای زیر را در آن کپی و پیست نمایید:

فایل Program.cs

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

namespace UsingPickActivity
{
    /// 
    /// Author : Amir Pahlavan sadegh
    /// provided to you by : http://www.beyamooz.com
    ///     
    class Program
    {
        static void Main(string[] args)
        {
            AutoResetEvent waitHandler = new AutoResetEvent(false);
            WorkflowApplication wfApp =  new WorkflowApplication(new Workflow1());
            wfApp.Completed = (e) => waitHandler.Set();
            wfApp.Run();
            waitHandler.WaitOne();

            Console.WriteLine("-------------\nProvided to you by : http://www.beyamooz.com \npress any key ...");
            Console.ReadLine();
        }
    }
}

اجرای Workflow

پروژه UsingPickActivity را بعنوان پروژه StartUp تنظیم نمایید و در ادامه برای اجرای Workflow دکمه های میانبر Ctrl+F5 را فشار دهید. همان طور که مشاهده می کنید تنها یکی از شاخه های اکتیویتی Pick یعنی Branch1 بصورت کامل اجرا شده است:


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

در این تمرین، اکتیویتی Pick شامل دو شاخه یا Branch می باشد. هر کدام از شاخه ها دارای یک اکتیویتی Delay است. اما شاخه اول (Branch1) دارای تأخیر 3 ثانیه ای است در حالی که شاخه دوم (Branch2) دارای تأخیر 5 ثانیه ای می باشد. زمانی که Workflow اجرا می شود هر دو شاخه بصورت موازی اجرا می شوند اما زمانی که اجرای شاخه اول به پایان رسید، ادامه اجرای شاخه دوم لغو خواهد شد.

توجه: در مطالب قبلی (ساخت اکتیویتی با Bookmark) با نحوه ساخت اکتیویتی های سفارشی با استفاده از Bookmark آشنا شدید، اما در مثال بالا، شما می توانید یکی از اکتیویتی های Delay را با اکتیویتی Bookmark جایگزین نمایید.

برای ایجاد Bookmark بصورت زیر عمل نمایید:

1- یک فایل جدید بنام MyBookmark.cs به پروژه اضافه کنید و کدهای زیر را در آن پیست نمایید:

فایل MyBookmark.cs

using System.Activities;
namespace UsingPickActivity
{
    public class MyBookmark : NativeActivity
    {
        [RequiredArgument]
        public InArgument BookmarkName { get; set; }
        protected override void Execute(NativeActivityContext context)
        {
            context.CreateBookmark(BookmarkName.Get(context), new BookmarkCallback(OnResumeBookmark));
        }
        protected override bool CanInduceIdle
        {
            get { return true; }
        }
        public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
        {
            Result.Set(context, (string)obj);
        }
    }
}

فایل را ذخیره کنید و با استفاده از دکمه F6 پروژه را Build کنید. حالا اگر فایل Workflow1.xaml را باز کنید و به پنل Toolbox توجه کنید، مشاهده خواهید کرد که اکتیویتی MyBookmark به آن اضافه شده است.

2- از پنل Solution Explorerr فایل Workflow1.xaml را باز کنید و Workflow را مطابق زیر طراحی نمایید:

3- اما در ادامه فایل Program.cs را باز کنید و مطابق زیر کدها را تغییر دهید (قسمت قرمز رنگ):

فایل Program.cs

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

namespace UsingPickActivity
{
    /// 
    /// Author : Amir Pahlavan sadegh
    /// provided to you by : http://www.beyamooz.com
    ///     
    class Program
    {
        static void Main(string[] args)
        {
            //Pick Activity with 2 Delay Activity
            //AutoResetEvent waitHandler = new AutoResetEvent(false);
            //WorkflowApplication wfApp = new WorkflowApplication(new Workflow1());
            //wfApp.Completed = (e) => waitHandler.Set();
            //wfApp.Run();
            //waitHandler.WaitOne();

            ///Pick Activity with bookmark Activity
            string BMName = "StringInputBookmark";
            AutoResetEvent waitHandler = new AutoResetEvent(false);
            WorkflowApplication wfApp = new WorkflowApplication(new Workflow1() { BookmarkName = BMName });
            wfApp.Completed = (e) => waitHandler.Set();
            wfApp.Run();
            wfApp.ResumeBookmark(BMName, Console.ReadLine());
            waitHandler.WaitOne();

            Console.WriteLine("-------------\nProvided to you by : http://www.beyamooz.com \npress any key ...");
            Console.ReadLine();
        }
    }
}

4- پروژه UsingPickActivity را بعنوان پروژه StartUp تنظیم نمایید و در ادامه برای اجرای Workflow دکمه های میانبر Ctrl+F5 را فشار دهید. همان طور که در تصویر زیر مشاهده می کنید، بنده قبل از اینکه زمان 5 ثانیه مربوط به Branch2 به پایان برسد، رشته Beyamooz را وارد کردم و روی دکمه Enter کلیک کردم، بنابراین با این کار اجرای Branch1 کامل شده و ادامه اجرای Branch2 لغو می شود. توجه داشته باشید که اگر قبل از 5 ثانیه این کار انجام نشود، اجرای Branch2 کامل شده و اجرای Branch1 لغو خواهد شد.

{module خرید و دانلود فصل دوم آموزش Workflow}

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