BPMSad BPMSad Academy

انجام عملیات تاریخ

Original Bizagi title: Low-code Process Automation > Studio Cloud - Authoring environment > Bizagi Studio > Process wizard > Business Rules > Business Rules examples > Date operations and timers > Perform date operations

اتوماسیون فرایند Low-code / محیط طراحی Studio Cloud / Bizagi Studio / Wizard فرایند / Ruleهای کسب‌وکار / قواعد کسب‌وکار / مثال‌های Ruleهای کسب‌وکار / تاریخ / انجام عملیات تاریخ

Many business situations require date comparisons and calculations. This section provide some examples on how to perform the most common date operations:

 

•اختصاص تاریخ امروز به یک attribute

•مقایسه تاریخ‌ها

•تفریق تاریخ‌ها

•تفریق تاریخ‌ها بر اساس Working time schema کاربر

•افزودن تاریخ‌ها

•افزودن تاریخ‌ها بر اساس Working time schema

•افزودن تاریخ‌ها بر اساس Working time schema کاربر

•بررسی اینکه تاریخ یک روز کاری است یا نه

•بررسی اینکه تاریخ برای کاربر روز کاری است یا نه

•بررسی اینکه تاریخ یک دقیقه کاری است یا نه

•بررسی اینکه تاریخ برای کاربر دقیقه کاری است یا نه

•محاسبه سن

•قالب‌بندی تاریخ

•متدهای دیگر

 

To illustrate how to perform date operations let's take the following example: A Vacations Request Process manages the necessary activities to request and approve vacations for employees. When an employee creates a request, he/she must enter the leave and return dates. Using these values, the system calculates the number of days requested.

 

In this example, we will use date operations in order to:

 

•اختصاص تاریخ امروز به تاریخ درخواست، یعنی attribute با نام RequestDate.

•تنظیم مدت‌زمان Activityها.

•بررسی اینکه Vacation's Returning date از Vacation's Leaving date بزرگ‌تر است. اگر نبود، یک پیام اعتبارسنجی نمایش داده شود.

•محاسبه تعداد روزهای درخواست‌شده.

 

The data model of the Process is as follows:

 

DateOperations1

 

Assign Today's Date to an Attribute

To assign today’s date to the Request Date attribute, go to the fourth step of the Bizagi Process Wizard and select Activity Actions.

Click the Task in which this action will be performed and create an Expression.

 

DateOperations2

 

Add an expression module and select the attribute to which today's date will be assigned.

Use the Data Model option to navigate the Data Model.

 

DateOperations3

 

Assign today’s date to the attribute using the Today function found in the Date & Time Category.

 

DateOperations4

 

The expression would be as follows:

 

DateOperations5

 

<VacationRequest.RequestDate>=DateTime.Today;

 

Click OK to save the changes.

 

Compare Dates

We have to validate that the Vacation's Returning date is greater than the Vacation´s Leaving date. If not, a validation message must be displayed to the end user. To do this, we have to establish a comparison between these dates.

 

1. در مرحله چهارم Bizagi Process Wizard گزینه Activity Actions را انتخاب کنید.

روی Taskی که این action در آن انجام می‌شود کلیک کنید و یک expression ایجاد کنید.

 

DateOperations2.

 

2. در یک ماژول expression، مقایسه را با استفاده از عملگرهای کوچک‌تر، بزرگ‌تر یا مساوی (<,> or =) ایجاد کنید.

 

DateOperations7

 

3. برای مقایسه attributeها یک شرط IF ایجاد کنید.

 

DateOperations8

 

اگر Leaving Date بزرگ‌تر از Returning Date باشد، یک پیام خطا به کاربر نهایی نمایش داده می‌شود.

برای پیکربندی اعتبارسنجی، از تابع Throw validation error که در دسته Data Validation قرار دارد استفاده کنید.

 

DateOperations9

 

The expression would be as follows:

 

DateOperations10

 

//If the leaving date is greater than or equal to the returning date, display an error message
if (<VacationRequest.LeavingDate>>=<VacationsRequest.ReturningDate>)
{
  CHelper.ThrowValidationError("Returning Date cannot be less than the Leaving Date");
}

 

