سبد (0)

آرگومان ورودی و خروجی Workflow

استفاده از آرگومانهای ورودی/خروجی در یک برنامه گردش کار

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

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

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

  1. اضافه کردن یک پروژه از نوع Workflow Console Application
  2. ایجاد گردش کار و تعریف آرگومان InOutArgument
  3. نوشتن کدهای #C و مقداردهی و چاپ آرگومان ورودی/خروجی (InOut)
  4. اجرای Workflow

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

در پنل Solution Explorer مطابق شکل زیر روی Solution Chapter01 راست کلیک کرده و از گزینه ADD زیر منوی New Project را انتخاب نمایید:

در پنجره Add New Project گزینه workflow را انتخاب کرده و سپس از سمت راست پنجره گزینه Workflow Console Application را انتخاب نمایید. حالا قسمت Name را با مقدار UseInOutArgument تنظیم نمایید و نهایتاً روی دکمه OK کلیک نمایید.


2 ایجاد گردش کار و تعریف آرگومان InOutArgument 

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

  1. از پنل ToolBox، اکتیویتی Sequence را انتخاب کرده و به داخل صفحه طراحی گردش کار بکشید.
  2. در پایین صفحه طراحی گردش کار، تب Arguments را انتخاب نمایید و روی Create Argument کلیک نمایید، حالا یک آرگومان از نوع String و InOutArgument بنام InOutMessage ایجاد نمایید.
  3. از پنل ToolBox، اکتیویتی WriteLine را انتخاب کرده و به داخل  اکتیویتی Sequence بکشید و و رها کنید در ادامه مقدار Text آنرا با نام آرگومانی که در مرحله قبل تعریف نمودید، تنظیم نمایید.
  4. از پنل ToolBox، اکتیویتی Assign را انتخاب کرده و به داخل صفحه طراحی گردش کار بکشید. در ادامه باکس سمت چپ را با نام آرگومان تعریف شده در قبل یعنی InOutMessage تنظیم کرده و باکس سمت راست را با مقدار "Now, I am an OutMessage" تنظیم نمایید.


3 نوشتن کدهای #C و و مقداردهی و چاپ آرگومان ورودی/خروجی (InOut)

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

فایل Program.cs

using System;
using System.Linq;
using System.Activities;
using System.Activities.Statements;
using System.Collections.Generic;

namespace UseInOutArgument
{

    class Program
    {
        static void Main(string[] args)
        {
            IDictionary<string, object> input = new Dictionary<string, object>()
            {
                {"InOutMessage","Now, I am InMessage"}
            };
            IDictionary<string, object> output = WorkflowInvoker.Invoke(new Workflow1(), input);
            Console.WriteLine(output["InOutMessage"]);
            Console.ReadLine();
        }
    }
}

4 اجرای Workflow

پروژه UseOutArgument را بعنوان پروژه StartUp تنظیم نمایید:

در ادامه برای اجرای Workflow دکمه های میانبر Ctrl+F5 را فشار دهید. با این کار Workflow ذخیره شده و بدون عملیات debugging نتیجه نشان داده خواهد شد. همان طور که می بینید، نتیجه در Console ویندوز اجرا می شود و جلمه زیر چاپ می شود:


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

لطفاً به کد زیر توجه فرمایید:

فایل Program.cs

IDictionary<string, object> input = new Dictionary<string, object>()
            {
                {"InOutMessage","Now, I am InMessage"}
            };

همان طور که می دانید با استفاده از IDictionary می توانیم جفت های Key/Value تعریف کنیم، به این صورت که ابتدا باید نوع Key و Value را مشخص کنیم و سپس مانند بالا Key/Value ها را مقداردهی نماییم. در کد بالا، Key از نوع String و Value از نوع Object است.

پس تا اینجا یک Key با نام "InOutMessage" داریم که با مقدار "Now, I am InMessage" تنظیم شده است.

در ادامه کد بالا، خط زیر اجرا خواهد شد. توجه داشته باشید که شی ء input تعریف شده در مرحله قبل به عنوان پارامتر در متد ()invoke استفاده شده است:

فایل Program.cs

IDictionary<string, object> output = WorkflowInvoker.Invoke(new Workflow1(), input);

همان طور که قبلاً گفته شد، متد ()invoke باعث می شود که Workflow1 اجرا شود. البته پارامتر input نیز به Workflow پاس داده می شود و چون قسمت Key در پارامتر input هم نام با آرگومان تعریف شده در زمان طراحی Workflow است، بصورت خودکار آرگومان InOutMessage با استفاده از پارامتر input مقداردهی می شود.

بنابراین با اجرای کد بالا، جلمه ی "Now, I am InMessage" در کنسول ویندوز چاپ خواهد شد. فراموش نکنید که، قسمت Text در اکتیویتی WriteLine با آرگومان InOutMessage تنظیم شد و به این ترتیب جلمه ی مذکور چاپ خواهد شد.

اما در ادامه، مقداری که متد ()invoke برمی گرداند که البته از نوع IDictionary است در متغیر output قرار می گیرد. اما سوالی که مطرح می شود این است که Workflow چه مقدار را برمی گرداند ...!؟

حتماً به جواب سوال بالا رسیده اید، این مقدار چیزی نیست جز یک Key/Value که با استفاده از اکتیویتی Assign تنظیم خواهد شد. قسمت Key معادل "InOutMessage" و Value معادل "Now, I am an OutMessage" خواهد بود. پس تا اینجا متغیر  output شامل Key/Value مذکور است.

در ادامه اسکریبت، کد زیر را داریم که باعث می شود، رشته "Now, I am an OutMessage" در کنسول چاپ شود:

فایل Program.cs

Console.WriteLine(output["InOutMessage"]);

توجه: برای آرگومان InOutArgument نمی توان بصورت مستقیم یک مقدار String تنظیم نمود، بنابراین مجاز به استفاده از کد زیر نیستید:

تنظیم مقدار InOutArgument 

IDictionary<string, object> output =WorkflowInvoker.Invoke(new Workflow1()
		{
			InOutMessage="Now,I am InMessage"
		});

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

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