طرح مسئله: فرض کنید در یک فرایند، با توجه به اقدامکننده یک فعالیت کاربر (UserTask)، ادامه مسیر فرایند و اقدامکننده فعالیت کاربر (UserTask)، بعدی مشخص میشود.
برای مثال اگر اقدامکننده فعالیت ثبت درخواست، کارمند باشد، اقدامکننده فعالیت بررسی درخواست توسط مدیر انجام میشود و اگر اقدامکننده فعالیت ثبت درخواست، مدیر باشد اقدامکننده فعالیت بررسی درخواست باید توسط مدیر بالاتر انجام شود.
برای تشخیص این مورد میتوان از کد ذکرشده در ادامه در در قسمت کدنویسی درگاه انحصاری (Exclusive Gateway) استفاده کرد.
در واقع ما با بررسی رابطه سازمانی مربوط به فرایند میتوانیم این مسیر را مشخص کنیم.
ابتدا باید طبق تصاویر، از دیتابیس Common، جدول [Associations]، Guid رابطه سازمانی مورد نظر را بیابیم و آن را در ‘AssociationGuid’ جایگذاری کنیم و از جدول [AssociationDetails]، اولین SubjectStaffGuid را در ‘ SubjectStaffGuid ‘ جایگذاری کنیم.
AssociationGuid
SubjectStaffGuid
مطابق تصاویر بالا ،2 تا Guid خواهیم داشت که باید داخل ” ” قرار بگیرند.
مثال : ‘A1E20762-951F-4BED-96BD-88EAB1230253’
using System;
using System.Data;
using System.Data.SqlClient;
using Chargoon.Didgah.BPMS.CommonApi;
namespace Chargoon.Didgah.BPMS.Runtime
{ public class ConditionalFlow : IConditionalFlow
{
public IExecution Execution { get; set; }
public bool Evaluate()
{
//تعریف متغییر result که قرار است در آن نتیجه به صورت 0 و 1 ریخته شود.//
int result =0;
// اتصال به دیتا بیس ، BPMS رشته اتصال میباشد.//
SqlConnection sqlConnection = new SqlConnection(Execution.GetConnectionString(“BPMS”));
using (SqlCommand abc = new SqlCommand())
{ abc.Connection = sqlConnection;
abc.CommandType = CommandType.Text;
abc.CommandText = @”DECLARE @result int
if ((SELECT SubjectStaffGuid FROM Didgah_Common.dbo.com_AssociationDetails
WHERE AssociationGuid = ‘AssociationGuid’ AND
ObjectStaffGuid = (SELECT Guid FROM Didgah_Common.dbo.com_Staff where id = @StaffID))= ‘SubjectStaffGuid’)
SET @result = 1
else
SET @result = 0
SELECT @result”;
___LastIntractorStaffId// متغییر عمومی هست که در آن Id آخرین اقدامکننده فرایند قرار میگیرد.
abc.Parameters.AddWithValue(“@StaffID”, Execution.IntegerValue(“___LastInteractorStaffId”));
sqlConnection.Open();
// خروجی کوئری را تبدیل به نوع داده عدد صحیح میکنیم و درون resultقرار میدهیم .//
result = Convert.ToInt32(abc.ExecuteScalar());
sqlConnection.Close();
}
//طبق کد، 0 بودن به معنی کارمند بودن متقاضی و 1 بودن به معنی مدیر بودن متقاضی است
//بنابراین این کد برای مسیری که متقاضی کارمند است میباشد .
if (result == 0)
return true;
else
return false;
}
}
}