4. قاعده را با کلیک روی OK ذخیره کنید.

اکنون می‌توان قاعده را تست کرد. اگر Leaving Date بزرگ‌تر از Returning Date وارد شود، پیام به شکل زیر نمایش داده می‌شود:

 

DateOperations19

 

Verify if a Date is a Working day

Suppose we wish to verify that the returning date in a trip is a working day. If it is not working day, a warning message must be displayed. Otherwise, the application can continue with the next activity.

 

1. در مرحله چهارم Bizagi Process Wizard گزینه Activity Actions را انتخاب کنید.

روی Taskی که این action در آن انجام می‌شود کلیک کنید و یک Expression ایجاد کنید.

 

DateOperations2

 

2. در یک ماژول expression از شرط If استفاده کنید. با استفاده از تابع IsWorkingDay که در دسته تابعی Date & Time قرار دارد، بررسی کنید تاریخ بازگشت یک تاریخ کاری است یا نه.

 

DateOperations32

 

تاریخ بازگشت مدل، یعنی ReturningDate، را به عنوان پارامتر ورودی استفاده کنید.

 

DateOperations33

 

تابع IsWorkingDay اگر تاریخ بازگشت روز کاری باشد True و در غیر این صورت False برمی‌گرداند.

 

DateOperations34

 

//Evaluate if the date is non-working
if (CHelper.IsWorkingDay(Me,<TravelRequest.ReturningDate>)==false)
{
  CHelper.ThrowValidationError("Returning day is non working.");
}

 

Click OK to save the changes.

 

Verify if a Date is a Working day for a specific user

In a Travel Request process, you can start a case in the Register Travel Request Task. You must enter the Departure Date. If the departure day is a not working day for the user, a validation must appear showing this situation. Otherwise, the application can continue with the next activity.

 

To know if the Departure Date is a working day for the user, you can use the CHelper.IsWorkingDayForUser function. This method returns true if a specific day is a working day according to the user's working schedule. Otherwise, returns false.

 

این تابع از دو پارامتر استفاده می‌کند:

 

•idUser: شناسه کاربری که روز کاری برای او ارزیابی می‌شود.

•dtDate: تاریخی که باید ارزیابی شود.

 

نحو صحیح به این صورت است:

CHelper.IsWorkingDayForUser(idUser,dtDate)

 

در On Exit مربوط به Task با نام Register Travel Request یک expression ایجاد کنید.

 

CHelper31

 

از تابع IsWorkingDayForUser استفاده کنید و Departure Date پرونده و Id ایجادکننده پرونده را به عنوان پارامترهای ورودی بدهید.

 

CHelper33

 

//Obtain creator id
var Creator=Me.Case.Creator.Id;
//Evaluate if the Depart date is working day for the user
if (CHelper.IsWorkingDayForUser(Creator,<TravelRequest.LeavingDate>)==false)
{
CHelper.ThrowValidationError("Depart day is non working.");
}

 

Verify if a date is a Working hour

فرض کنید فرایندی دارید که در آن لازم است یک جلسه، شامل تاریخ و ساعت مشخص، تنظیم شود.
می‌خواهید بررسی کنید تاریخی که مدیر انتخاب کرده، در Working time schema ایجادکننده پرونده، ساعت کاری او محسوب می‌شود یا نه.

 

برای اینکه بدانید Meeting hour ساعت کاری است یا نه، می‌توانید از تابع CHelper.IsWorkingMinute استفاده کنید. این متد اگر یک تاریخ مشخص در Working time schema سازمان قرار داشته باشد true و در غیر این صورت false برمی‌گرداند.

 

This function uses two parameters:

 

•Me

•dtDate: تاریخی که باید ارزیابی شود. این پارامتر هم روز تقویمی و هم زمان تعریف‌شده برای آن، یعنی ساعت روز، را در نظر می‌گیرد.

 
The syntax of the function is:

CHelper.IsWorkingMinute(Me,dtDate)

 

