بررسی مسئله جمع یک ستون گرید با شرط:طرح مسئله: در مواقعی نیاز است جمع مقادیر سطرها با شرطی خاص در یک ستون جدول محاسبه شود و روی فرم درون یک فیلد نمایش داده شود.
برای مثال در شکل ۱ جدولی شامل دو ستون از اعداد و یک ستون تأیید وجود دارد و هدف ما جمع سطرهای مورد تأیید و نمایش آن در یک فیلد است.
شکل ۱
یک راهکار: میتوانیم از کد زیر درون یک فعالیت کدنویسی (شکل 2) استفاده و مقدار آن را در یک متغیر ذخیره کنیم. سپس در تب ورودی/خروجی فیلد حاوی نتیجه محاسبات را که در فرم مرحله بعد قرار خواهد گرفت به عنوان پارامترهای خروجی فعالیت کدنویسی (شکل 3) تعریف کنیم. در این مثال این فیلد Decimal1 نام دارد.
کد قرار گرفته در فعالیت کدنویسی “Summation” موارد زیر را انجام میدهد:
- تعریف یک متغیر از نوع عدد اعشاری که برای ذخیره نتیجه محاسبات کوئری مورد استفاده قرار خواهد گرفت.
- تعریف رشته اتصال پایگاه داده دیدگاه برای اجرای کوئری محاسبات.
- انجام محاسبات با استفاده از کوئری. کوئری ستون حاوی امتیاز اعشاری را با دستور Sum محاسبه مینماید. جهت محدود کردن کوئری به سطرهایی از جدول که مورد تأیید بودهاند از شرط برابری ستون بررسی با عبارت تأیید استفاده شده است. همچنین برای محدود کردن کوئری به رکوردهای مربوط به اجرای نمونه فرایند جاری از شرط برابری ستون PrimaryKey جدول Junction مدل دادهای فرایند با شناسه نمونه فرایند یا BusinessKey استفاده شده است که با دستور AddWithValue به آن مقدار داده شده است.
- نتیجه محاسبات کوئری با دستور ExecuteScalar در متغیر Sum ذخیره شده است.
- به فیلد مدل دادهای که نتیجه محاسبات را بر روی فرم فرایند نمایش خواهد داد با دستور SetVariable مقدار فیلد Sum داده شده است.
شکل 2
شکل 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
}
;decimal sum = 0.0M
;SqlConnection conn = new SqlConnection(Execution.GetConnectionString(“BPMS”))
using (SqlCommand cmd = new SqlCommand())
}
;cmd.Connection = conn
;cmd.CommandType = CommandType.Text
cmd.CommandText = @”select sum([Decimal1])
from [dbo].[ddm_NewDDMPresentation_Table1] T
inner join [dbo].[ddm_NewDDMPresentationJunction] DMJ on DMJ.ForeignKey=T.Guid
;”and DMJ.Deleted=0 ‘تأیید’where PrimaryKey=@BusinessKey AND Confirm=N
;cmd.Parameters.AddWithValue(“@BusinessKey”, Execution.GuidValue(“___BusinessKey”))
;()conn.Open
;sum = Convert.ToDecimal(cmd.ExecuteScalar())
;()conn.Close
{
;Execution.SetVariable(“Decimal1”, sum)
{
{
{
همانطور که در شکل ۴ مشاهده میشود تنها جمع موارد مورد تأیید در فیلد جمع امتیازات تأیید شده درج شده است:
شکل 4