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

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

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

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