در On Exit مربوط به Taskی که جلسه در آن زمان‌بندی می‌شود یک expression ایجاد کنید.

 

CHelper59

 

از تابع IsWorkingMinute استفاده کنید و Meeting Date را به عنوان پارامتر ورودی بدهید. همچنین از یک اعتبارسنجی استفاده کنید تا در صورت معتبر نبودن تاریخ انتخاب‌شده، کاربر نهایی مطلع شود.

 

Chelper58

 

//Evaluate if the Meeting hour is working hour
if (CHelper.IsWorkingMinute(Me,<Project.InitialMeeting>)==false)
{
CHelper.ThrowValidationError("Meeting hour is non working.");
}

 

بررسی اینکه تاریخ برای یک کاربر مشخص در ساعت کاری است یا نه

فرض کنید فرایندی دارید که در آن مدیر کاربر باید جلسه‌ای با ایجادکننده پرونده تنظیم کند؛ یعنی یک تاریخ و ساعت مشخص.
می‌خواهید بررسی کنید تاریخی که مدیر انتخاب کرده، در Working time schema سازمان، برای ایجادکننده پرونده ساعت کاری محسوب می‌شود یا نه.

 

برای اینکه بدانید Meeting hour ساعت کاری است یا نه، می‌توانید از تابع CHelper.IsWorkingMinuteForUser استفاده کنید. این متد اگر یک تاریخ مشخص در Working time schema کاربر داده‌شده قرار داشته باشد true و در غیر این صورت false برمی‌گرداند.

 

This function uses two parameters:

 

•idUser: شناسه کاربری که دقیقه کاری برای او ارزیابی می‌شود.

•dtDate: تاریخی که باید ارزیابی شود. این پارامتر هم روز تقویمی و هم زمان تعریف‌شده برای آن، یعنی ساعت روز، را در نظر می‌گیرد.

 
The syntax of the function is:

 

CHelper.IsWorkingMinuteForUser(idUser,dtDate)

 

در On Exit مربوط به Taskی که جلسه در آن زمان‌بندی می‌شود یک expression ایجاد کنید.

 

CHelper96

 

از تابع IsWorkingMinuteForUser استفاده کنید و ایجادکننده کاربر پرونده و Meeting Date را به عنوان پارامترهای ورودی بدهید. همچنین از اعتبارسنجی استفاده کنید تا اگر تاریخ انتخاب‌شده گزینه معتبری نبود، کاربر نهایی مطلع شود.

 

CHelper97

 

//Obtain creator id
var Creator=Me.Case.Creator.Id;
//Evaluate if the Meeting hour is in requester's working hour
if (CHelper.IsWorkingMinuteForUser(Creator,<Project.ResultsMeeting>)==false)
{
  CHelper.ThrowValidationError("Meeting hour is not in requester's working time.");  
}

 

تفریق تاریخ‌ها؛ اختلاف بین تاریخ‌ها

مثال زیر نشان می‌دهد چگونه اختلاف بین دو تاریخ را به روز، سال، ساعت یا دقیقه پیدا کنید. تابع استفاده‌شده در این مثال اختلاف زمانی را فقط با در نظر گرفتن روزهای کاری برمی‌گرداند.

 

تعداد روزهای کاری در یک درخواست مرخصی با استفاده از تاریخ شروع مرخصی و تاریخ بازگشت محاسبه می‌شود.

 

1. On the fourth step of the Bizagi Process Wizard, select Activity Actions.

Taskی را که این action در آن انجام می‌شود انتخاب کنید و در On Save مربوط به Activity یک Expression ایجاد کنید.

 

DateOperations2

 

2. با کلیک روی Variables و انتخاب Edit، تاریخ شروع و پایان مرخصی درخواست‌شده را به عنوان متغیر تعریف کنید.

 

DateOperations6

 

3. متغیرها را با مقدار attributeهای متناظر مقداردهی اولیه کنید.

 

DateOperations11

 

4. اختلاف تاریخ در attributeی از مدل داده با نام NumberofBusinessDaysReq ذخیره می‌شود. برای انتخاب attribute از گزینه Data Model استفاده کنید.

 

