در بسیاری از موارد در گردش کارها نیاز پیدا می کنیم که سابقه تراکنشهای یک کاربر خاص را به دست بیاوریم. برای ملموس شدن موضوع، به مثالهای زیر که توجه کنید:
مثال 1: تعداد درخواست (تیکت) ثبت شده توسط یک مشتری خاص
مثلا فرض کنید می خواهیم هر مشتری حداکثر دو درخواست باز (فعال) داشته باشد.
مثال 2: تعداد درخواست ثبت نام در همایش توسط یک مشتری خاص
برای مثال هر کاربر بتواند تنها یکبار ثبت نام کند. به عبارت دیگر یک بار بتواند کار جدید ایجاد کند.
مثال 3: تعداد رفع اشکال توسط یک کارشناس خاص
مثلا اگر تعداد رفع اشکال یک کارشناس خاص (در تمام کارها) در طول روز کمتر از 3 مورد باشد سیستم واکنش تعریف شده ای را نشان دهد.
در چنین مواردی باید چکار کنیم؟ توجه کنید که در این موارد نمی توانیم از SearchWork استفاده کنیم چون فیلد کاربر انجام دهنده وظیفه، جزء فیلدهای سیستمی است و امکان جستجوی آن از طریق SearchWork وجود ندارد. ضمنا از توابع آماری WorkUtils.Stat نیز به همان دلیل مشابه نمی توانیم استفاده کنیم چون در تعیین جامعه آماری (WorkSet) باز همان محدودیت را داریم و تنها فیلدهای تعریف شده را می توانیم جستجو کنیم. روشی که به ذهن من می رسد این است که :
1- یک متغیر عددی با مقدار اولیه صفر تعریف می کنیم که محتوای این فیلد نشان دهنده تعداد بار انجام وظیفه کاربر است.
2- با استفاده از متد SearchWork کلید تمام کارهای مورد نظر خود را در یک آرایه ذخیره می کنیم.
3- سپس از در یک حلقه for و برای تمام کلید کارها، یک به یک از تابع سابقه تراکنشهای یک وظیفه خاص (GetLogList(TaskKey استفاده می کنیم. به این ترتیب برای هر کلید کار، یک آرایه از WorkLogInf های مرتبط با وظیفه مورد نظر را بدست می آوریم.
4- در این WorkLogInfها وجود کلید کاربر مورد نظر را بررسی می کنیم و برای هر تراکنشی که با شرایط مورد نظر ما مطابق باشد یک واحد به متغیر عددی اضافه می کنیم. به این ترتیب تعداد انجام یک وظیفه خاص توسط یک کاربر خاص بدست می آید.
البته این مثالها روی یک جنبه خاص از سابقه تراکنشها متمرکز شده است و اگر یک راه حل عام برای بدست آوردن سابقه تراکنشهای یک کاربر در سطح گردش کار، پیدا کنیم طبیعتا موارد خاص را نیز شامل خواهد شد. اگر در این زمینه راه حل خاصی به نظر دوستان می رسد ممنون می شوم در این پست مطرح نمایند.
با سپاس