طرح مسئله: فرض کنید در فرایندی باید فعالیت کاربر تا زمان مشخصی در کارتابل کاربر باقی بماند و حتی با تکمیل، فعالیت تا زمان مشخصی مجدد به کارتابل اقدامکننده فعالیت کاربر وارد شود و تنها در صورت گذشت از تاریخ مورد نظر فرایند ادامه پیدا کند.
یک راهحل: برای حل مسئله میتوان از یک درگاه انحصاری پس از فعالیت کاربر مورد نظر استفاده کرد و شرط قرار گرفته بر روی مسیری که در صورت صادق شدن مجدد فرایند را به فعالیت کاربر مورد نظر هدایت میکند، کدی قرار میگیرد که تاریخ تکمیل فعالیت را با تاریخ مورد نظر مقایسه میکند. در این فرایند فرض شده است که فعالیت کاربر ثبت درخواست باید تا تاریخ 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 برگشت داده میشود که منجر به ادامه فرایند از مسیر پیشفرض میشود.
پس از اجرای فرایند در صورتی که تاریخ ثبت درخواست، کوچکتر یا مساوی تاریخ 1402/6/31 باشد، فرایند از مسیر خیر ادامه پیدا میکند و فرم به کارتابل کاربر بازمیگردد و در صورتی که تاریخ ثبت درخواست پس از 1402/6/31 باشد فرایند از مسیر بله ادامه پیدا میکند (شکل 5).
شکل 5