5. برای محاسبه اختلاف تاریخ، تابع GetEffectiveDuration را فراخوانی کنید. این تابع در دسته Date & Time قرار دارد.

 

DateOperations12

 

پارامترهای این تابع عبارت‌اند از: یک Start date و یک End date.

در این مورد، این تاریخ‌ها همان متغیرهای StartDate و FinalDate هستند که بالاتر تعریف شدند.

 

DateOperations13

 

//Initialize variables
Start=<VacationRequest.LeavingDate>;
End=<VacationsRequest.ReturningDate>;
//Calculate days requested and store them in an attribute
<VacationRequest.NumberofBusinessDaysReques>=CHelper.getEffectiveDuration(Me,Start,End)/480;

 

توجه کنید که نتیجه expression بالا بر «480» تقسیم شده است.

این تابع اختلاف را بر حسب دقیقه برمی‌گرداند؛ بنابراین نتیجه باید به روز تبدیل شود. به‌صورت پیش‌فرض، working time schema روزهای کاری 8 ساعته دارد؛ یعنی 60 دقیقه در هر ساعت ضرب‌در 8 ساعت برابر 480 دقیقه. چون نتیجه را بر حسب روز نیاز داریم، باید آن را بر «480» تقسیم کنیم. برای مدت‌زمان بر حسب دقیقه، این تقسیم لازم نیست.

 

note_pin

این محاسبه با در نظر گرفتن organizational working time schema انجام می‌شود.
یعنی اختلاف تاریخ، از Start date تا End date، بازه‌های زمانی غیرکاری را لحاظ نمی‌کند.

 

پس از اینکه expression محاسبه را انجام داد، نتیجه در کنترل Number of business days requested قابل مشاهده است.

 

DateOperations20

 

تفریق تاریخ‌ها بر اساس Working time schema یک کاربر

مثال زیر نشان می‌دهد چگونه اختلاف بین دو تاریخ را با در نظر گرفتن Working time schema یک کاربر مشخص، بر حسب روز، سال، ساعت یا دقیقه پیدا کنید. تابع استفاده‌شده در این مثال اختلاف زمانی را فقط با در نظر گرفتن روزهای کاری همان کاربر برمی‌گرداند.

 

تعداد روزهای کاری در یک درخواست مرخصی با استفاده از تاریخ شروع مرخصی و تاریخ بازگشت محاسبه می‌شود.

 

1. On the fourth step of the Bizagi Process Wizard, select Activity Actions.

Select the Task where this action will be performed, and create an Expression On Save of the Activity.

 

DateOperations2

 

2. با کلیک روی Variables و انتخاب New، StartDate و FinalDate مربوط به مرخصی درخواست‌شده را به عنوان متغیر تعریف کنید.

 

DateOperations6

 

3. Initialize the variables with the values of the corresponding attributes.

 

DateOperations11

 

4. The date difference will be stored in an attribute of the data model called NumberofBusinessDaysReq. Use the Data Model option to select the attribute.

 

5. برای محاسبه اختلاف تاریخ، تابع GetEffectiveDurationForUser را فراخوانی کنید. این تابع در دسته Date & Time قرار دارد.

 

DateOperations35

 

پارامترهای این تابع عبارت‌اند از: id of the User، یک Start date و یک End date.

در این مورد، کاربر همان درخواست‌کننده مرخصی است. StartDate و FinalDate نیز همان متغیرهایی هستند که بالاتر تعریف شدند.

 

DateOperations36

 

//Initialize variables
Start=<VacationRequest.LeavingDate>;
End=<VacationsRequest.ReturningDate>;
//Calculate days requested and store them in an attribute
<VacationRequest.NumberofBusinessDaysReques> = CHelper.getEffectiveDurationForUser(<VacationRequest.Requester.idUser>, Start, End) / 480;

 

Note that the result of the expression above is divided by '480'.

The function returns the difference in minutes; therefore the result must be converted to days.  By default, the working time schema has 8 hour working days (60 min per hour * 8 hours = 480 min). Since our result is needed in days we must divide by '480'. For a duration in minutes the division is unnecessary.

 

