سبد (0)

اکتیویتی Switch

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

در اینجا قصد داریم، نحوه ی استفاده از اکتیویتی Switch را در Workflow بررسی کنیم. در قسمت شرط اکتیویتی Switch علاوه بر رشته از object نیز می توان استفاده نمود.

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

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

  1. ایجاد یک پروژه از نوع Workflow Console Application
  2. ایجاد کلاس Product
  3. ایجاد کلاس ProductConverter
  4. وارد کردن (import) نِیم اسپیس UsingSwitchActivityInSequenceWorkflow به Workflow
  5. طراحی Workflow و نحوه ی استفاده از Switch
  6. اجرای Workflow
  7. سیستم گردش کار UsingSwitchActivityInSequenceWorkflow چگونه کار می کند؟

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

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


ایجاد کلاس Product

در پنل Solution Explorer روی پروژه UsingSwitchActivityInSequenceWorkflow راست کلیک کرده و گزینه Add -> New Item را انتخاب نمایید.

در پنجره Add New Item، نام فایل را "Product.cs" قرار داده و روی دکمه Add کلیک نمایید. حالا کدهای زیر را در فایل Product.cs کپی و پیست نمایید:

Product.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;

namespace UsingSwitchActivityInSequenceWorkflow
{
    [TypeConverter(typeof(ProductConverter))]
    public class Product
    {
        public string ProductName { get; set; }
        public Guid ProductId { get; set; }
        public Product()
        {
            this.ProductName = "Defualt Name";
            this.ProductId = Guid.NewGuid();
        }
        public Product(string productName, Guid productId)
        {
            this.ProductName = productName;
            this.ProductId = productId;
        }
        public override bool Equals(object obj)
        {
            Product product = obj as Product;
            if (product != null)
            {
                return string.Equals(this.ProductName, product.ProductName);
            }
            return false;
        }
        public override int GetHashCode()
        {
            if (this.ProductName != null)
            {
                return this.ProductName.GetHashCode();
            }
            return 0;
        }
    }
}


ایجاد کلاس ProductConverter

یکبار دیگر در پنل Solution Explorer روی پروژه UsingSwitchActivityInSequenceWorkflow راست کلیک کرده و گزینه Add -> New Item را انتخاب نمایید. در پنجره Add New Item، نام فایل را "ProductConverter.cs" تنظیم کنید و روی دکمه Add کلیک نمایید.

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

ProductConverter.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Globalization;

namespace UsingSwitchActivityInSequenceWorkflow
{
    public class ProductConverter : TypeConverter
    {
        public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)
        {
            return sourceType == typeof(string);
        }
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            if (value == null)
            {
                return null;
            }
            if (value is string)
            {
                return new Product()
                {
                    ProductName = (string)value,
                    ProductId = Guid.NewGuid(),
                };
            }
            return base.ConvertFrom(context, culture, value);
        }
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType)
        {
            if (destinationType == typeof(string))
            {
                if (value != null)
                {
                    return ((Product)value).ProductName;
                }
                else
                {
                    return null;
                }
            }
            return base.ConvertTo(context, culture, value, destinationType);
        }
    }
}

با استفاده از کلاس ProductConverter، اکتیویتی Switch می تواند Product را به رشته و یا برعکس تبدیل کند.

قبل از اینکه مرحله بعد را انجام دهیم، برای اینکه نوع Product و ProductConverter در پروژه شناسایی شود، نیاز داریم که پروژه را Build کنیم.


وارد کردن (import) نِیم اسپیس UsingSwitchActivityInSequenceWorkflow به Workflow

در ادامه فایل Workflow1.xaml را باز کرده و از پایین پنجره، تب Imports را انتخاب نمایید، سپس از بالای پنل باز شده روی لیست کشویی کلیک کرده و از بین گزینه ها، UsingSwitchActivityInSequenceWorkflow را انتخاب نمایید.


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

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

  1. از پنل ToolBox، اکتیویتی Sequence را انتخاب کرده و به داخل صفحه طراحی گردش کار بکشید.
  2. مجدداً از پنل Toolbox اکتیویتی Switch را به داخل Sequence بکشید و آنرا مطابق زیر تنظیم نمایید.

توجه: زمانی که اکتیویتی Switch را به داخل صفحه طراحی Workflow می کشید، بلافاصله پنجره "Select Types" نمایان می شود:

از لیست کشویی، باید گزینه Brows for Type را انتخاب کنید، بلافاصله پنجره "Brows and Select" نمایان خواهد شد. مطابق شکل زیر، گزینه Product را انتخاب کنید و روی دکمه OK کلیک نمایید:


اجرای Workflow

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


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

همان طور که می دانید در #C با استفاده از دستور Switch، تنها روی انواعی مثل Boolean و Int32 و String و enumeration می توان مقایسه انجام داد. اما در WF4 و نسخه های بعدی، علاوه بر انواع مذکور، روی نوع user-defined نیز می توان شرط تساوی را چک نمود.

برای فعال کردن ویژگی بالا، مراحل زیر باید انجام شود:

  1. ایجاد یک کلاس converter برای تبدیل یک شی از نوع user-defined به نوع String و برعکس از String به user-defined
  2. Override کردن دو متد زیر که مربوط به کلاس user-defined هستند. در اینجا کلاس user-defined تعریف شده توسط ما کلاس Product است: 

Product.cs

        public override bool Equals(object obj)
        {
            Product product = obj as Product;
            if (product != null)
            {
                return string.Equals(this.ProductName, product.ProductName);
            }
            return false;
        }
        public override int GetHashCode()
        {
            if (this.ProductName != null)
            {
                return this.ProductName.GetHashCode();
            }
            return 0;
        }

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

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