انتخاب مسیر فرایند بر اساس رابطه سازمانی

طرح مسئله:فرض کنید در فرایند نیاز است درخواست‌­ها توسط مدیریت میانی و مدیریت ارشد مورد بررسی قرار گیرند. اما در صورت ثبت یک درخواست توسط مدیر میانی، با توجه به اینکه درخواست تنها توسط مدیریت ارشد بررسی می­‌شود، نیازی به اجرای مرحله بررسی دوم مدیریتی نیست.

یک راه‌حل: در ابتدا در مرکز مدیریت، از منوی روابط سازمانی، رابطه سازمانی مورد نظر را ایجاد می‌کنیم (شکل 1).

شکل 1

در تعریف رابطه سازمانی لازم است به این نکته توجه داشت که یک سمت مانند سمت کارشناس چارگون (یک سمت بدون استفاده در فرایند) در بالاترین سطح در رابطه سازمانی قرار داده شود و دیگر سمت‌­های مورد نظر طبق سلسله مراتب مورد نیاز زیر مجموعه این سمت قرار گیرند (شکل 2).

شکل 2

در فرایند ایجاد شده در قسمت اقدام‌کننده فعالیت بررسی مدیر، از رابطه سازمانی ایجاد شده استفاده می‌کنیم (شکل 3).

شکل 3

در نظر داریم هنگام رسیدن فرایند به درگاه، در صورتی که اقدام‌کننده فعالیت بررسی مدیر، آخرین سمت قبل از سمت کارشناس چارگون در رابطه سازمانی باشد، فرایند می­‌بایست از مسیر خیر ادامه پیدا کند (شکل 4).

شکل 4

به این منظور بر روی مسیر خیر در قسمت نوع شرط، کدنویسی را انتخاب می‌نماییم (شکل 5).

شکل 5

|در قسمت کدنویسی، کد ارائه شده را وارد و ذخیره می‌کنیم.

;using System

;using Chargoon.Didgah.BPMS.CommonApi

;using System.Data

;using System.Data.SqlClient

namespace Chargoon.Didgah.BPMS.Runtime

}

    public class ConditionalFlow : IConditionalFlow

}

public IExecution Execution { get; set; }

()public bool Evaluate

}

;int ManagerStaffId

;SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”))

            using (SqlCommand cmd = new SqlCommand())

}

;cmd.Connection = conn

                cmd.CommandType = CommandType.Text;

                cmd.CommandText = @”–declare @staffid int=1,@guid uniqueidentifier

select @guid=guid from [Didgah_Common].[dbo].[com_Staff]

where id =@staffid

select @guid=SubjectStaffGuid from [Didgah_Common].[dbo].[com_AssociationDetails]

where AssociationGuid=’E8CBA93E-A1BD-4E91-882F-51197600A352′ and ObjectStaffGuid=@guid

select isnull(id,0) as id from [Didgah_Common].[dbo].[com_Staff]

;”where guid=isnull(@guid,’04DB9489-43AF-4AF0-A18F-822499BE2154′)

;cmd.Parameters.AddWithValue(“@staffid”, Execution.IntegerValue(“___LastIntractorStaffId”))

;cmd.Parameters.AddWithValue(“@guid”, Guid.Empty)

;()conn.Open

;ManagerStaffId = Int32.Parse(cmd.ExecuteScalar().ToString())

;()conn.Close

{

            if (ManagerStaffId == 23161)

}

;return true

{

else

;return false

{

{

{

کد ارائه شده عملیات زیر را انجام می­‌دهد:

  • تعریف یک متغیر از نوع عدد صحیح جهت نگهداری مقدار خروجی کوئری.
  • تعریف یک رشته اتصال جهت اجرای کوئری استفاده شده در کد.
  • کوئری استفاده شده در کد شناسه سمت بالادستی آخرین اقدام‌کننده فرایند را (اقدام‌کننده فعالیت کاربر بررسی مدیر) از رابطه سازمانی پیشتر ایجاد شده استخراج می‌­کند. این شناسه همان StaffId است که برابر با ستون Id در جدول Staff در پایگاه داده Didgah_Common می‌­باشد. شناسه آخرین اقدام‌کننده فرایند به صورت پارامتر @StaffId در کوئری قرار گرفته است که مقدار آن با دستور AddWithValue و متغیر عمومی مربوطه به کوئری فرستاده می­‌شود. رابطه سازمانی پیشتر ایجاد شده با شناسه AssociationGuid مشخص می­‌شود که از ستون Guid در جدول Associations در پایگاه داده Didgah_Common برای رابطه سازمانی پیشتر ایجاد شده استخراج شده است.
  • خروجی کوئری که شناسه StaffId سمت بالادستی آخرین اقدام‌کننده در فرایند است با دستور ExecuteScalar در متغیر عدد صحیح پیشتر تعریف شده ذخیره می‌­شود.
  • در نهایت در یک دستور If مقدار این متغیر را با شناسه StaffId بالاترین سمت قرار گرفته در رابطه سازمانی مورد نظر (در این مثال کارشناس چارگون) مقایسه می‌کنیم. در صورت برابر بودن این مقادیر نتیجه true برگشت خواهد خورد که منجر به ادامه فرایند از مسیر خیر می­‌شود و در غیر این صورت false که باعث ادامه فرایند از مسیر بلی می­‌شود. شناسه StaffId سمت مورد استفاده در بالاترین سطح رابطه سازمانی از ستون Id جدول Staff در پایگاه داده Didgah_Common استخراج شده است.

پس از اجرای فرایند در صورتی که اقدام‌کننده فعالیت بررسی مدیر، زیرمجموعه مستقیم سمت کارشناس چارگون در رابطه سازمانی باشد، فرایند بدون انجام فعالیت بررسی مدیر بالاتر، از مسیر خیر ادامه پیدا خواهد کرد (شکل 6).

شکل 6

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

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

1 + 19 =