انتقال اطلاعات بین جداول
طرح مسئله: فرض کنید بر روی فرم گریدی با نام “جدول کالاهای درخواستی” داریم (شکل 1)، در مرحله بعد میخواهیم کالاهایی که موجود است و موجود نیست را به صورت جدا در جدولهای مربوطه درج کنیم و بسته به این موضوع که کالاهایی در جدول موجود هستند یا خیر فرایند از مسیر موجود است، موجود نیست و یا هر دو ادامه پیدا نماید (شکل 2).
شکل 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
}
//تعریف دو متغیر از جنس عدد صحیح برای مسیریابی و تفکیک کالاهای موجود و ناموجود//
;int resultA = 0
;int resultB = 0
using (SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”)))
}
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
// پیدا کردن کالاهای موجود در جدول //
“@ = cmd.CommandText
declare @result int
if exists (SELECT 1 FROM [Didgah_BPMS].[dbo].[ddm_GoodsTable]
inner join [dbo].[ddm_GoodsRequestJunction] on [dbo].[ddm_GoodsRequestJunction].ForeignKey=[Guid]
‘موجود است’WHERE [WarehouseApprove] = N
AND
[dbo].[ddm_GoodsRequestJunction].PrimaryKey = @BusinessKey)
SET @result = 1
ELSE
SET @result = 0
;”SELECT @result as resultA
;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;resultA = Convert.ToInt32(cmd.ExecuteScalar())
// مقداردهی متغیر عدد صحیح تعریف شده جهت تعیین مسیر کالاهای موجود جدول //
;Execution.SetVariable(“RESULTOK”,resultA)
// پیدا کردن کالاهای ناموجود در جدول //
“@ = cmd.CommandText
declare @result int
if exists (SELECT 1 FROM [Didgah_BPMS].[dbo].[ddm_GoodsTable]
inner join [dbo].[ddm_GoodsRequestJunction] on [dbo].[ddm_GoodsRequestJunction].ForeignKey=[Guid]
‘موجود نیست’WHERE [WarehouseApprove] = N
AND
[dbo].[ddm_GoodsRequestJunction].PrimaryKey = @BusinessKey)
SET @result = 1
ELSE
SET @result = 0
;”SELECT @result as resultA
;b = Convert.ToInt32(cmd.ExecuteScalar())
// مقداردهی متغیر عدد صحیح تعریف شده جهت تعیین مسیر کالاهای ناموجود جدول //
;Execution.SetVariable(“RESULTNOK”,resultB)
;()conn.Close
{
{
{
{
{
سپس در مسیرهای بعد از درگاه جامع با توجه به مسیرهای مورد نظر (شکل 3) و با توجه به پارامترهای خروجی ذکر شده، در قسمت شرط کد زیر را قرار میدهیم:
شکل 3
;using System
;using Chargoon.Didgah.BPMS.CommonApi
namespace Chargoon.Didgah.BPMS.Runtime
}
public class ConditionalFlow : IConditionalFlow
}
public IExecution Execution { get; set; }
()public bool Evaluate
}
;return Execution.IntegerValue(“RESULTOK”)==1
{
{
{
بعد از مسیریابی، قبل از فعالیت کاربری که قرار است هر کدام از کالاهای مورد نظر را نمایش دهیم در یک فعالیت کدنویسی (شکل 4) کد زیر را مینویسیم:
شکل 4
;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
}
using (SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”)))
}
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
“@ = cmd.CommandText
//تعریف یک جدول واسط جهت مقداردهی اولیه به همراه ستون هایی کاملا مشابه با جدولی که قرار است مقادیر از آن گرفته شده و در جدول مورد نظردرج شود
declare @inserted table
[Guid] uniqueidentifier)
[Deleted] bit,
[GoodsType] nvarchar(4000),
[GoodsCode] nvarchar(128),
[Amount] decimal(14,4),
[Unit] nvarchar(128),
(
//درج در جدول ایجاد شده در دیتامدل جهت نمایش کالاهای موجود
insert into [Didgah_BPMS].[dbo].[ddm_AvailableGoods] ([Guid],[Deleted]
[GoodsType],
[GoodsCode],
[Amount],
[Unit],
(
//خروجی گرفتن از جدول واسط تعریف شده جهت درج در جدول
output inserted.[Guid]
,inserted.Deleted
inserted.[GoodsType],
inserted.[GoodsCode],
inserted.[Amount],
inserted.[Unit],
into @inserted
Select NEWID(),0
[GoodsType],
[GoodsCode],
[Amount],
[Unit],
FROM [Didgah_BPMS].[dbo].[ddm_GoodsTable] join [Didgah_BPMS].[dbo].[ddm_GoodsRequestJunction]
on [Didgah_BPMS].[dbo].[ddm_GoodsRequestJunction].ForeignKey=[Didgah_BPMS].[dbo].[ddm_GoodsTable].Guid
‘موجود است’where [WarehouseApprove] = N
and [Didgah_BPMS].[dbo].[ddm_GoodsRequestJunction].PrimaryKey=@BusinessKey
insert into [Didgah_BPMS].[dbo].[ddm_GoodsRequestJunction]([RelationGuid],[PrimaryKey],[ForeignKey],[Deleted])
// انتخاب GUID جدول مورد نظر از جدول Relation در دیتابیس DynamicDataModel
Select ‘7DF22CDA-449B-2CBF-2D76-818D47DBF9B2’,@BusinessKey,[Guid],0
from @inserted
“;
;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;()cmd.ExecuteNonQuery
;()conn.Close
{
{
{
{
{
به همین روش برای درج کالاهای ناموجود در جدول مربوطه اقدام خواهد شد.
[ratemypost]