note_pin

این محاسبه با در نظر گرفتن working time schema کاربر مشخص‌شده انجام می‌شود.
یعنی اختلاف تاریخ، از Start date تا End date، بازه‌های زمانی غیرکاری آن کاربر را لحاظ نمی‌کند.

 

Once the expression performs the calculation, it can be evidenced in the Number of business days requested control.

 

DateOperations20

 

افزودن تاریخ‌ها

فرض کنید آخرین activity در فرایند Vacation Request باید حداکثر تا پنج روز پس از بازگشت کارمند از مرخصی تکمیل شود.

برای محاسبه تاریخ سررسید تکمیل، باید پنج روز به مقدار attribute مرتبط در مدل داده اضافه شود.

از یک تابع .NET استفاده می‌کنیم که امکان افزودن روز به یک attribute یا متغیر را فراهم می‌کند:

 

ResultingDate=Date.AddDays(Value);

 

تابع‌های تاریخ دیگر در .NET امکان افزودن ساعت، ماه یا سال را فراهم می‌کنند:

 

•ResultingDate=Date.AddHours(Value);

•ResultingDate=Date.AddMonths(Value);

•ResultingDate=Date.AddYears(Value);

 

اگر می‌خواهید ساعت، روز، ماه یا سال را کم کنید، مقدار منفی اضافه کنید:

•ResultingDate=Date.AddDays(-Value);

 

برای تعیین مدت‌زمان Task، از تابع Estimated Solution date استفاده کنید.

 

1. In the fourth step of the Bizagi Process Wizard, select Activity Actions.

Click the Task where this action will be performed and create an Expression.

 

DateOperations18

 

2. دو متغیر از نوع date time تعریف کنید:

 

•ReturningDate: تاریخی را ذخیره می‌کند که کارمند از مرخصی بازمی‌گردد.

•FixedDate: تاریخ سررسید تکمیلِ محاسبه‌شده را ذخیره می‌کند و برای تنظیم Task Duration استفاده می‌شود.

 

DateOperations14

 

3. مدت‌زمان Task بر اساس attribute با نام ReturningDate در Data Model محاسبه می‌شود. مقدار این attribute در متغیر ReturningDate ذخیره می‌شود.

 

DateOperations15

 

4. تاریخ سررسید Task پنج روز پس از تاریخ بازگشت تنظیم می‌شود. این پنج روز به مقدار تاریخ به‌دست‌آمده که در متغیر ReturningDate ذخیره شده است اضافه می‌شود.

نتیجه به متغیر FixedDate اختصاص داده می‌شود.

 

DateOperations16

 

5. مدت‌زمان Task را با استفاده از تابع Estimated solution date که در دسته Date & Time قرار دارد تنظیم کنید.

 

تصویر بعدی expression را نشان می‌دهد:

 

DateOperations17

 

//Obtain attribute value in a date time variable
ReturningDate=<VacationRequest.ReturningDate>;
//Calculate due date and store it in a date time variable
FixedDate=ReturningDate.AddDays(5);

 
//Assign duration based on the calculated date.
Me.EstimatedSolutionDate=FixedDate;

 

Click OK to save the changes.

 

محاسبه تاریخ بر اساس Working Time Schema

فرض کنید باید یک تاریخ را بر اساس یک تاریخ داده‌شده به‌علاوه یک بازه زمانی محاسبه کنید. این کار می‌تواند با در نظر گرفتن Organizational Working time schema انجام شود تا در افزودن زمان، بازه‌های غیرکاری لحاظ نشوند.

 

آخرین activity در فرایند Vacation Request باید حداکثر ظرف پنج روز کاری پس از بازگشت کارمند از مرخصی تکمیل شود.

 

از تابع getEstimatedDate استفاده می‌کنیم که با دریافت یک تاریخ اولیه، ذخیره‌شده در متغیر dtFromDate، و یک بازه زمانی، پنج روز ذخیره‌شده در متغیر iDuration، و با در نظر گرفتن Working Time Schema یک تاریخ برمی‌گرداند. مدت‌زمان این تابع همیشه باید بر حسب دقیقه برگردانده شود.

 

