سبد (0)

دریافت ورودی در Workflow

ساخت یک اکتیویتی سفارشی برای دریافت ورودی 

زمانی که Workflow در حال اجرا است و می خواهیم در حین گردش کار، اطلاعاتی را به آن ارسال کنیم چه باید کرد؟ یکی از روش های دریافت اطلاعات در Workflow قابلیت Bookmark است. در این قسمت از آموزش Workflow با استفاده از Bookmark اکتیویتی ای ایجاد خواهیم کرد که یک متن را بعنوان ورودی دریافت می کند.

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

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

  1. اضافه کردن فایل InputMessage.cs
  2. ايجاد و طراحي Workflow
  3. اجراي Workflow
  4. پروژه ي گردش کار TestInputMessageWF چگونه عمل مي کند؟

اضافه کردن فایل InputMessage.cs

در پروژه ActivityLibrary، یک فایل جدید با نام InputMessage.cs ایجاد نمایید و کدهای زیر را در آن قرار دهید:

InputMessage.cs

using System.Activities;
public class InputMessage : NativeActivity
{
    public InArgument bookmarkName { get; set; }
    public OutArgument result { get; set; }
    protected override void Execute(NativeActivityContext context)
    {
        context.CreateBookmark(bookmarkName.Get(context), new BookmarkCallback(OnResumeBookmark));
    }
    public void OnResumeBookmark(NativeActivityContext context, Bookmark bookmark, object obj)
    {
        result.Set(context, (T)obj);
    }
    protected override bool CanInduceIdle
    {
        get { return true; }
    }
}

 حالا پروژه را Build کنید تا اکتیویتی سفارشی ما یعنی InputMessage در پنل Toolbox ظاهر شود.


ايجاد و طراحي Workflow

در پروژه WorkflowConsoleApp  یک Workflow جدید با نام TestInputMessageWF.xaml اضافه نمایید و برای طراحی Workflow مراحل زیر را طی نمایید:

  1. از پنل Toolbox، اکتيويتي Sequence را بداخل صفحه طراحی گردش کار بکشيد و مطابق تصویر زیر، متغیر resultVar و آرگومان ورودی bookmarkName را تعریف نمایید.
  2. یک اکتیویتی WriteLine اضافه کنید و خصوصیت Text آنرا با "Start" تنظیم نمایید.
  3. از پنل Toolbox، اکتيويتي InputMessage  را در زیر اکتیویتی WriteLine قرار دهید و مطابق تصویر زیر آنرا تنظیم نمایید. زمانی که این اکتیویتی را در صفحه رها می کنید، بلافاصله پنجره ی Select Type ظاهر می شود که باید مقدار string را برای قسمت T تنظیم نمایید.
  4. در آخر یک اکتیویتی WriteLine دیگر اضافه کنید و خصوصیت Text آنرا مطابق زیر تنظیم کنید.


اجراي Workflow

براي اجراي Workflow، فایل Program.cs را بصورت زیر تغییر داده و دکمه هاي ميانبر Ctrl+F5 را فشار دهيد:

Program.cs

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

namespace WorkflowConsoleApp
{
    /// 
    /// Author : Amir Pahlavan sadegh
    /// provided to you by : http://www.beyamooz.com
    ///
    class Program
    {
        static void Main(string[] args)
        {
            AutoResetEvent waitHandler = new AutoResetEvent(false);
            string bkName = "inputBookmark";
            WorkflowApplication wfApp = new WorkflowApplication(new TestInputMessageWF() { bookmarkName = bkName });
            wfApp.Completed = (arg) => { waitHandler.Set(); };
            wfApp.Run();
            wfApp.ResumeBookmark(bkName, Console.ReadLine());
            waitHandler.WaitOne();


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

همانطور که در تصویر زیر مشاهده می کنید بعد از اینکه متن "... Start" در کنسول چاپ شد، اجرای Workflow متوقف شده و متنظر دریافت ورودی کاربر می شود. سپس من در خط دوم، رشته ی "Workflow  in beyamooz.com" را وارد کردم و کلید Enter را فشردم، به این ترتیب رشته وارد شده توسط بنده، در متغییر resultVar ذخیره می شود. حالا اکتیویتی WriteLine در آخرین مرحله سیستم گردش کار، آنرا چاپ می کند.


پروژه ي گردش کار TestInputMessageWF چگونه عمل مي کند؟

در یکی از دو حالت زیر باید از کلاس NativeActivity استفاده کنیم:

  1. اگر بخواهیم با استفاده از قابلیت Bookmark یک اکتیویتی ایجاد کنیم.
  2. زمانی که بخواهیم یک اکتیویتی ترکیبی ایجاد کنیم. یعنی اکتیویتی ای که شامل چند اکتیویتی دیگر است. (مانند اکتیویتی Sequence)

کلاس NativeActivity نسبت به CodeActivity بسیار قدرتمندتر و انعطاف پذیرتر است. اما برای استفاده از آن باید درباره ی WF runtime و همچنین متدها و خصوصیات آن بیشتر بدانیم.

زمانی که در Workflow یک اکتویتی با قابلیت Bookmark اجرا می شود، سیستم گردش فرم، متوقف شده و منتظر دریافت ورودی می ماند. اما در فایل Program.cs زمانی که متد ResumeBookmark با دو پارامتر "bkName" و "مقدار وارد شده توسط کاربر" فراخوانی می شود، Workflow از حالت pause یا توقف خارج شده و اجرای آن ادامه پیدا می کند.

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