بررسی مسئله فراخوانی اطلاعات از مدل دادهای پایه و ارائه یک راهحل برای آن
طرح مسئله: فرض کنید در فرآیندی باید با انتخاب یکی از گزینههای فیلد رابطه از نوع مدل دادهای پایه که به صورت لیست کشویی بر روی فرم قرار گرفته است، اطلاعات ستونهای مختلف ایجادشده در مدل اطلاعاتی پایه متناظر با گزینه انتخابشده توسط کاربر در فیلدهای مدل دادهای فرایند که متناظر با ستونهای مدل دادهای پایه ایجادشده و روی فرم قرار گرفتهاند مقداردهی شود.
یک راهحل: راهکار مناسب برای حل مسئله این است که مطابق تصویر شماره 1 پس از فعالیت کاربری که کاربر در آن مقدار مورد نظر خود را از بین گزینههای فیلد رابطه انتخاب کرده است، یک فعالیت کدنویسی برای فراخوانی اطلاعات مورد نظر از مدل دادهای پایه و مقداردهی به فیلدهای مدل دادهای فرایند قرار دهیم.
تصویر شماره 1-محل قرار گرفتن فعالیت کدنویسی
همانطور که در تصویر شماره 2 مشاهده میشود، در مرحله ثبت درخواست پس از انتخاب نام فروشنده در فیلد مربوطه باید دیگر فیلدهای قرار گرفته روی فرم که شامل مشخصات فروشنده انتخاب هستند، بهصورت سیستمی مقداردهی شوند:
تصویر شماره 2-نمونه فرم صورت مسئله
فیلد مورد نظر در این فرم از جنس رابطه (مدل دادهای پایه) است. کد قرارگرفته در فعالیت کدنویسی “فراخوانی اطلاعات از مدل دادهای پایه” موارد زیر را انجام میدهد:
- ستونهای مورد نظر از مدل دادهای پایه را با دستور select انتخاب میکنیم.
- سپس با جدول Junction دیتا مدل اصلی فرایند Join میزنیم که ForeignKey آن با Guid رکورد مورد نظر در دیتامدل مدل دادهای پایه برابر است. رکورد مربوط به نمونه فرآیندی که در جریان است با استفاده از شناسه BusinessKey و رکوردی که مربوط به رابطه مدل دادهای پایه است با استفاده از RelationGuid (استخراج شده از جدول Relations در پایگاه داده Didgah_DynamicDataModel) فیلتر میشود.
- با استفاده از دستور DataReader ستونهای انتخابشده توسط کوئری را جهت مقداردهی به فیلدهای مدل دادهای فرایند به دست میآوریم.
- با استفاده از دستور SetVariable و مقادیر بهدست آمده از پایگاه داده فیلدهای مدل دادهای فرایند را مقداردهی میکنیم.
در زیر نمونه کدی که عملیات شرح داده شده را انجام میدهد، ارائه شده است:
;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 SellerName
;”” = string SellerAccountNmber
;”” = string SellerNumberSHeba
;”” = string SellerCardNumber
;”” = string SellerBank
; “” = string SellerAccountName
;”” = string SellerPhoneNumber
;”” = string SellerNationalCode
;”” = string SellerNationalID
using (SqlConnection conn = new
(SqlConnection (Execution.GetConnectionString(“BPMS”))
}
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
cmd.CommandText = @”select
[SellerName]
[SellerAccountNmber],
[SellerNumberSHeba],
[SellerCardNumber],
[SellerBank],
[SellerAccountName],
[SellerPhoneNumber],
[SellerNationalCode],
[SellerNationalID],
FROM [Didgah_DynamicDataModel].[dbo].[ddm_Sellers] w
inner join [Didgah_BPMS].[dbo].[ddm_RequestPaymentJunction] d on d.ForeignKey=w.Guid
;'”where d.PrimaryKey = @BusinessKey and d.RelationGuid=’5523037A-E674-DE33-F7C5-8DD89D031FBB
;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;()SqlDataReader reader = cmd.ExecuteReader
while (reader.Read())
}
;()SellerName = reader[0].ToString
;()SellerAccountNmber = reader[1].ToString
;()SellerNumberSHeba = reader[2].ToString
;()SellerCardNumber = reader[3].ToString
;()SellerBank = reader[4].ToString
;()SellerAccountName = reader[5].ToString
;()SellerPhoneNumber = reader[6].ToString
;()SellerNationalCode = reader[7].ToString
;()SellerNationalID = reader[8].ToString
{
;()conn.Close
{
;Execution.SetVariable(“SellerName”, SellerName)
;Execution.SetVariable(“SellerAccountNmber”, SellerAccountNmber)
;Execution.SetVariable(“SellerNumberSHeba”, SellerNumberSHeba)
;Execution.SetVariable(“SellerCardNumber”, SellerCardNumber)
;Execution.SetVariable(“SellerBank”, SellerBank)
;Execution.SetVariable(“SellerAccountName”, SellerAccountName)
;Execution.SetVariable(“SellerPhoneNumber”, SellerPhoneNumber)
;Execution.SetVariable(“SellerNationalCode”, SellerNationalCode)
;Execution.SetVariable(“SellerNationalID”, SellerNationalID)
{
{
{
سپس فیلدهای مورد نظر مطابق با عنوان و نوع دادهای آنها در دیتا مدل در فعالیت کدنویسی به عنوان پارامتر خروجی تعریف شوند.
تصویر شماره 3-تعریف پارامترهای خروجی
نکته : در پیادهسازی این راهکار برای مشتریهای مختلف باید به نامهای ستونها و نام رشته اتصال دقت کرد؛ زیرا میتوانند از آنچه که در این اسکریپت آورده شده استُ متفاوت باشند.