1. مراحل 1 تا 4 مثال قبلی را دنبال کنید.

 

2. برای محاسبه تاریخ جدید، از تابع getEstimatedDate استفاده کنید که در دسته تابعی Date & Time قرار دارد.

 

DateOperations31

 

DateOperations29

 

نحو تابع به این صورت است:

 

CHelper.getEstimatedDate(Me,dtFromDate,iDuration)

 

note_pin

این تابع تعطیلات پیکربندی‌شده برای سازمان را در نظر نمی‌گیرد. اگر نیازمندی کسب‌وکار شما لازم دارد تعطیلات هم لحاظ شوند، می‌توانید از تابع getSolutionDate استفاده کنید.

 

هر دو تابع attributeهای یکسانی دارند و نحو تابع به این صورت است:

 

CHelper.getSolutionDate(Me,dtFromDate,iDuration)

 

توجه کنید که expression بالا روزها را به دقیقه تبدیل می‌کند.

این تبدیل لازم است چون پارامتر iDuration مدت‌زمان را بر حسب دقیقه انتظار دارد. به‌صورت پیش‌فرض، Working time schema روزهای کاری 8 ساعته دارد. مجموع دقیقه‌ها در پنج روز با این فرمول محاسبه می‌شود: 60 دقیقه در یک ساعت ضرب‌در 8 ساعت در یک روز، سپس ضرب‌در 5 روز، یعنی 5*8*60.

 

در پایان، مدت‌زمان task را اختصاص دهید.

 

DateOperations30

 

//Obtain attribute value in a date time variable
ReturningDate=<VacationRequest.ReturningDate>;
//Calculate due date and store it in a date time variable

// if you need to include the organizations's holidays use:

// FixedDate=CHelper.getSolutionDate(Me,ReturningDate,5*8*60);
FixedDate=CHelper.getEstimatedDate(Me,ReturningDate,5*8*60);
//Assign duration based on the calculated date.
Me.EstimatedSolutionDate=FixedDate;

 

محاسبه تاریخ بر اساس Working Time Schema یک کاربر مشخص

فرض کنید باید Solution date را در یک فرایند داخلی Claims & Complaints Management محاسبه کنید؛ کاربری که برای حل مسئله تعیین شده است طبق Working time schema خودش شش روز فرصت دارد پاسخ را ارسال کند. درخواست‌کننده و کاربر مسئول می‌توانند دو Working Time Schema متفاوت داشته باشند، چون شرکت دو بخش در دو کشور متفاوت دارد و هر کاربر ممکن است به یکی از آن‌ها تعلق داشته باشد.

 

برای به‌دست‌آوردن Answer Date می‌توانید از تابع CHelper.getEstimatedDateForUser استفاده کنید. این متد با دریافت یک تاریخ شروع و تعداد دقیقه‌ها، تاریخ پایان را برمی‌گرداند. این محاسبه با افزودن یا کم کردن تعداد دقیقه‌ها از پارامتر تاریخ شروع و بر اساس برنامه زمان کاری تعریف‌شده برای یک کاربر مشخص انجام می‌شود.

 

این تابع از سه پارامتر استفاده می‌کند:

 

•idUser: شناسه کاربری که Working time schema برای او ارزیابی می‌شود.

•dtFromDate: تاریخی که تعداد دقیقه‌های داده‌شده باید به آن اضافه یا از آن کم شود.

•iDuration: تعداد دقیقه‌هایی که باید به Start date اضافه یا از آن کم شود.

 

The correct syntax is:

CHelper.getEstimatedDateForUser(idUser,dtFromDate,iDuration)

 

note_pin

این تابع تعطیلات پیکربندی‌شده برای کاربر مشخص را در نظر نمی‌گیرد. اگر نیازمندی کسب‌وکار شما لازم دارد آن‌ها هم لحاظ شوند، می‌توانید از تابع getSolutionDateForUser استفاده کنید.

 

