طرح مسئله:فرض کنید در فرایندی میبایست فعالیت کاربر تا زمان مشخصی در کارتابل کاربر باقی بماند و حتی با تکمیل، فعالیت تا زمان مشخصی مجدد به کارتابل اقدامکننده فعالیت کاربر وارد شود و تنها در صورت گذشت از تاریخ مورد نظر فرایند ادامه پیدا کند.
یک راهحل: جهت حل مسئله میتوان از یک درگاه انحصاری پس از فعالیت کاربر مورد نظر استفاده کرد و شرط قرار گرفته بر روی مسیری که در صورت صادق شدن مجدد فرایند را به فعالیت کاربر مورد نظر هدایت میکند، کدی قرار میگیرد که تاریخ تکمیل فعالیت را با تاریخ مورد نظر مقایسه میکند. در این فرایند فرض شده است که فعالیت کاربر ثبت درخواست میبایست تا تاریخ 1402/06/31 در کارتابل کاربر باقی بماند و امکان ادامه فرایند وجود نداشته باشد (شکل 1).
شکل 1
برای پیادهسازی فرایند به این صورت ابتدا میبایست در فرم فعالیت ثبت درخواست فیلدی از نوع تاریخ وجود داشته باشد که شرط درگاه بر اساس آن تاریخ بررسی شود (شکل 2). با تنظیم این فیلد تاریخ به صورتی که پیشفرض تاریخ جاری سیستم را ثبت نماید، میتوان از تاریخ ثبت شده در آن برای مقایسه با تاریخ مورد نظر استفاده کرد.
شکل 2
سپس در تب ورودی/خروجی فعالیت کاربر ثبت درخواست، فیلد تاریخ ثبت درخواست به عنوان پارامتر خروجی تعریف میشود (شکل 3).
شکل 3
بر روی مسیر خیر، در قسمت نوع شرط Csharp انتخاب میشود (شکل 4).
شکل 4
در قسمت کدنویسی کد ارائه شده قرار داده میشود:
;using System
;using Chargoon.Didgah.BPMS.CommonApi
namespace Chargoon.Didgah.BPMS.Runtime
}
public class ConditionalFlow : IConditionalFlow
}
public IExecution Execution { get; set; }
()public bool Evaluate
}
;DateTime Date1 = new DateTime(2023, 09, 22)
;int Result = DateTime.Compare(Execution.DateTimeValue(“CompleteDate”), Date1)
if ((Result == -1) || (Result == 0))
;return true
else
;return false
{
{
{
کد ارائه شده عملیات زیر را انجام میدهد:
- ابتدا یک متغیر از نوع تاریخ و با مقدار معادل میلادی تاریخ 31/06/1402 ایجاد میشود (Date1).
- با استفاده از دستور DateTime.Compare بین دو مقدار فیلد تاریخ ثبت شده در فرم (تاریخ ثبت درخواست) و متغیر Date1 مقایسه صورت میگیرد و نتیجه مقایسه در یک متغیر از نوع عدد صحیح ذخیره میشود. در صورت کوچکتر بودن تاریخ تکمیل فعالیت کاربر نسبت به تاریخ مورد نظر نتیجه مقایسه 1- خواهد بود. در صورت برابر بودن این دو مقدار نتیجه مقایسه 0 خواهد بود.
- در نهایت با استفاده از دستور if و بررسی مقدار نتیجه بررسی دو تاریخ، در صورت کوچکتر بودن تاریخ ثبت فرم از تاریخ مورد نظر و یا برابر بودن این دو مقدار نتیجه true برگشت داده میشود که منجر به اجرای مسیر خیر میشود. در غیر این صورت مقدار false برگشت داده میشود که منجر به ادامه فرایند از مسیر پیشفرض میشود.
پس از اجرای فرایند در صورتی که تاریخ ثبت درخواست، کوچکتر یا مساوی تاریخ 31/06/1402 باشد، فرایند از مسیر خیر ادامه پیدا میکند و فرم به کارتابل کاربر باز خواهد گشت و در صورتی که تاریخ ثبت درخواست پس از 31/06/1402 باشد فرایند از مسیر بله ادامه پیدا میکند (شکل 5).
شکل 5