دمو تماس پورتال

هر فرد در بازه زمانی مشخص فقط یک بار فرآیند را شروع کند

هر فرد در بازه زمانی مشخص فقط یک بار فرآیند را شروع کند

شرح صورت مسئله: فرض کنید در یک فرآیند نیاز است هر فرد در یک بازه زمانی مشخص و تعداد مشخصی فرآیند را شروع کند:

در همان ابتدای فرآیند بعد از رویداد شروع با استفاده از کد زیر بررسی می‌‌کنم که اگر زمان شروع فرآیند در بازه زمانی مورد نظر است (دراین مثال بازه ۱ ساله) و همچنین فرد شروع‌کننده فرآیند هنوز به تعداد مدنظر ما فرایند را شروع نکرده است. (در این مثال 5)، آن‌‌گاه فرآیند ادامه پیدا کند و در غیر این صورت فرآیند خاتمه پیدا کند.

کد زیر را بر روی مسیر ترتیبی همانند تصویر زیر می‌نویسیم.

بازه زمانی مشخص

و برای مسیر خاتمه مانند تصویر زیر روی مسیر ترتیبی کلیک می‌کنیم و با انتخاب تغییر نوع، مسیر  پیش‌فرض را انتخاب می‌کنیم تا در صورتی که فرآیند از مسیر قبلی نرود از این مسیر برود و فرایند خاتمه یابد.

شروع فرآیند در بازه زمانی مشخص

using System;

using System.Data;

using System.Data.SqlClient;

using Chargoon.Didgah.BPMS.CommonApi;

using System.Globalization;

namespace Chargoon.Didgah.BPMS.Runtime

{

public class ConditionalFlow : IConditionalFlow

{

public IExecution Execution { get; set; }

public bool Evaluate()

{

// تعریف یک متغییر عدد صحیح به نام NumberExecuted که در آن تعداد فرایندهای اجراشده توسط این شروع‌کننده را می‌ریزیم.//

int NumberExecuted=0;

// اتصال به دیتابیس. BPMSConnection نام رشته اتصال است.//

SqlConnection conn=new

SqlConnection(Execution.GetConnectionString(“BPMSConnection”));

SqlCommand cmd = new SqlCommand();

cmd.Connection = conn;

cmd.CommandType = CommandType.Text;

// در کوئری SQL  به جای X باید ProcessId فرایند را درج کنیم که از دیتابیس آن را دریافت می‌کنیم

//و بعد از محاسبه مقدار @ Permitted به جای Y تعداد مجاز مدنظر را درج می‌کنیم (در این مثال 5) و بررسی می‌کنیم اگر مقدار @ Permitted

//بیشتر و یا مساوی با Y باشد مقدار متغیر @result را 1 و در غیر این صورت 2 درج می‌کنیم.//

cmd.CommandText =@”

DECLARE @result int ,@ Permitted int= (SELECT COUNT([StarterStaffId])

FROM [Didgah_BPMS].[dbo].[bpm_ProcessInstances]

WHERE [StarterStaffId] = ANY (SELECT [StarterStaffId]  FROM

[Didgah_BPMS].[dbo].[bpm_ProcessInstances]

WHERE [ProcessId]=X AND [StarterStaffId]= @StaffID))

if(@Permitted >= Y)

SET @result = 1

else

SET @result = 2

select  @result” ;

//متغیر @StaffID را در این بخش مقداردهی می‌کنیم. برای مثال در این بخش ___StarterStaffId که مقدار StaffId فرد شروع‌کننده است را درون این متغیر می‌ریزیم.//

cmd1.Parameters.AddWithValue(“@StaffID”,Execution.IntegerValue(“___StarterStaffId”));

conn.Open();

NumberExecuted = Convert.ToInt32(cmd.ExecuteScalar());

conn.Close();

}

}

// حالا برای بررسی اینکه در بازه زمانی مورد نظر باشیم (1ساله)، تاریخ ابتدا و انتها بازه زمانی مورد نظر را به ترتیب درون متغییرهای date1//

//و date2 می‌ریزیم و تاریخ لحظه را درون متغییر date3 درج می‌کنیم و در آخر نتیجه مقایسه تاریخ‌ها را درون متغییر های result1//

//و result2 می‌ریزیم .//

DateTime date1= new DateTime (2021,3,20);

DateTime date2 = new DateTime(2022,3,19);

DateTime date3 = DateTime.Now;

int result1 = DateTime.Compare(dt1, dt3);

int result2 = DateTime.Compare(dt2, dt3);

// در نهایت بررسی می‌کنیم اگر زمان در بازه زمانی موردنظر باشد و هنوز به تعداد موردنظر نرسیده باشیم فرایند ادامه پیدا کند.//

if (result2 > 0  &&  result1 < 0  && NumberExecuted == 0 )

return true;

else

return false;

}

}

}

نظرات کاربران 0 نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

نوزده + 11 =