هر دو تابع attributeهای یکسانی دارند و نحو تابع به این صورت است:

 

CHelper.getSolutionDateForUser(idUser,dtFromDate,iDuration)

 

در On Exit مربوط به Task با نام Receive Request یک expression ایجاد کنید. expression جدید آخرین expression خواهد بود، چون Assigned User در expressionهای قبلی تنظیم می‌شود.

 

CHelper98

 

از تابع getEstimatedDateForUser استفاده کنید و Id کاربر مسئول، Opening Date و شش روزِ نمایش‌داده‌شده بر حسب دقیقه را به عنوان پارامترهای ورودی بدهید؛ یعنی 6*8*60. نتیجه را به attribute متناظر در Data model خود اضافه کنید.

 

CHelper99

 

// Obtain the assigned user
var AssignedUser = <ClaimandComplaintRequest.Person.Id>;
// Calculate the Due date from the opening date adding 6 x 8 x 60 minutes

// if you need to include the user's holidays use:

// var AnswerDate = CHelper.getSolutionDateForUser(AssignedUser, <ClaimandComplaintRequest.OpeningDate>, 6*8*60);
var AnswerDate = CHelper.getEstimatedDateForUser(AssignedUser, <ClaimandComplaintRequest.OpeningDate>, 6*8*60);
// Set the Due date with function result
<ClaimandComplaintRequest.DueDate> = AnswerDate;

 

محاسبه سن

می‌توانید روز، ماه و سال مشخص یک تاریخ ذخیره‌شده در attribute را به دست آورید. این کار در موقعیت‌هایی مفید است که باید محاسباتی بر اساس چنین اطلاعات دقیقی انجام دهید؛ برای مثال محاسبه سن یک شخص بر اساس تاریخ تولد او.

 

فرض کنید باید سن کارمندی را که درخواست مرخصی داده است، بر اساس تاریخ تولد ذخیره‌شده او در entity با نام Employee محاسبه کنید.

 

DateOperations21

 

1. در activityی که می‌خواهید سن کارمند را بر حسب سال محاسبه کنید، یک expression تعریف کنید.

 

DateOperations23

 

2. در Expressions Editor، چهار متغیر را مطابق تصویر زیر اضافه کنید:

 

DateOperations22

 

3. مقدار ذخیره‌شده در attribute با نام DateofBirth را به متغیر BirthDate اختصاص دهید.

به همین ترتیب تاریخ جاری را به متغیر TodayDate اختصاص دهید.

 

DateOperations24

 

4. محاسبه سن به بخش سالِ تاریخ تولد و تاریخ امروز در قالب عددی نیاز دارد.

هر تاریخ را به سه بخش جداگانه سال، ماه و روز تفکیک کنید.

بخش سال هر تاریخ را به ترتیب به متغیرهای YearToday، یعنی سال تاریخ امروز، و YearBirth، یعنی سال تاریخ تولد، اختصاص دهید.

 

DateOperations25

 

DateOperations26

 

دو مقدار سال را مطابق تصویر زیر از هم کم کنید.

 

DateOperations27

 

//Inititalize variables
BirthDate=<VacationRequest.Employee.DateofBirth>;
Todaydate=DateTime.Today;
 
//Separate Components
BirthDate=new DateTime(BirthDate.Year,BirthDate.Month,BirthDate.Day);
TodayDate=new DateTime(TodayDate.Year,TodayDate.Month,TodayDate.Day);
 
//Assign years
YearBirth=BirthDate.Year;
YearToday=TodayDate.Year;
 
//Calculate Age
<VacationRequest.Employee.Age>=YearToday-YearBirth;

 

Click OK to save the changes.

 

6. اگر می‌خواهید بررسی کنید که تاریخ امروز پس از تاریخ تولد قرار دارد یا نه، می‌توانید مطابق شکل زیر یک شرط اضافه کنید.

 

DateOperations28

 

//Validate Birth Date
if (BirthDate<TodayDate)
{
//Calculate Age
  <VacationRequest.Employee.Age>=YearToday-YearBirth;
}

 

