شرح صورت مسئلهفرض کنید در یک فرایند، با توجه به اقدام کننده یک فعالیت کاربر(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;
}
}
}