طرح مسئله:فرض کنید در فرم یک فرایند یک جدول با ستونی از نوع سمت سازمانی دیدگاه وجود دارد و تکمیلکننده فرم سمتهای مورد نظر خود را در سطرهای این جدول اضافه میکند (شکل 1). نیازمندیم امکان جستجو بر اساس نام کامل متصدیان سمتهای انتخاب شده در جدول را در آرشیو فعالیتها و کارتابل برای کاربران فراهم نماییم.
شکل 1
یک راهکار: پس از فعالیت کاربری که در فرم آن داخل جدول سمتها وارد میشوند یک فعالیت کدنویسی قرار داده میشود (شکل 2).
شکل 2
در فعالیت کدنویسی کد زیر قرار میگیرد:
;using System
;using System.Data
;using System.Data.SqlClient
;using Chargoon.Didgah.BPMS.CommonApi
namespace Chargoon.Didgah.BPMS.Runtime
}
public class ScriptTask : IScriptTask
}
public IExecution Execution { get; set; }
()public void Execute
}
;””=string Descripton
using (SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”)))
}
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
cmd.CommandText = @”SELECT
STRING_AGG(CAST(u.FullName as nvarchar(max)),’,’)+:’سمت ها’N
) from
SELECT
Per.FullName
FROM [Didgah_BPMS].[dbo].[ddm_DEtable_Table1Junction] as DEtable
inner join [Didgah_Common].[dbo].[com_Staff] S on S.Guid=DEtable.ForeignKey
inner join [Didgah_BPMS].[dbo].[ddm_DescriptioninsidetableJunction] Descrip on Descrip.[ForeignKey]=DEtable.PrimaryKey
inner join Didgah_PersonnelSystem].[dbo].[prs_Personnel] Per on Per.StaffId=S.Id
where DEtable.Deleted=0 and DEtable.ForeignKey is not null and DEtable.RelationGuid=’CF0078C4-‘7A95-4A05-AE3A-369D46AC00A9
;”and Descrip.[PrimaryKey]=@businesskey and _baseID IS NULL and Per.Active = 1) u
;cmd.Parameters.AddWithValue(“@businesskey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;()Descripton = cmd.ExecuteScalar().ToString
;()conn.Close
{
{
;Execution.SetVariable(“Descripton”, Descripton)
{
{
{
کد ارائه شده عملیات زیر را انجام میدهد:
- تعریف یک متغیر از نوع رشته جهت ذخیره نتیجه کوئری استفاده شده در کد.
- تعریف یک رشته اتصال جهت اجرای کوئری استفاده شده در کد در پایگاه داده دیدگاه.
- کوئری مورد استفاده نام کامل متصدیان سمتهای انتخاب شده در سطرهای جدول را با دستور String AGG به صورت یک رشته تجمیع شده انتخاب میکند. جهت انتخاب نام کامل که در پرونده پرسنلی نگهداری میشود بین جدول Junction جدول روی فرم با جدول Staff از پایگاه داده Didgah_Common بر اساس ForeignKey از جدول Junction جدول روی فرم و Guid از جدول Staff و بین جدول Staff و جدول prs_Personnel از پایگاه داده Didgah_PersonnelSystem بر اساس ستون Id از جدول Staff و ستون StaffId از جدول prs_Personnel، و بین جدول Junction جدول روی فرم و جدول Junction مدل دادهای فرایند بر اساس ستون PrimaryKey از جدول Junction جدول روی فرم و ستون ForeignKey از جدول Junction مدل دادهای Join زده میشود. جهت فیلتر کردن خروجی کوئری به ستون از نوع سمت سازمانی مورد نظر در جدول مقدار RelationGuid را با Guid اختصاص یافته به رابطه بین ستون سمت سازمانی دیدگاه مورد استفاده و جدول فرم فیلتر میکنیم. این مقدار همان ستون Guid در جدول Relations در پایگاه داده Didgah_DynamicDataModel است. جهت نمایش رکوردهای مربوط به اجرای جاری فرایند مقدار PrimaryKey جدول Junction مدل دادهای فرایند را برابر با شناسه BusinessKey نمونه فرایند قرار میدهیم. این مقدار با دستور AddWithValue و متغیر عمومی مربوطه به کوئری منتقل شده است. جهت در نظر گرفته نشدن سطوری از جدول که ممکن است توسط کاربر حذف شده باشند کوئری بر اساس Deleted=0 فیلتر شده است. جهت نمایش رکوردهای فعال سمت انتخاب شده در جدول در نرم افزار پرسنلی کوئری بر اساس Active=1 و baseID is NULL فیلتر شده است.
- نتیجه کوئری با استفاده از دستور ExecuteScalar در داخل متغیر از نوع رشته پیشتر تعریف شده ذخیره شده است.
- در نهایت جهت استفاده از متغیر در فرایند با دستور SetVariable مقدار ذخیره شده در متغیر پیشتر ذخیره شده را داخل یک متغیر از نوع رشته ذخیره مینماییم.
سپس لازم است تا در تب ورودی/خروجی فعالیت کدنویسی، در قسمت پارامترهای خروجی، یک خروجی از نوع رشته و با نام پارامتری که در فعالیت کدنویسی به آن مقداردهی کردیم ایجاد نماییم (شکل 3).
شکل 3
|بر روی فعالیت کاربری که میبایست توضیحات آن بر اساس این خروجی تکمیل شود، پس از وارد نمودن عبارت ثابت (در صورت نیاز)، در داخل [ ] پارامتر خروجی گرفته شده از فعالیت کدنویسی قرار داده میشود (شکل 4).
شکل 4
پس از اجرای فرایند، همانطور که در تصویر مشاهده مینمایید در داخل توضیحات فعالیت کاربر اسامی قرار گرفته در داخل جدول نمایش داده میشود (شکل 5).
شکل 5