در این قسمت، یک سری مثال گردش کاری سازگار با Stateless Designer را بررسی خواهیم کرد. خروجیهای XML زیر را میتوانید در
Stateless Designer وارد کرده و تبدیل به کدهای معادل کنید. اگر نمونهای را هم خودتان طراحی کردهاید میتوانید در قسمت نظرات مطلب جاری به اشتراک بگذارید.
الف) طراحی گردش کاری یک سیستم ردیابی خطاها (Bug tracking system)
در ادامه رویدادها، حالات و انتقالات یک ماشین حالت ردیابی خطاها را مشاهده میکنید:
<statemachine xmlns="http://statelessdesigner.codeplex.com/Schema">
<settings>
<itemname>BugTrackingStateMachine</itemname>
<namespace>StatelessTests</namespace>
<class>public</class>
</settings>
<triggers>
<trigger>Assign</trigger>
<trigger>Defer</trigger>
<trigger>Resolve</trigger>
<trigger>Close</trigger>
</triggers>
<states>
<state start="yes">Open</state>
<state>Assigned</state>
<state>Deferred</state>
<state>Resolved</state>
<state>Closed</state>
</states>
<transitions>
<transition trigger="Assign" from="Open" to="Assigned" />
<transition trigger="Assign" from="Assigned" to="Assigned" />
<transition trigger="Close" from="Assigned" to="Closed" />
<transition trigger="Defer" from="Assigned" to="Deferred" />
<transition trigger="Assign" from="Deferred" to="Assigned" />
<transition trigger="Resolve" from="Assigned" to="Resolved" />
</transitions>
</statemachine>
با گرافی معادل:
توضیحات:
یک گزارش خطا حداقل پنج حالت آغاز (Open)، انتساب به شخص، جهت رفع مشکل (Assign)، به تاخیر افتادن/درحال بررسی (Deffered)، برطرف شده (Resolved) و خاتمه یافته/برطرف نخواهد شد (Closed) را میتواند داشته باشد.
برای حرکت (Transition) از هر حالت به حالتی دیگر نیاز به یک سری رویداد (Trigger) است که لیست آنها را در بالا مشاهده میکنید.
در ابتدا سیستم در حالت انتساب به شخص قرار میگیرد. سپس در همین حالت شخص میتواند یکی از سه حالت رفع شده، بستن موضوع و یا ارجاع به زمانی دیگر را انتخاب کند. حتی در حالت ارجاع به شخص، شخص میتواند مساله را به شخصی دیگر ارجاع دهد. یا در حالت به تاخیر افتادن حل مساله، میتوان مشکل را به شخصی دیگر انتساب داد.
ب) طراحی گردش کاری درخواست ارتقاء در یک شرکت
مراحل درخواست ارتقاء شغلی را در یک سازمان فرضی، در ذیل مشاهده میکنید:
<statemachine xmlns="http://statelessdesigner.codeplex.com/Schema">
<settings>
<itemname>RequestPromotionStateMachine</itemname>
<namespace>StatelessTests</namespace>
<class>public</class>
</settings>
<triggers>
<trigger>Complete</trigger>
<trigger>RequestInfo</trigger>
<trigger>Deny</trigger>
<trigger>Approve</trigger>
<trigger>ManagerJustify</trigger>
</triggers>
<states>
<state start="yes">RequestPromotionForm</state>
<state>ManagerReview</state>
<state>PromotionDenied</state>
<state>VicePresidentApprove</state>
<state>Promoted</state>
</states>
<transitions>
<transition trigger="Complete" from="RequestPromotionForm" to="ManagerReview" />
<transition trigger="RequestInfo" from="ManagerReview" to="RequestPromotionForm" />
<transition trigger="Deny" from="ManagerReview" to="PromotionDenied" />
<transition trigger="Approve" from="ManagerReview" to="VicePresidentApprove" />
<transition trigger="ManagerJustify" from="VicePresidentApprove" to="ManagerReview" />
<transition trigger="Deny" from="VicePresidentApprove" to="PromotionDenied" />
<transition trigger="Approve" from="VicePresidentApprove" to="Promoted" />
</transitions>
</statemachine>
با گرافی معادل:
توضیحات:
کارمند فرم درخواست ارتقاء را تکمیل میکند. این فرم به مسئول او ارسال میشود. مسئول میتواند درخواست را یک ضرب رد کند؛ یا تائید کند که سپس برای مدیرعامل شرکت ارسال میشود و یا مجددا به شخص برای تکمیل نواقص فرم ارجاع دهد. مدیرعامل شرکت میتواند درخواست را تائید کند که در اینجا کار خاتمه مییابد و شخص ارتقاء خواهد یافت. یا میتواند درخواست را رد کند و یا برای بررسی بیشتر مجددا به مسئول شخص ارجاع دهد.
تمرین! توضیحات زیر را تبدیل به یک State machine کنید!
چند سال قبل به ادارهی بیمه تامین اجتماعی منطقه مراجعه کردم. جهت دریافت ریز سوابق و انتقال آنها به این مرکز ابتدا یک برگه دریافت شد. پر شد، بعد به صورت دستی (توسط بنده) به یک نفر دیگر ارجاع شد تا امضاء کند. سپس به صورت دستی به مسئول قسمت ارجاع شد تا امضاء کند. مجددا به صورت دستی به مدیر کل مجموعه ارجاع شد تا امضاء کند. سپس به صورت دستی به دبیرخانه برای پیگیری ارجاع شد. قرار است ظرف یک ماه تا 45 روز این سوابق از یک واحد دیگر به این واحد منتقل شوند!
بعد از 45 روز:
مراجعه به دبیرخانه: دریافت شماره پرونده رسیده.
گفته شد که به قسمت دریافت شماره مراجعه کنید. مراجعه شد، گفتند برو پروندهات را بگیر بیار. رفتم زیر زمین، گفت که ما اینطوری پرونده نمیدیم! برو فرمش رو هم پر کن بیار. مراجعه شد به کارمند مربوطه، ایشان پس از مشورت با سایر همکاران به این نتیجه رسیدند که در این مرحله نیازی به مراجعه به زیر زمین نبوده! و باید به قسمت ثبت نام مجدد مراجعه کنید! چشم!
اینجا هم مجددا فرم پر شد،ارجاع داده شده به معاون قسمت، امضاء کرد گفت برو دبیرخانه شماره بگیر. شماره گرفته شده بعد مجددا به همان قسمت ثبت نام مراجعه کردم، گفتند برو پروندهات را از زیر زمین بگیر بیار! بعد از آوردن پرونده، ارجاع شد به صورت دستی به یک قسمت دیگر که سوابق وارد سیستم شود (هنوز نشده بود!). بعد از ثبت (نیم ساعت یا بیشتر ...)، مجددا به همان قسمت ثبت نام مراجعه کردم، گفت حالا برو یک شماره بگیر بیار. شماره گرفته شد از قسمتی دیگر و مراجعه مجدد به قسمت ثبت نام، یک نامه دیگر تهیه کرد، به سه نفر دیگر + دبیرخانه برای امضاء و شماره گرفتن ارجاع داده شد. اینجا تمام شد. بعد این موارد ارجاع شد به قسمت دیگری از شهر برای دریافت قبض پرداخت بیمه.
مطلب مرتبط