پرش به محتوای اصلی

راهنمای انتقال اطلاعات بین جداول در مدل داده‌ای پویا 2

انتقال اطلاعات

انتقال اطلاعات بین جداول

طرح مسئله: فرض کنید بر روی فرم گریدی با نام “جدول کالاهای درخواستی” داریم (شکل 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]
دستیار هوشمند چارگون دستیار هوشمند چارگون