یکی از امکانات سیستم مدیریت فرایندها امکان نمایش فهرست کارها به همراه فیدهای قابل تعریف است. در حالت عادی کاربر میتواند با استفاده از فیلترها و محاوره های جستجوی ساده و پیشرفته، فهرست کارهای مورد نظر خود را بازیابی و نمایش دهد.
علاوه بر این، امکان پیشرفته جدیدی که به سیستم اضافه شده این است که از این پس می توانیم فهرست کارها را از طریق برنامهنویسی تولید و مشاهده کنیم. حال ممکن است این سوال پیش بیاید که اساسا چه نیازی به این کار هست و چرا فهرست کارهای عادی نمی تواند این نیاز را پوشش دهد.
چالشهای فهرست کارها در حالت عادی
- محدود بودن به گردش کار جاری
فهرست کارها، در حالت عادی اطلاعات کارهای مرتبط با گردش کار جاری را نمایش می دهد. به عبارت دیگر از داخل یک گردش کار نمی توانیم فهرست کارهای یک گردش کار دیگر را مشاهده کنیم.
فیلتر کردن و جزئی کردن کارها در محاوره فهرست کارها، در سه برگه "عمومی"، "شرایط ساده" و "شرایط پیشرفته" انجام می شود. با توجه به اینکه کار با محاوره "شرایط پیشرفته" برای کاربران عادی (غیر ماهر) پیچیدگیهای خود را دارد لذا این دسته از کاربران تمایل به استفاده ازصفحات "عمومی" و "شرایط ساده" دارند که با توجه به محدودیت فضا می تواند شامل تعداد محدودی از فیلدها باشد.
بطور کلی هر منطق گزارشگیری که وابسته به فیلد نیست یا در قالب فیلد تعریف پذیر نیست در حالت عادی قابل تهیه نیست.. توضیح این که فهرست کارها در حالت عادی وابسته به مقادیر فیلدهای گردش کار است و لذا شرایط و فیلترهایی که بصورت فیلد تعریف نشده اند، امکان گزارشگیری در حالت عادی را ندارند. برای مثال فرض کنید می خواهیم فهرست کارهای فعال یک کاربر خاص را نمایش دهیم. از آنجایی که فیلدی متناظر با این مفهوم در گردش کار وجود ندارد، لذا امکان تعریف فهرست کار عادی برای تهیه این گزارش وجود ندارد.
- عدم امکان جستجو در بعضی از انواع فیلدها
فیلدهای از نوع محاسباتی و نیز کاربران مجازی قابل جستجو در برگه های شرایط ساده و پیشرفته نیستند.
به این ترتیب و برای رفع محدودیتهای فوق، امکان جستجو و نمایش "فهرست کارها از طریق برنامه" پیاده سازی شده است. به این معنی که کارها به شکل کاملا انعطاف پذیر و از طریق کدنویسی یک تابع خاص، تولید و نمایش داده می شود. در ادامه با روش تعریف یک فهرست کار مبتنی بر برنامه آشنا می شویم.
مراحل تعریف یک فهرست کار مبتنی بر برنامه
در این بخش فرض می کنیم که در گردش کار "تامین نیروی انسانی" می خواهیم یک گزارش مبتنی بر برنامه ایجاد کنیم.
این گردش کار، دارای یک زیرگردش به نام "انجام مصاحبه با متقاضی کار" است که در این زیرگردش، به تعداد متقاضیان، کار ایجاد می شود و روند مصاحبه از تعیین کارشناس، تماس با متقاضی، تنظیم تاریخ برای جلسه مصاحبه، انجام مصاحبه، ارزشیابی و ...را در بر دارد.
حال گزارشی که تعریف می کنیم قرار است که فهرست مصاحبه های در انتظار انجام را نمایش دهد.
- در محاوره "تعریف و اصلاح گردش کارها"، روی آیکون "گزارشهای مبتنی بر گردش کار" کلیک کنید (مطابق شکل زیر):
به این ترتیب، محاوره تعریف فهرست کار به شکل زیر روی صفحه باز می شود:
- یک گزارش جدید مبتنی بر برنامه (سطر جدید) تعریف کنید. مشخصات گزارش جدید را هم می توانید در جدول و هم در محاوره وارد کنید. برای وارد کردن مشخصات گزارش در محاوره، می توانید روی آیکون "اصلاح سطر مکان نما با محاوره" کلیک کنید یا اینکه روی یکی از ستونهای سطر، دبل کلیک کنید. به این ترتیب محاوره تعریف گزارش جدید به شکل زیر باز می شود:
در این محاوره علاوه بر تعیین نام و نام دیگر (نام لاتین) باید موارد زیر را تعیین کنید:
تابع برنامه : همانطور که قبلا هم گفته شد، گزارشهای مبتنی بر برنامه از طریق یک تابع برنامه تولید می شود. در این قسمت باید تابع تولید این گزارش را تعیین کنیم. نام توابع گزارشهای مبتنی بر برنامه، با عبارت WorkScriptRep شروع می شود. حال اگر مانند مثال بالا، قبلا تابع یاد شده را ایجاد کرده اید، در این قسمت کافی است منوی کشویی را باز کنید و تابع مورد نظر را انتخاب کنید در غیر این صورت می توانید این تابع را همزمان ایجاد کنید و در یک فرصت مناسب، متن تابع را تکمیل کنید. برای این کار کافی است در این ناحیه دبل کلیک کنید تا یک تابع بصورت اتوماتیک ایجاد شود. به این ترتیب یک تابع با نام WorkScriptRep1 ایجاد می شود که می توانید این نام را ویرایش کنید و بجای عدد 1، نام دلخواه خود را وارد و ذخیره کنید. لازم به توضیح است که جزئیات این تابع با ذکر مثال در انتهای این مطلب شرح داده شده است.
گروه پارامتر: در این ناحیه، از منوی پارامترهای موجود، پارامتر مورد نظر خود (در اینجا اطلاعات مصاحبه) را انتخاب کنید. در مثال بالا، گروه پارامتر "اطلاعات مصاحبه" انتخاب شده است. همانطور که می دانید هر گروه پارامتر شامل یک سری فیلد است که در این مثال، گروه پارامتر اطلاعات مصاحبه شامل فیلدهایی مانند "نام متقاضی استخدام"، "نام "کارشناس مصاحبه کننده" و ... است که اطلاعات کلی در مورد مصاحبه را به دست می دهد. توضیح این که مقادیر فیلدهای این گروه پارامتر در هنگام نمایش گزارش، توسط کاربر در لحظه تعیین می شود و گزارش بر اساس این مقادیر تولید می شود.. این مورد در ادامه، و در بخش تهیه گزارش، بصورت دقیق تر تشریح و نمایش داده خواهد شد.
به این ترتیب یک گزارش جدید مبتنی بر گردش کار ایجاد می شود که در فهرست گزارشهای مبتنی بر برنامه به شکل زیر نمایش داده می شود:
حال برای امکان استفاده از این گزارش، ابتدا باید دسترسی کاربر مورد نظر خود را به این گزارش ایجاد کنید. به این ترتیب گزارش یادشده در فهرست کارهای مبتنی بر برنامه، قابل انتخاب خواهد شد.
ایجاد دسترسی به گزارش مبتنی بر برنامه
برای تنظیمات دسترسی کاربران به گزارشهای مبتنی بر گردش کار:
از منوی "سیستم" گزینه "تعریف کاربران و امکانات آنها" را انتخاب کنید. در این محاوره ابتدا نشانگر را روی کاربر مورد نظر منتقل کنید و سپس در قسمت نوار ابزار، روی فلش سمت راست آیکون "ارتباط با بخش ها" کلیک کنید تا فهرست امکانات این آیکون همانند تصویر زیر روی صفحه باز شود.
از این فهرست روی گزینه آخر (ارتباط کاربر با گزارش های مبتنی بر برنامه گردش کار) کلیک کنید
به این ترتیب محاوره تنظیمات این کار به شکل زیر روی صفحه باز می شود:
همانطور که مشاهده می کنید در این محاوره باید ابتدا در قسمت "گردش کار"، گردش کار مورد نظر خود را انتخاب کنید و سپس گزارش مورد نظر خود را از فهرست گزارش های مبتنی بر برنامه انتخاب و سپس در ناحیه "دسترسی"، گزینه "مجاز" را انتخاب کنید تا دسترسی کاربر مورد نظر به این گزارش مجاز شود.
تهیه گزارشهای مبتنی بر برنامه
برای مشاهده فهرست کارهای مبتنی بر برنامه کافی است منوی "گردش کار" را باز کنید و از آنجا روی گزینه "فهرست کارها مبتنی بر برنامه گردش کار" کلیک کنید (مانند شکل زیر):
به این ترتیب، محاوره انتخاب گزارش، به شکل زیر روی صفحه باز خواهد شد:
در این محاوره کافی است ابتدا گردش کار مورد نظر خود را مشخص کنید و سپس گزارش مورد نظر خود را از لیست گزارشهای مبتنی بر برنامه انتخاب کنید. به این ترتیب فیلدهای گروه پارامتر تعیین شده نیز در بخش پایین این محاوره به نمایش در می آید. در مثال بالا، فیلدهای گروه پارامتر اطلاعات مصاحبه را مشاهده می کنید. حال می توانید مقادیر مورد نظر خود را در فیلدهای فوق وارد کنید، و در انتها تکمه "نمایش گزارش" را کلیک کنید تا این گزارش تولید و روی صفحه نمایش داده شود.
نکته: حال ممکن است این سوال پیش بیاید که این گزارش طبق چه قالبی و با چه ستونهایی نمایش داده می شود .جواب این است که گزارشهای مبتنی بر برنامه در کلاینت ویندوز در قالب "فهرست کارها به همراه فیلدهای قابل تعریف" نمایش داده می شود. البته بدیهی است که اگر چند گزارش در این قالب تعریف شده باشد، گزارش پیش فرض برای نمایش انتخاب می شود. اما در کلاینت تحت وب، این گزارش با همان فرمت موجود در برگه "انجام کارها" نمایش داده می شود.
نحوه تهیه گزارشهای مبتنی بر برنامه در کلاینت تحت وب
یکی از اهداف اصلی پیاده سازی گزارشهای مبتنی بر برنامه، ایجاد امکان جستجو در کلاینت تحت وب بوده است. در واقع با توجه به امکان استفاده از گروه پارامترهای شامل فیلدهای قابل تعریف در گزارشهای مبتنی بر برنامه، این گزارشها برای کلاینت تحت وب، می تواند کارکرد جستجو در کارها را داشته باشد. در هر صورت تهیه این گزارشها در کلاینت تحت وب از دو راه امکان پذیر است: از طریق مرور کارها و از طریق زبانه گزارشها در محاوره مشخصات گردش کار
تهیه گزارش از طریق مرور کارها
برای این کار ابتدا باید همانند شکل زیر در صفحه اصلی، روی آیکون دایره ای کلیک کنید:
به این ترتیب، منوی تنظیمات به شکل زیر باز می شود:
در این محاوره روی گزینه مرور کارها کلیک کنید تا محاوره زیر باز شود:
همانند شکل بالا،حال روی لینک جستجوی کارهای یک گردش کار با استفاده از گزارش کلیک کنید تا محاوره انتخاب گزارش به شکل زیر باز شود:
از آنجایی که گزارشهای مبتنی بر برنامه در سطح گردش کار تهیه می شود لذا باید در این مرحه، گردش کار مورد نظر خود را انتخاب کنید. پس از انتخاب گردش کار، گزارش مورد نظر خود را نیز از فهرست گزارشهای موجود انتخاب کنید (شکل زیر):
حال محاوره جستجو روی صفحه باز می شود و می توانید جستجوی دلخواه خود را براساس مداخل موجود در این محاوره انجام دهید.
تهیه گزارش از طریق محاوره مشخصات گردش کار
- در برگه انجام کارها، روی وضعیت یکی از کارهای گردش کار مورد نظر کلیک کنید (همانند شکل زیر):
به این ترتیب محاوره مشخصات کار به شکل زیر روی صفحه باز می شود:
- روی آیکون سبز رنگ که در شکل بالا با فلش نشان داده شده، کلیک کنید تا محاوره مشخصات کار به شکل زیر باز شود:
- همانطور که در شکل نیز نمایش داده شده، برگه گزارش ها را کلیک کنید تا به شکل زیر روی صفحه باز شود:
- روی گزارش ویژه مورد نظر خود کلیک کنید تا محاوره گزینه ها به شکل زیر روی صفحه باز شود:
- حال مقادیر مورد نظر خود را در فیلدهای فوق وارد کنید و در نهایت این محاوره را تصویب کنید تا گزارش را مشاهده کنید.
ضمیمه: تابع تولید گزارشهای مبتنی بر برنامه
تابع تولید گزارش های مبتنی بر برنامه، تابعی است که طبق یک الگوریتم خاص، آرایه ای از کلیدهای کار را بازگشت می دهد. حال در مرحله بعد فهرستی از این کارها (که کلیدهای کار آنها بازگشت داده شده) نمایش داده می شود. حال باید ببینیم چه متدهایی می توانند آرایه ای از کلیدهای کار را تولید کنند.
متدهای ایجاد آرایه از کلیدهای کار
- جستجو در کارها (SearchWork)
function SearchWork (dbName, data): Array
اصلی ترین روال در این زمینه، متد SearchWork از WorkUtils است که با تعیین شرایط و فیلترهای خاص، و جستجو در کارها، می تواند آرایه ای از کارها را تولید کند که شرایط مورد نظر کاربر را دارا هستند. اگر به ساختار این متد که در بالا آمده توجه کنید می بینید که خروجی این متد، Array است که نشانگر آرایه ای از عددهای صحیح است که این عددها کلید کارهای بازیابی شده هستند.
- فهرست زیرگردش کارها (GetSplittedWorkList)
function GetSplittedWorkList(statusCode): Array
این متد فهرست زیرگردشهای آغاز شده از یک وضعیت جداکننده (با کد وضعیت خاص) از یک کار را بازمیگرداند. اگر کد وضعیت (statusCode) صفر پاس شود (یا اصلا پاس نشود) تمام زیرگردشهای کار را بازمیگرداند. این فهرست نیز به صورت یک آرایه حاوی کلیدهای زیرگردشهاست. توضیح این که به این متد فقط پارامتر کد وضعیت را می توانیم پاس کنیم لذا گروه پارامترهای شامل فیلدهای قابل تعریف، امکان استفاده در این متد را ندارند.
یک مثال نمونه ؛ تابع گزارش مصاحبه های در انتظار انجام (WorkScriptToDoIntereview)
برای آشنایی بیشتر با تابع تولید گزارشهای مبتنی بر برنامه، تابعی که در مثال موجود در این مستند استفاده شده، شرح داده می شود. متن این تابع به شکل زیر است:
توضیح کلی این که در گردش کار "تامین نیروی انسانی" (کد 36) از این تابع برای جستجوی کارهای ایجاد شده در زیرگردش "برگزاری مصاحبه" (کد 37) استفاده شده است. بنابراین در این تابع باید از متد SearchWork استفاده شود. در ادامه، نحوه نوشتن این متد و نحوه تاثیر گروه پارامتر در این تابع بصورت خط به خط توضیح داده شده است:
function WorkScriptRepToDoInterview(p) {
همانطور که قبلا گفته شد، این گزارش به گروه پارامتر "مشخصات مصاحبه" مرتبط است. بنابراین لازم است این گروه پارامتر تحت عنوان p به سیستم پاس شود.
if (p) {
طبق یک اصل کلی اولین چیزی که باید کنترل شود وجود یا عدم وجود مقدار برای پارامتر است چون در غیر این صورت مقادیر undefined ممکن است به خطا منجر شود. این شرط کنترل می کند که اساسا برای تولید این گزارش حداقل یکی از فیلدهای این گروه پارامتر دارای مقدار باشد.
یادآوری: گروه پارامتر "مشخصات مصاحبه" دارای فیلدهای زیر است:
- کارشناس مصاحبه کننده (expert)
- نام متقاضی (applicantName)
- تاریخ مصاحبه_حد پایین (factualDateMin)
- تاریخ مصاحبه_حد بالا (factualDateMax)
var data='<_RQST WorkflowCode="37”’;
از اینجا به بعد پارامتر اصلی SearchWork که به فرمت xml می باشد تعیین می گردد. همانطور که مشاهده می کنید در این سطر، کد گردش کاری که جستجو در آن انجام می شود تعیین شده است. در این مثال قرار است جستجو در گردش کار 37 (برگزاری مصاحبه) انجام شود. توضیح این که کد گردش کار یکی از attribute های عنصر اصلی فایل xmlیعنی _RQST است.
یکی از مشخصه (attribute) های data ، کلید کاربر کار است. یعنی این که در جستجوی کارها (SearchWork ) میتوانیم کارهایی را بازیابی کنیم که آخرین وظیفه آنها توسط کاربر خاصی انجام شده است. در این ناحیه ابتدا موجود بودن پارامتر "نام کارشناس مصاحبه کننده (expert)" چک می شود و در صورت وجود، به عنوان یک مشخصه به فایل xml اضافه می شود.
در این ناحیه، پارامتر نام متقاضی استخدام (applicantName) به عنوان یک Term جستجو به فایل xml افزوده می شود.
در این ناحیه پارامتر تاریخ مصاحبه_حد پایین (factualDateMin) به عنوان یک Term جستجو به فایل xml اضافه می شود. توضیح این که با این کار، مصاحبه هایی بازیابی می شود که از یک تاریخ خاص به بعد انجام خواهد شد.
در این قسمت، پارامتر تاریخ مصاحبه_حد بالا (factualDateMax) به عنوان یک Term به فایل xml افزوده می شود. به این ترتیب مصاحبه هایی بازیابی خواهد شد که قرار است تا یک تاریخ خاص انجام شود.
نکته: اگر به عملگر این ترم توجه کنید مشاهده می کنید که بجای Op=”<=” از Op=”<=” استفاده شده است. دقت کنید که استفاده از کاراکتر ">" (کوچکتر) در xml مجاز نیست و بجای آن باید از < استفاده کنید.
در این سطر، فایل xml بسته می شود.
var res=WorkUtils.SearchWork("", data)
در اینجا جستجو انجام می شود و نتیجه آن که کلید کارهای بازیابی شده است، به شکل یک آرایه در متغیر res ذخیره می شود.
return JSON.stringify(res);
در این سطر، آرایه کلید کارها که در سطر قبل تولید شده، به فرمت JSON بازگشت داده می شود. توضیح این که آرایه بازگشتی حتما باید به فرمت JSON باشد و در غیر این صورت سیستم با پیغام خطا متوقف خواهد شد.