باید نمودار به گونهای طراحی شود که پس از رسیدن به مهلت اولیه، کار لغو شده و یک بار دیگر کار به کاربر assigne شود. در این بین میتوان با فراخوانی سرویس کاربر را از مهلت اقدام با خبر کرد.
مراحل زیر باید انجام شود:
-
روی تسک، یک boundary timer event اضافه میکنیم که به یک gateway متصل است. یک یال خروجی از gateway به تسک برمیگردد و یک یال دیگر (با default flow condition) به یک End Event متصل است.
-
بر روی یال متصلکنندهی gateway به تسک (b)، با استفاده از یک Execution Listener از نوع اسکریپت، یک متغیر با نام task2DueDate و با مقدار P5D ایجاد میکنیم:
execution.setVariable('task2DueDate','P5D');
-
همچنین روی یال b یک شرط عبور (flow condition) باید قرار دهیم که تنها در صورتی که متغیر task2DueDate وجود نداشت، این یال انتخاب شود. به عبارت دیگر با توجه به نیازمندی، تنها یک بار باید این loop انجام شود:
${!execution.hasVariable('task2Duedate')}
-
با توجه به این که برای یال c گزینهی مسیر پیشفرض (default flow) انتخاب شده است، در صورتی که شرط b برقرار نباشد، فرایند به اتمام میرسد.
-
مقدار عبارت زمانی (Time Duration) از boundary timer event (جنبهی اجرایی) و مقدار فیلد due date از Task 2 (جنبهی نمایشی) باید برابر با عبارت زیر شود. مقدار این عبارت، زمانی که متغیر task2DueDate وجود نداشته باشد، 3 روز است.
${execution.hasVariable('task2DueDate') ? task2DueDate: 'P3D'}
برای اطلاعرسانی کاربر:
-
یک Task Listener از نوع فراخوانی سرویس (Service Call) بر روی Task 2 قرار میدهیم و سرویس ارسال پیام به شهروند (که مستندات آن در ویکی موجود است) را فراخوانی میکنیم.
-
در این سرویس میتوان متن پیام را به تفکیک کانال (اینترنتی، پیامک، ایمیل و تلگرام) با استفاده از متغیرهای پیشفرض و یا تعریف شده نوشت. برای مثال در متن پیام زیر از متغیرهای پیشفرض bpm_businesskey (شماره پیگیری) و bpm_dueDate (مهلت انجام کار) استفاده شده است:
كارفرماي محترم،
تيكت با شماره پيگيري {{bpm_businesskey}} براي اصلاح به شما ارسال شد. براي انجام اصلاحات تا {{bpm_dueDate}} فرصت داريد.