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

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

در همان ابتدای فرآیند بعد از رویداد شروع با استفاده از کد زیر بررسی می‌‌کنم که اگر زمان شروع فرآیند در بازه زمانی مورد نظر است (دراین مثال بازه ۱ ساله) و همچنین فرد شروع‌کننده فرآیند هنوز به تعداد مدنظر ما فرایند را شروع نکرده است. (در این مثال 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 نظر

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

چهارده − 10 =