قالب‌بندی تاریخ

وقتی لازم است تاریخ‌های یک attribute از نوع Date را در یک قالب رشته‌ای مشخص، مانند MM/dd/yyyy HH:mm:ss، استفاده کنید، می‌توانید از تابع CHelper.FormatDate استفاده کنید. این متد با دریافت تاریخ و نمونه قالب، تاریخ را در قالب رشته‌ای برمی‌گرداند. این قابلیت به‌ویژه زمانی مفید است که می‌خواهید از entityهای غیرمرتبط با مدل داده داده بگیرید.

 

این تابع دو پارامتر دریافت می‌کند:

 

•oDate: attribute تاریخ که باید قالب‌بندی شود.

•sFormat: این پارامتر شامل یک الگوی قالب استاندارد یا سفارشی است که قالب موردنیاز را تعریف می‌کند. برای اطلاعات بیشتر درباره قالب‌های استاندارد، این لینک را ببینید.

 

The syntax to be used is:

 

CHelper.FormatDate(oDate, sFormat)

 

فرض کنید لازم است Request Date را طوری قالب‌بندی کنید که با الگوی Wednesday, November 1, 2017 11:35 AM مطابق باشد.

 

1. در activityی که می‌خواهید Date را قالب‌بندی کنید، یک expression تعریف کنید.

 

DateOperations43

 

2. در Expressions Editor، متغیرها را مطابق تصویر زیر اضافه کنید:

 

DateOperations44

 

3. مقدار ذخیره‌شده در attribute با نام VacationRequest.RequestDate را به متغیر RequestDate اختصاص دهید.

 

DateOperations45

 

4. تابع را با الگوی dddd, MMMM dd, yyyy hh:mm tt فراخوانی کنید؛ این الگو با قالب موردنیاز مطابقت دارد.

در پایان، نتیجه را به attribute متناظر در Data Model خود اختصاص دهید.

 

DateOperations46

 

//Inititalize variables

RequestDate = <VacationRequest.RequestDate>;

 

//Format Date

FormatedDate = CHelper.FormatDate(RequestDate, "dddd, MMMM dd, yyyy hh:mm tt");

<VacationRequest.RequestDateFormated> = FormatedDate;

 

Click OK to save the changes.

 

متدهای دیگر

Bizagi بر پایه چارچوب Microsoft .NET ساخته شده است. بنابراین برخی از متدهای موجود در این چارچوب را می‌توان در Bizagi استفاده کرد. برای عملیات تاریخ می‌توانید هر یک از متدهای زیر را در expressionهای خود به کار ببرید:

 

•Add

•AddDays

•AddHours

•Addmiliseconds

•AddMinutes

•AddMonths

•AddSeconds

•AddTicks

•AddYears

•Compare

•CompareTo

•DaysInMonth

•Equals

•FromBinary

•FromFileTime

•FromFileTimeUtc

•FromOADate

•GetDateTimeFormats

•GetHasCode

•GetTypeCode

•IsLeapYear

•Parse

•ParseExact

•SpecifyKind

•Subtract

•ToBinary

•ToFileTime

•ToFileTimeUtc

•ToLocalTime

•ToLongDateString

•ToLongTimeString

•ToOADate

•ToShortDateString

•ToString

•ToUniversalTime

•TryFormat

•TryParse

•TryParseExact

 

همه این متدها باید با نحو زیر استفاده شوند:

 

date.method

 

برای مثال:

//Date Time variable
var RequestDate= <CreditRequest.Customer.RequestDate>;
//Method
var NewRequestDate= RequestDate.AddMinutes(5);

 

note_pin

همه متدها به بزرگی و کوچکی حروف حساس هستند. به حروف بزرگ و کوچک در نام هر متد دقت کنید.

 

برای اطلاعات بیشتر درباره این متدها، به مستندات Microsoft .NET نسخه 5.0 مراجعه کنید:

 

https://docs.microsoft.com/en-us/dotnet/api/system.datetime?view=net-5.0#methods


Last Updated 5/7/2025 1:29:22 PM