معمولا در تخصیص کارِ یک کار از تلفیقی از معیارهای مختلف استفاده میشود: مثلا "نقش و سازمان" یا "سطح سمت و سازمان". کم پیش میآید که یک یا چند سمت به صورت استاتیک به عنوان مسئول کار تعیین شود.
ولی اگر چنین چیزی میخواهید، باید در یک اسکریپت، idهای سمتهای مورد نظر را در یک کالکشن به عنوان متغیر فرآیند ذخیره کنید و سپس در "معیار تخصیص کار: سمت (Post)" فیلد Expression را با این متغیر مقداردهی کنید.
آپدیت:
معیارهای تخصیص کار باهم and میشوند. بنابراین، استفاده از دو معیارِ هم نوعِ سمت (Post) با مقادیر مختلف، باعث خالیشدن نتیجهی ارزیابی خواهد شد.
مفهوم کاندید شدن برای تسک: هنگام اجرای فرآیند و رسیدن به آن تسک، معیارهای تخصیص کارِ آن تسک evaluate میشوند. اگر نتیجه بیش از یک سمت باشد، کار به صف کارهای هر یک از کاندیدها اضافه میشود و هر کدام که زودتر کار را تصاحب کرد، مسئول انجام کار میشود (و کار از صف کار بقیه کاندیدها خارج میشود).
راه حل پیشنهادی: اگر چند سمت میتوانند تسکی را انجام دهند، یک نقش ایجاد کنید و به هر یک از آن سمتها تخصیص دهید. در تخصیص کار آن تسک از آن نقش استفاده کنید.
استفاده از چند سمت مشخص: اگر میخواهید، چند سمت مشخص را به صورت مستقیم کاندید انجام کار کنید باید در sequence flow قبل از تسک (یا هر مولفهای که قطعا قبل از تسک موردنظر اجرا میشود) یک Execution Listener از نوع اسکریپت اضافه کنید. و مشابه این اسکریپت (به زبان groovy) را وارد کنید:
import ir.asta.wise.portal.security.service.query.expression.Restrictions;
import ir.asta.wise.portal.security.service.query.post.PostCriterion;
String[] values = ["1001", "1002"];
def posts = postQueryFactory.create().add(new PostCriterion(Restrictions.in("code", values))).executeQuery();
def postIds = [];
for (def post : posts) {
postIds.add(post.getId());
}
execution.setVariable("taskAssigneePostIds", postIds);
دقت کنید، اسکریپت بالا سمتهای با کد 1001 و 1002 را لود میکند و idهای آنها را در یک متغیر از جنس لیست (به نام postIds) قرار میدهد و حاصل را در یک متغیر فرآیندی (به نام taskAssigneePostIds) قرار میدهد.
حال در تخصیص کارِ تسک مورد نظر باید از معیار Post و با expression با مقدار زیر استفاده کرد:
${taskAssigneePostIds}