طرح مسئله: ممکن است در یک فرآیند نیاز باشد کامنتها و توضیحات ردوبدل شده بین کارشناس (درخواستدهنده) و مدیر (مسئول بررسی درخواست) را نگهداری کنیم و نمایش دهیم. این مسئله به ویژه زمانی اهمیت بیشتری مییابد که چرخه بررسی و اصلاح درخواست بین کارشناس و مدیر ممکن است چندین بار تکرار شود. در این موارد میتوان با نگهداری و نمایش تاریخچه توضیحات از فراموشی آنها جلوگیری کرد.

شکل 1. فرم “بررسی درخواست خرید” دارای تاریخچه توضیحات

شکل 2. فرم “اصلاح درخواست خرید” دارای تاریخچه توضیحات
در ادامه، ساختار و کد موردنیاز برای انجام این کار را از طریق پیادهسازی سناریوی نمونه با هم بررسی میکنیم. فرض کنید در یک فرآیند درخواست خرید، کارشناس درخواستدهنده و مدیر بررسیکننده درخواست میدهند تاریخچه توضیحات و کامنتهای قبلی خود را روی فرم مشاهده کنند. بدین منظور لازم است: 1) سه عدد فعالیت کدنویسی به نمودار BPMN فرآیند اضافه شود، 2) دو عدد فیلد اطلاعاتی برای نگهداری تاریخچه توضیحات و کامنتها به مدل دادهای فرآیند اضافه شود، 3) کد موردنیاز برای بهروزرسانی تاریخچه توضیحات کارشناس (درخواستدهنده) اضافه شود، 4) کد موردنیاز برای بهروزرسانی تاریخچه توضیحات و کامنتهای مدیر اضافه شود، 5) متغیرهای ورودی/خروجی موردنیاز روی فعالیتها تعریف شود، 6) فیلدهای جدید (تاریخچه توضیحات/کامنت) به صورت مناسب به فرمهای مربوطه اضافه شود.

شکل 3. سناریوی نمونه: چرخه بررسی و اصلاح درخواست خرید کالا
1. ابتدا سه عدد فعالیت کدنویسی را به صورت زیر به ساختار فرآیند اضافه میکنیم:

شکل 4. اضافه کردن فعالیتهای کدنویسی به ساختار فرآیند
2. سپس دو عدد فیلد اطلاعاتی از نوع رشته را به مدل دادهای فرآیند اضافه میکنیم:

شکل 5. اضافه کردن فیلدهای اطلاعاتی جدید به مدل دادهای فرآیند
* توجه: هنگام اضافه کردن فیلدهای اطلاعاتی جدید از نوع رشته حتماً مقدار مناسبی را به عنوان طول رشته در نظر بگیرید. برای مثال، در صورتی که طول رشتههای مربوط به توضیحات درخواستدهنده و کامنت مدیر را 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. اضافه کردن دو پارامتر خروجی به فعالیت کاربر “ثبت درخواست خرید کالا” (پارامترهای رشتهای Description و DescriptionH)

شکل 7. اضافه کردن یک پارامتر خروجی به فعالیت کدنویسی “بهروزرسانی تاریخچه توضیحات” (پارامتر رشتهای DescriptionH)

شکل 8. اضافه کردن دو پارامتر خروجی به فعالیت کاربر “بررسی درخواست خرید” (پارامترهای رشتهای ManagerComment و ManagerCommentH)

شکل 9. اضافه کردن یک پارامتر خروجی به فعالیت کدنویسی “بهروزرسانی تاریخچه توضیحات مدیر” (پارامتر رشتهای ManagerCommentH)

شکل 10. اضافه کردن دو پارامتر خروجی به فعالیت کاربر “اصلاح درخواست خرید” (پارامترهای رشتهای Description و DescriptionH)

شکل 11. اضافه کردن دو پارامتر خروجی به فعالیت کدنویسی “بهروزرسانی تاریخچه توضیحات” (پارامترهای رشتهای Description و DescriptionH)
6. فیلدهای جدید (تاریخچه توضیحات/کامنت) را به فرمهای مربوطه اضافه میکنیم.
در فرم بررسی درخواست خرید کافیست فیلد “تاریخچه توضیحات” کاربر درخواستدهنده را به صورت نمایشی به فرم اضافه کنیم تا مدیر بتواند تمام توضیحات کاربر درخواستدهنده را مشاهده کند. همچنین، باید فیلد “توضیحات مدیر” را به صورت ویرایشی و فیلد “تاریخچه توضیحات مدیر” را به صورت نمایشی به فرم اضافه نماییم تا مدیر ضمن مشاهده توضیحات قبلی خود، امکان درج توضیح جدید نیز داشته باشد. (شکل 12)

شکل 12. اضافه کردن فیلدهای توضیح و تاریخچه توضیحات به فرم بررسی درخواست خرید
در فرم اصلاح درخواست خرید کافیست فیلد “تاریخچه توضیحات مدیر” را به صورت نمایشی به فرم اضافه کنیم تا کاربر درخواستدهنده بتواند تمام توضیحات مدیر را مشاهده کند. همچنین، باید فیلد “توضیحات” مربوط به کاربر درخواستدهنده را به صورت ویرایشی و فیلد “تاریخچه توضیحات” را به صورت نمایشی به فرم اضافه کنیم تا کاربر درخواستدهنده ضمن مشاهده توضیحات قبلی خود، امکان درج توضیح جدید نیز داشته باشد. (شکل 13)

شکل 13. اضافه کردن فیلدهای توضیح و تاریخچه توضیحات به فرم اصلاح درخواست خرید
جمعبندی
برای نگهداری مقادیر قبلی هر فیلد اطلاعاتی (مثلاً Description) لازم است یک فیلد دیگر جهت ذخیرهسازی تاریخچه آن (مثلاً DescriptionH) به مدل دادهای فرآیند خود اضافه کنیم. بنابراین برای نگهداری تاریخچه توضیحات ردوبدل شده میان دو شخص (مثلاً کارشناس و مدیر) باید 2 فیلد به مدل دادهای فرآیند موردنظر اضافه کنیم. به همین ترتیب، در صورتی که فرآیند ما شامل چرخههای بررسی/اصلاح دیگری نیز باشد، میتوان با تکرار همین راهکار تاریخچه توضیحات درجشده در آن چرخهها را نیز نگهداری کرده و نمایش داد.