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

فراخوانی اطلاعات یک نمونه فرایند در فرایندی دیگر با استفاده از شماره درخواست در مدل داده‌ای پویا 2

فراخوانی اطلاعات

فراخوانی اطلاعات یک نمونه فرایند در فرایندی دیگر با استفاده از شماره درخواست

طرح مسئله: فرض کنید در یک فرایند درخواست کالا جدولی برای اعلام کالاهای مورد درخواست وجود دارد. در این فرایند کالاهایی که موجود نیستند می‌­بایست خریداری شوند. برای خرید کالاهای ناموجود فرایند دیگری با نام درخواست پرداخت اجرا می‌­شود. در صورتی که قصد داشته باشیم در فرایند درخواست پرداخت اطلاعات کالاهای ناموجود در یک نمونه درخواست کالا در فرم فراخوانی شوند به روش ارائه شده در این راهنما عمل می­‌نماییم.

یک راه‌حل: در فرایند درخواست کالا جدولی ایجاد می‌کنیم که در زمان اجرای فرایند، در آن جدول کالاهای درخواستی درج می‌شود و در آن می‌بایست وضعیت موجود بودن کالا نیز مشخص شود (شکل 1).

شکل 1

در فرایند پرداخت می‌بایست یک فرم در شروع فرایند که حاوی فیلدی جهت وارد کردن شماره درخواست کالا است توسط درخواست‌کننده پر شود (شکل 2). با درج شماره نمونه فرایند درخواست کالا در ابتدای فرایند درخواست پرداخت، قادر خواهیم بود در کدی که در ادامه ارائه خواهد شد، اطلاعات نمونه فرایند کالا را از پایگاه داده نرم افزار استخراج کنیم. فیلد شماره درخواست کالا ثبت شده را در خروجی فعالیت کاربری که مقدار می­‌گیرد به عنوان پارامتر خروجی اضافه می‌­کنیم تا بتوانیم از مقدار آن در کدنویسی استفاده کنیم.

شکل 2

در فرایند پرداخت برای فراخوانی اطلاعات جدول فرایند درخواست کالا، یک فعالیت از نوع کدنویسی ایجاد می‌شود (شکل 3).

شکل 3

در قسمت کدنویسی، کد ارائه شده را قرار می­‌دهیم:

;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 @ParentBK uniqueIdentifier=(Select [Didgah_BPMS].[dbo].[bpm_ProcessInstances].BusinessKey

from [Didgah_BPMS].[dbo].[bpm_ProcessInstances]

inner join [Didgah_BPMS].[dbo].[ddm_GoodREquest] on [Didgah_BPMS].[dbo].[ddm_GoodREquest].Guid=[Didgah_BPMS].[dbo].[bpm_ProcessInstances].BusinessKey

(where ReqNumber=@RN

declare @inserted table

([Guid] uniqueidentifier

[Deleted] bit,

      [Tilte] nvarchar(4000),

     [Row] int,

[Amount] decimal(18,2),

[ComPrice] decimal(18,2),

[InventoryStatus] nvarchar(4000),

      [Note] nvarchar(4000),

(

insert into [Didgah_BPMS].[dbo].[ddm_ReqPa_Table1]([Guid],[Deleted]

[Title],

[Row],

[Amount],

[ComPrice],

[InventoryStatus],

      [Note],

(

,output inserted.[Guid]

                 inserted.Deleted,

                 inserted.[Title],

                 inserted.[Row],

                 inserted.[Amount],

                inserted.[ComPrice],

                 inserted.[InventoryStatus],

                 inserted.[Note],

                 into @inserted

Select NEWID(),0

      [Tilte],

      [Row],

      [Amount],

     [ComPrice],

      [InventoryStatus],

      [Note],

FROM [Didgah_BPMS].[dbo].[ddm_GoodREquest_Table1]  join [Didgah_BPMS].[dbo].[ddm_GoodREquestJunction]

on [Didgah_BPMS].[dbo].[ddm_GoodREquestJunction].ForeignKey=[Didgah_BPMS].[dbo].[ddm_GoodREquest_Table1].Guid

‘موجود نیست’where [InventoryStatus] = N

and [Didgah_BPMS].[dbo].[ddm_GoodREquestJunction].PrimaryKey=@ParentBK

insert into [Didgah_BPMS].[dbo].[ddm_ReqPaJunction]([RelationGuid],[PrimaryKey],[ForeignKey],[Deleted])

Select ‘1342B72C-4118-1203-027A-0D5D648F73D1’,@BusinessKey,[Guid],0

;”from @inserted

;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))

;cmd.Parameters.AddWithValue(“@RN”, Execution.StringValue(“ReqNumberPa”))

;()conn.Open

;()cmd.ExecuteNonQuery

;()conn.Close

{

{

{

{

{

کد ارائه شده عملیات زیر را انجام می­‌دهد:

  • تعریف یک رشته اتصال جهت اجرای کوئری مورد نیاز
  • در کوئری استفاده شده در کد ابتدا یک متغیر از نوع Guid جهت ذخیره شناسه BusinessKey نمونه فرایند درخواست کالا با توجه به شماره درخواست کالا دریافت شده از کاربر در مرحله اول فرایند تعریف شده است. سپس برای استخراج شناسه نمونه فرایند درخواست کالا پس از Join بین جدول ProcessInstances، جدول Junction مدل داده‌­ای فرایند درخواست کالا و جدول اصلی مدل داده­‌ای فرایند درخواست کالا، رکوردی در جدول مدل داده‌­ای کالا که ستون شماره درخواست آن برابر با مقدار وارد شده توسط کاربر است فیلتر شده است. مقدار شماره درخواست وارد شده توسط کاربر با استفاده از دستور Parameters.AddWithValue به کوئری ارسال شده است. در ادامه کوئری یک جدول جهت ذخیره مقادیر Insert شده در جدول کالاهای قرار گرفته روی فرم فرایند درخواست پرداخت تعریف شده است. ذخیره این مقادیر به این جهت است که می­‌بایست مقدار ستون Guid که با استفاده از دستور NEWID() ایجاد شده است را عیناً در ستون ForeignKey جدول Junction مدل داده‌­ای فرایند Insert نماییم تا رکوردها در جدول روی فرم فرایند درخواست پرداخت نمایش داده شوند. در قسمت Select عملیات Insert به جدول کالاهای فرایند درخواست پرداخت، رکوردهایی از جدول مبدا که وضعیت آنان موجود نیست است با توجه به شناسه نمونه فرایند درخواست کالا که پیشتر استخراج شد انتخاب می‌­شوند. عملیات Insert بعدی در جدول Junction مدل داده‌­ای فرایند انجام شده است. در ستون RelationGuid، Guid رابطه بین مدل داده‌­ای فرایند و جدول کالاها قرار گرفته است که از جدول Relations در پایگاه داده Didgah_DynamicDataModel استخراج شده است. در ستون PrimaryKey مقدار BusinessKey نمونه فرایند در جریان وارد شده است. این مقدار با استفاده از دستور AddWithValue و متغیر عمومی مربوطه به کوئری منتقل شده است. در ستون ForeignKey همان مقادیر Guid وارد شده در جدول اصلی که پیشتر ذخیره شدند وارد شده است.

در صورتی که در جدول کالاهای درخواستی فرایند درخواست کالا، ردیف‌هایی با وضعیت موجود نیست وارد شده باشد (شکل 4)، پس از درج شماره درخواست کالای مورد نظر در ابتدای فرایند درخواست پرداخت، کالاهای ناموجود فرایند درخواست کالا در جدول کالای فرایند درخواست پرداخت فراخوانی می­‌شوند (شکل 5).

شکل 4

شکل 5


[ratemypost]
دستیار هوشمند چارگون دستیار هوشمند چارگون