Flowchart Workflow
در این قسمت به ساخت یک Workflow از طریق Flowchart میپردازیم. در Workflow هایی که از طریق Flowchart تعریف میشوند٬ فعالیتها به صورت درختی تعریف شده و با هم در ارتباط بوده و ارتباط آنها از طریق درختهای تصمیم گیری میباشد.
برای استفاده از آن، از قسمت Toolbox ٬ قسمت Flowchart ٬ کنترل Flowchart را به داخل صفحه کشیده، حال میتوانیم از دیگر کنترلها در درون Flowchart استفاده کنیم.
نکته : تفاوتی که در Sequence و Flowchart است، در نحوه اجرای فعالیتها میباشد. در Sequence فعالیتها همانطور که از بالا به پایین چیده شده است اجرا میشوند٬ ولی در Flowchart میتوان در خواستهایی را که جهت اجرای فعالیتها فرستاده میشوند، کنترل کرد.
FlowDecision
این کنترل برای مشخص کردن یک شرط میباشد و بر اساس این شرط٬ این کنترل میتواند دو خروجی داشته باشد. یکی در صورت درست بودن شرط و دیگری در صورت غلط بودن. این شرط هم مانند دستور IF یک خصوصیت شرط دارد که در قسمت Properties آن مشخص میشود.
DateTime.Now.Hour==1
اگر به برچسبهای True و False دقت کنید٬ خروجیهای کنترل را نشان میدهند. این نوشتهها ثابت نیستند و میتوانید با انتخاب کنترل، از قسمت Properties آنها را عوض کنید.
نکته : به عکس بالا دقت کنید. زمانیکه از کنترل خروجی گرفته شده است٬ سمت پیکانها به سمت کنترل WriteLine میباشد و این به این معنا میباشد که این پیکان از کنترل Decision به سمت پاین کشیده شده است. اگر این کار را بر عکس انجام دهیم دیگر کنترل Decision کنترل WriteLine را نمیشناسد و در صورت درست بودن شرط در خروجی مقداری چاپ نمیشود.
در کنترل Flowchart امکان استفاده از کنترل Sequence وجود دارد و همینطور بالعکس. این امر بستگی به نوع فرآیند شما دارد که چه موقع باید از ساختار ترتیبی استفاده شود و کجا درختی و شاید این امکان وجود داشته باشد که فرآیند مورد نظر ترکیبی از دو باشد.
Flow Switch
زمانیکه از کنترل Decision استفاده میکنید٬ محدود میشوید به دو مقدار True و False. ولی زمانیکه از کنترل Flow Switch یا Switch استفاده میکنید٬ این محدودیت از بین میرود و شما میتوانید n دستور عمل را اجرا کنید. این کنترل دقیقا شبیه دستور Switch Case در #C عمل میکند.
نحوه کار کردن آن به این صورت میباشد که ابتدا کنترل را انتخاب کرده٬ سپس از قسمت Properties ٬ در قسمت Expression آن، مقدار مورد نظر خود را وارد میکنیم. اینجا این سئوال پیش میآید این کنترل از کجا متوجه میشود که خروجی Expression آن باید از چه نوعی باشد؟ اگر به شکل کنترل Flow Switch ٬ در قسمت Toolbox دقت کرده باشید میبینید که نحوه نوشتن آن مانند این است که یک Generic Class تعریف کرده باشیم و دقیقا به همین صورت میباشد. زمانیکه این کنترل به درون کنترل Flowchart کشیده میشود، شکل زیر نمایان خواهد شد.
همانطور که مشاهده میکنید نوع T، از نوع عددی صحیح تعیین شده و این نوع، مقدار پیش فرض است. البته میتوان این نوع را عوض کرد. T میتواند از نوع Object، مثلا کلاس دانش آموزان باشد و یا از نوع یک Workflow دیگر٬ که در جلسات بعدی توضیح داده خواهد شد.
همانطور که در شکل بالا مشاهده میکنید از کنترل Decision دو خروجی گرفته شده است و هر دو به کنترل Switch ٬ اشاره دارند. این امر به این معنا میباشد که شرط در هر حالتی که باشد٬ چه درست چه غلط، پس از چاپ رشته مورد نظر، به کنترل Switch اشاره میکند.
Convert.ToInt32(((DateTime.Now.Month % 12) + 1) / 4)
شرط کنترل Switch در بالا مشخص شده است و بر اساس عددی که بر میگرداند٬ رشته مورد نظر را چاپ میکند. همچنین یک مقدار Default وجود دارد که حتما باید مشخص شود.
Parallel
از این کنترل برای اجرای هم زمان چندین فعالیت استفاده میشود .
به مثال زیر توجه کنید :
در کنترلهای WriteLine کد زیر نوشته شده است :
"Time: " + DateTime.Now.TimeOfDay.ToString() "Date: " + DateTime.Now.Date.ToShortDateString() "Today is: " + DateTime.Now.ToString("dddd")
کنترل Parallel باعث میشود ٬ که سه رشته هم زمان در خروجی چاپ شود .
اگر به عکس بالا دقت کنید٬ از بین حالتهای مختلفی که کنترل Switch میتواند داشته باشد٬ یک اتصال به کنترل Parallel صورت گرفته و این به آن معنا است که در هر حالتی کنترل Parallel انجام میگیرد. البته شایان ذکر است که این روش را میتوان محدود کرد.