شرح صورت مسئله: فرض کنید در یک فرآیند نیاز است که یک فعالیت کاربر (UserTask) تا روز 15 ماه شمسی انجام شود و اگر زمان ساخت فعالیت کاربر بعد از 15 ماه بود، باید این فعالیت تا 15 ماه بعدی انجام شود.
برای جامع بودن راهحل، فرض کنید اگر در یک فرایند نیاز باشد با درنظر گرفتن زمان حال، nاُمین روز آن ماه محاسبه شود میتوان از کد پایین در فعالیت کدنویسی (ScriptTask) استفاده کرد.
بعد از محاسبه این زمان باید تاریخ بهدستآمده در یک فیلد از جنس تاریخ ساعت ذخیره و از این فیلد در رخداد زمانسنج که به صورت مرزی روی فعالیت است استفاده کرد (BoundaryTimer). در این مثال نام فیلد تاریخ VisibleDate است.
همچنین فیلد تاریخ محاسبه شده (VisibleDate) را در بخش پارامترهای خروجی فعالیت کدنویسی (ScriptTask) و درون بخش پارامترهای ورودی رخداد مرزی زمانسنج (BoundaryTimer) مورد نظر تعریف میکنیم.
using System; using Chargoon.Didgah.BPMS.CommonApi; using System.Globalization; namespace Chargoon.Didgah.BPMS.Runtime { public class ScriptTask : IScriptTask { public IExecution Execution { get; set; } public void Execute() { //تعریف متغیرهایی از جنس عدد صحیح کهYear و MonthوDay تاریخ فعلی در آنها به صورت مجزا درج میشود و NewYearو NewMonth ماه و سال مربوط به روز nام است و برای مثال روز nام را 15 مقدار میدهیمDayNth =15 .// int Year = 0, Month = 0, Day = 0, DayNth = 15 , NewMonth=0, NewYear=0; //تعریف p به عنوان یک object از کلاس PersianCalendar برای بررسی تاریخ به صورت تاریخ شمسی// PersianCalendar p = new PersianCalendar(); //تعریف date1که در آن تاریخ لحظه را میریزیم. // DateTime date1 = DateTime.Now; //سال و ماه و روز تاریخ date1 را درون متغیرهای عدد صحیحی که در ابتدا تعریف کردهایم میریزیم.// Year = p.GetYear(date1); Month = p.GetMonth(date1); Day = p.GetDayOfMonth(date1); //حال بررسی میکنیم که ماه تاریخ الان برابر با 12 است یا نه و همچنین روز بزرگتر یا کوچکتر از روز مدنظر است. طبق هر شرط متغییرهای NewMonth و NewYearرا مقداردهی میکنیم.// if (Day > 2 && Month == 12) { NewMonth = 1; NewYear = Year + 1; } Else if (Day > 2 && Month!= 12) { NewMonth = Month +1; NewYear = Year; } Else NewMonth = Month; NewYear = Year; // لازم است این ماه و سال به دست امده را به تاریخ میلادی تبدیل کنیم و درون فیلد VisibleDate // درج کنیم. int FinalYear = 0, FinalMonth = 0, FinalDay = 0; DateTime FinalDate= new DateTime(NewYear ,NewMonth ,DayNth ,p); FinalYear = FinalDate.Year; FinalMonth = FinalDate.Month; FinalDay = FinalDate.Day; DateTime Date2 = new DateTime(FinalYear,FinalMonth,FinalDay); Execution.SetVariable("VisibleDate",Date2); } } }