بررسی مسئله پیوست فایل به صورت پیشفرض بر روی فیلد فایل
طرح مسئله: فرض کنید قصد دارید در فرم یک فعالیت کاربر فایل یا فایلهایی به صورت پیشفرض در یک فیلد فایل آپلود شده باشند تا کاربران بتوانند فایلها را برای استفاده دریافت کنند.
یک راهحل: یک روش برای حل این مسئله به این صورت است که در مرحله پیادهسازی فرایند پس از قرار دادن یک فیلد فایل به صورت ویرایشی بر روی فرم یک فعالیت کاربر و اجرای یک نمونه از فرایند، فایلهای مورد نظر خود را در کارتابل بر روی فیلد فایل آپلود کنید. با آپلود فایلها در این نمونه فرایند به ازای فایلهای آپلودشده مقادیر Guid اختصاص دادهشده به این فایلها در پایگاه داده دیدگاه در ستون ForeignKey جدول Junction مدل دادهای فرایند وارد میشوند و از این پس میتوانیم با انتخاب این مقادیر و وارد کردن مجدد آنان در جدول Junction فرایند برای هر نمونه فرایند با استفاده از کد ارائهشده به صورت پیشفرض فایلهای مورد نظر را بر روی فرم فعالیت کاربر ابتدای فرایند پیوستشده داشته باشیم.
همانطور که در شکل 1 مشخص است در ابتدای فرایند در فرم فعالیت کاربر (شکل 2) فایل مورد نظر را بارگذاری میکنیم.
شکل 1
شکل 2
با انجام این عملیات رکوردهای مربوط به فایلهای آپلودشده در جدول Junction مدل دادهای فرایند وارد میشوند که در کدنویسی از این رکوردها استفاده خواهد شد.
در فرایند نهایی یک فعالیت کدنویسی مانند شکل 3 اضافه میکنیم و کد ارائهشده را در قسمت کدنویسی قرار میدهیم.
شکل 3
;using Chargoon.Didgah.BPMS.CommonApi
;using System.Data.SqlClient
;using System.Data
public class ScriptTask : IScriptTask
}
public IExecution Execution { get; set; }
()public void Execute
}
using (SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”)))
}
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
cmd.CommandText = @”insert into [Didgah_BPMS].[dbo].[ddm_RequestConsumerGoods1Junction] ([RelationGuid]
[PrimaryKey],
[ForeignKey],
([Deleted],
‘select ‘19466DCB-C37E-EE41-F647-3B29F0C105BA
BusinessKey@,
[ForeignKey],
0,
From[Didgah_BPMS].[dbo].[ddm_RequestConsumerGoods1Junction]
where PrimaryKey=’896D2188-6D80-4B9E-971E-BD330A35610D’
;”
;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;()cmd.ExecuteNonQuery
;()conn.Close
{
{
{
{
{
کد ارائهشده عملیات زیر را انجام میدهد:
- تعریف یک رشته اتصال برای اجرای کوئری مورد نیاز در پایگاه داده دیدگاه
- کوئری مورداستفاده در کد ارائهشده به ازای فایلهای پیشتر آپلودشده در پایگاه داده رکوردهایی را به جدول Junction مدل دادهای فرایند وارد میکند. در ستون RelationGuid مقدار Guid اختصاص دادهشده به رابطه بین مدل دادهای فرایند و فیلد فایل مورد نظر وارد میشود. این مقدار برابر با ستون Guid از جدول Relations در پایگاه داده Didgah_DynamicDataModel است. در ستون PrimaryKey مقدار شناسه BusinessKey نمونه فرایند جاری با استفاده از دستور AddWithValue و متغیر عمومی مربوطه وارد میشود. در ستون ForeignKey مقادیر همین ستون به ازای فایلهای پیشتر آپلود شده بر روی فرم فرایند وارد میشود. این مقادیر با برابر قرار دادن مقدار PrimaryKey در دستور Select مورد استفاده با شناسه BusinessKey نمونه فرایندی که برای آپلود فایلها مورد استفاده قرار گرفته قابل فیلتر کردن هستند. مقدار BusinessKey نمونه فرایندی که برای آپلود فایلها مورد استفاده قرار گرفت، از جدول ProcessInstaces قابل استخراج است.
نکته: در پیادهسازی این راهکار برای مشتریهای مختلف باید به نامهای دیتامدل و نام رشته اتصال دقت کرد؛ زیرا میتوانند از آنچه که در این اسکریپت آورده شده است متفاوت باشند.