شرح صورت مسئله
ممکن است در یک فرآیند نیاز باشد کامنتها و توضیحات رد و بدل شده بین کارشناس (درخواستدهنده) و مدیر (مسئول بررسی درخواست) را نگهداری و نمایش دهیم. این مسئله به ویژه زمانی اهمیت بیشتری مییابد که چرخهی بررسی و اصلاح درخواست بین کارشناس و مدیر ممکن است چندین بار تکرار شود. در این موارد میتوان با نگهداری و نمایش تاریخچه توضیحات از فراموشی آنها جلوگیری کرد.
در ادامه، ساختار و کد موردنیاز جهت انجام این کار را از طریق پیادهسازی سناریوی نمونه باهم بررسی میکنیم.
سناریوی نمونه
فرض کنید در یک فرآیند درخواست خرید، کارشناس درخواستدهنده و مدیر بررسیکننده درخواست میخواهند تاریخچهی توضیحات و کامنتهای قبلی خود را روی فرم مشاهده کنند. بدین منظور لازم است: 1) سه عدد فعالیت کدنویسی به نمودار BPMN فرآیند اضافه شود 2) دو عدد فیلد اطلاعاتی جهت نگهداری تاریخچهی توضیحات و کامنتها به مدل دادهای فرآیند اضافه شود 3) کد موردنیاز جهت بهروزرسانی تاریخچهی توضیحات کارشناس (درخواستدهنده) اضافه شود 4) کد موردنیاز جهت بهروزرسانی تاریخچهی توضیحات و کامنتهای مدیر اضافه شود 5) متغیرهای ورودی/خروجی موردنیاز روی فعالیتها تعریف شود 6) فیلدهای جدید (تاریخچه توضیحات/کامنت) به صورت مناسب به فرمهای مربوطه اضافه شود.
مراحل پیادهسازی سناریو
1. ابتدا سه عدد فعالیت کدنویسی را به صورت زیر به ساختار فرآیند اضافه میکنیم:
2. سپس دو عدد فیلد اطلاعاتی از نوع رشته را به مدل دادهای فرآیند اضافه میکنیم:
* توجه: در هنگام اضافه کردن فیلدهای اطلاعاتی جدید از نوع رشته حتماً مقدار مناسبی را به عنوان طول رشته در نظر بگیرید. برای مثال، در صورتی که طول رشتههای مربوط به توضیحات درخواستدهنده و کامنت مدیر را 1000 کاراکتر در نظر گرفتهاید، طول فیلدهای رشتهای جدید مربوط به تاریخجه (DescriptionH و ManagerCommentH) میبایست چندین برابر باشد، بنابراین حداکثر طول رشته (یعنی 4000 کاراکتر) را استفاده نمایید.
3. کد موردنیاز جهت بهروزرسانی تاریخچهی توضیحات کارشناس (درخواستدهنده) را به دو فعالیت کدنویسی “بهروزرسانی تاریخچه توضیحات” اضافه میکنیم (فعالیتهای 1 و 2 در شکل 1).
using System;
using Chargoon.Didgah.BPMS.CommonApi;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
namespace Chargoon.Didgah.BPMS.Runtime
{
public class ScriptTask : IScriptTask
{
public IExecution Execution { get; set; }
public void Execute()
{
String Description = Execution.StringValue(“Description”);
String DescriptionH = Execution.StringValue(“DescriptionH”);
Execution.SetVariable(“DescriptionH”, “تاریخ و ساعت: ” + PersianDate(DateTime.Now)+ Environment.NewLine
+ Description + Environment.NewLine + “————” + Environment.NewLine + DescriptionH);
}
public string PersianDate(DateTime DateTime1) // متد تعریف شده جهت تبدیل تاریخ میلادی به شمسی
{
PersianCalendar PersianCalendar1 = new PersianCalendar();
return string.Format(@”{0}/{1}/{2} ({3}:{4})”,
PersianCalendar1.GetYear(DateTime1),
PersianCalendar1.GetMonth(DateTime1),
PersianCalendar1.GetDayOfMonth(DateTime1),
PersianCalendar1.GetHour(DateTime1),
PersianCalendar1.GetMinute(DateTime1));
}
}
}
4. کد موردنیاز جهت بهروزرسانی تاریخچهی توضیحات (کامنت) مدیر را به فعالیت کدنویسی “بهروزرسانی تاریخچه توضیحات مدیر” اضافه میکنیم (فعالیت 3 در شکل 1).
using System;
using Chargoon.Didgah.BPMS.CommonApi;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
namespace Chargoon.Didgah.BPMS.Runtime
{
public class ScriptTask : IScriptTask
{
public IExecution Execution { get; set; }
public void Execute()
{
String ManagerComment = Execution.StringValue(“ManagerComment”);
String ManagerCommentH = Execution.StringValue(“ManagerCommentH”);
Execution.SetVariable(“ManagerCommentH”, “تاریخ و ساعت: ” +PersianDate(DateTime.Now)+ Environment.NewLine
+ ManagerComment + Environment.NewLine + “————” + Environment.NewLine + ManagerCommentH);
}
public string PersianDate(DateTime DateTime1) // متد تعریف شده جهت تبدیل تاریخ میلادی به شمسی
{
PersianCalendar PersianCalendar1 = new PersianCalendar();
return string.Format(@”{0}/{1}/{2} ({3}:{4})”,
PersianCalendar1.GetYear(DateTime1),
PersianCalendar1.GetMonth(DateTime1),
PersianCalendar1.GetDayOfMonth(DateTime1),
PersianCalendar1.GetHour(DateTime1),
PersianCalendar1.GetMinute(DateTime1));
}
}
}
5. پارامترهای ورودی/خروجی موردنیاز فعالیتها را تعریف میکنیم (از نوع رشته).
6. فیلدهای جدید (تاریخچه توضیحات/کامنت) را به فرمهای مربوطه اضافه میکنیم.
در فرم بررسی درخواست خرید کافیست فیلد “تاریخچه توضیحات” کاربر درخواستدهنده را به صورت نمایشی به فرم اضافه کنیم تا مدیر بتواند تمام توضیحات کاربر درخواستدهنده را مشاهده کند. همچنین، باید فیلد “توضیحات مدیر” را به صورت ویرایشی و فیلد “تاریخچه توضیحات مدیر” را به صورت نمایشی به فرم اضافه نماییم تا مدیر ضمن مشاهده توضیحات قبلی خود، امکان درج توضیح جدید نیز داشته باشد. (شکل 12)
در فرم اصلاح درخواست خرید کافیست فیلد “تاریخچه توضیحات مدیر” را به صورت نمایشی به فرم اضافه کنیم تا کاربر درخواستدهنده بتواند تمام توضیحات مدیر را مشاهده کند. همچنین، باید فیلد “توضیحات” مربوط به کاربر درخواستدهنده را به صورت ویرایشی و فیلد “تاریخچه توضیحات” را به صورت نمایشی به فرم اضافه نماییم تا کاربر درخواستدهنده ضمن مشاهده توضیحات قبلی خود، امکان درج توضیح جدید نیز داشته باشد. (شکل 13)
جمعبندی
برای نگهداری مقادیر قبلی هر فیلد اطلاعاتی (مثلاً Description) لازم است یک فیلد دیگر جهت ذخیرهسازی تاریخچهی آن (مثلاً DescriptionH) به مدل دادهای فرآیند خود اضافه کنیم. بنابراین برای نگهداری تاریخچهی توضیحات رد و بدل شده میان دو شخص (مثلاً کارشناس و مدیر) میبایست 2 فیلد به مدل دادهای فرآیند موردنظر اضافه کنیم. به همین ترتیب، در صورتی که فرآیند ما شامل چرخههای بررسی/اصلاح دیگری نیز باشد، میتوان با تکرار همین راهکار تاریخچه توضیحات درج شده در آن چرخهها را نیز نگهداری کرده و نمایش داد.
[ratemypost]