بررسی مسئلهی فراخوانی اطلاعات از مدل دادهای پایه و ارائه یک راهحل برای آن:طرح مسئله: فرض کنید در فرآیندی میبایست با انتخاب یکی از گزینههای فیلد رابطه از نوع مدل دادهای پایه که به صورت لیست کشویی بر روی فرم قرار گرفته است، اطلاعات ستونهای مختلف ایجاد شده در مدل اطلاعاتی پایه متناظر با گزینه انتخاب شده توسط کاربر در فیلدهای مدل دادهای فرایند که متناظر با ستونهای مدل دادهای پایه ایجاد شده و روی فرم قرار گرفتهاند مقداردهی شود.
یک راهکار: راهکار مناسب جهت حل مسئله این است که مطابق تصویر شماره 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-تعریف پارامترهای خروجی
نکته : در پیادهسازی این راهکار در مشتریهای مختلف باید به نامهای ستونها و نام رشته اتصال دقت نمود زیرا میتوانند از آنچه که در این اسکریپت آورده شده است متفاوت باشند.