همانطور که می دانید، یکی از قابلیتهای سیستم مدیریت فرایندهای نوسا، امکان تولید لینک برای کارکردهای مختلف مثل ایجاد کار، انجام وظیفه، عملیات خاص، منابع دیجیتال و ...در گردش کارهاست. دسترسی به این لینکها تا به حال تنها از طریق کلاینت وب بود.
لینکها در کلاینت وب
همانطور که گفته شد یکی از امکاناتی که از قبل هم در سیستم مدیریت فرایندها موجود بود، امکان تولید لینکهای مختلف برای قابلیتهای مختلف سیستم بود. این لینکها به شرح زیر است:
- ایجاد کار جدید
- کار (انجام وظیفه)
- انجام عملیات ویژه (خاص)
- دریافت و مشاهده منابع دیجیتال
- ملاحظه گزارشهای ویژه (مبتنی بر برنامه)
- وضعیت پایگاه داده
لینکهای موجود در کلاینت وب را می توانیم در متنهای html درج کنیم و در صفحات شخصی سازی شده در سایت های اختصاصی استفاده کنیم. این نحوه کار با لینکها را می توانیم از نوع استاتیک یا ایستا نامگذاری کنیم. یعنی این که تولید لینکهای کارها و عملیات خاص توسط سیستم و بدون دخالت و نقش کاربر انجام می شود و کاربر تنها می تواند این لینکها در صفحات وب دلخواه خود جایگذاری (Embed) نماید. برای اطلاعات بیشتر در مورد این نوع از لینکها و کاربرد آنها به مقاله زیر مراجعه کنید:
توسعه کاربری سیستم مدیریت فرایندها در وب: ارائه خدمات فرایند در پورتالهای سازمانی
در ادامه مطلب، با قابلیت دیگری از لینکها آشنا می شویم که فعال تر و پویاتر است.
تولید لینکها از طریق برنامه گردش کار
حال می توانیم بجای لینکهای استاتیک، لینکها را در برنامه گردش کار به شکل داینامیک تولید و به ذینفعان مرتبط ارسال کنیم. البته این امکان فعلا فقط برای سه مورد از لینکها یعنی لینک به کار (انجام وظیفه)، لینک عملیات خاص و لینک به منابع دیجیتال پیاده سازی شده است که در این مطلب به دو مورد اول یعنی لینک به کار و لینک به عملیات خاص می پردازیم. به این ترتیب در شرایط و مراحل خاصی از کار، می توانیم لینک کار یا عملیات خاص را تولید کنیم و این لینک را از طریق پیامک یا پست الکترونیک به کاربر مرتبط ارسال کنیم. کاربر مقصد از طریق این لینک می تواند وظیفه یا عملیات خاص مرتبط به خود را اجرا نماید.
تفاوتهای لینکهای استاتیک و داینامیک
- لینکهای داینامیک همیشگی نیستند و در لحظه تولید می شود.
- این لینکها قرار نیست در صفحات html جایگذاری شود بلکه قرار است از طریق پیامک یا ایمیل به ذینفع مورد نظر ارسال شود.
در اینجا ممکن است این سوال پیش بیاید که اصولا لینکهای داینامیک چه ضرورتی دارند و کاربرد آنها کجاست؟
ضرورتها یا کاربردهای لینک کار و عملیات خاص
کاربرد اصلی این لینکها برای استفاده بعضی از کاربران خاص است. این کاربران شرایط و ویژگیهای خاصی دارند که ایجاب می کند از لینکها استفاده کنند. به چند دسته از این نوع کاربران خاص توجه کنید:
- کاربران غیرسازمانی. این کاربران در فرایندها ذینفع هستند اما عضو سازمان نیستند. برای مثال مشتریان که قرار است مثلا فاکتور فروش را تایید را رد کنند. یا مثلا قرار است میزان رضایت خود از خدمات پشتیبانی را اعلام کنند. بدیهی است که این دسته از کاربران نیازی به آموزش کلاینت وب ندارند.
- کاربران رده بالای سازمانی از قبیل سرپرستان و مدیران . این دسته از کاربران به دلیل شلوغی بیش از حد و درگیری با مسائل متعدد، وقت یا حوصله لازم برای آموزش و کار با کلاینت را ندارند. بویژه در مواردی که قرار است این کاربران به سرعت یک تصمیم گیری را انجام دهند یا گزارش خاصی را دریافت نمایند.
- کاربرانی که مهارتهای فنی دارند اما به دلایل مختلف مثل سن بالا یا سطح سواد پایین. توانایی یادگیری و کاربری کلاینت را ندارند.
مثالهای لینک به کار
مثال 1: فرض کنید در گردش کار "فروش یک محصول"، در یک مرحله از کار، قرار است که مدیر مالی، قیمت مجموع فاکتور فروش را رد یا تصویب کند.
مثال 2: فرض کنید که در یک گردش کار خرید کالا، قرار است خرید کالاهای با قیمت بیش از 10 ملیون تومان بطور مستقیم توسط مدیر عامل تصمیم گیری شود.
مثالهای لینک به عملیات خاص
مثال 1: فرض کنید قرار است در بازه های زمانی خاص، پیامکهای خاصی برای مشتریان ارسال شود. و سپس فهرست مشتریان نمایش داده شود. (عملیات خاص از نوع انجام کار + اطلاع از وضعیت)
مثال 2: فرض کنید قرار است مبلغ وام مصوب به درخواست کننده، در یک مرحله از کار، توسط مدیر مالی ویرایش و تصویب نهایی شود. (عملیات خاص از نوع انجام کار)
مثال 3: فرض کنید قرار است مدیر شرکت از وضعیت یک کار مطلع شود، برای مثال در گردش کار بازرگانی خارجی قرار است ورود یک کالا به انبار، به اطلاع مدیر شرکت برسد. (عملیات خاص از نوع اطلاع از وضعیت)
مثال 4: فرض کنید قرار است در بازه زمانی خاص (مثلا آخر هر ماه)، فهرست فروشهای جدید شرکت به اطلاع مدیر عامل برسد. (عملیات خاص از نوع اطلاع از وضعیت)
در این موارد روش ارسال لینک کار (یا عملیات خاص) بهینه ترین روش برای ادامه فرایند می باشد.
توجه کنید: دسترسی به عملیات خاص از طریق لینک به کار نیز انجام پذیر است، چون اگر کاربر به کار دسترسی داشته باشد می تواند جزئیات کار را باز کند و عملیات خاص مورد نظر خود را اجرا نماید. اما لینک مستقیم به عملیات خاص دو مزیت عمده دارد:
- لینک به عملیات خاص، در واقع یک نوع میانبر است که باعث می شود کاربر سریع تر به عملیات خاص دسترسی داشته باشد.
- لینک به کار باعث می شود که کاربر به تمام عملیات خاص دسترسی داشته باشد در حالی که طراح قصد دارد که در آن لحظه معین، کاربر فقط به یکی از عملیات خاص دسترسی داشته باشد.
هر دو مورد مزیتهای فوق بخصوص برای کاربران خاص که قبلا توضیح داده شد، بسیار کاربردی است و از اشتباهات سهوی کاربران جلوگیری می کند.
حال که با مفهوم و الزامات لینکهای کار و عملیات خاص آشنا شدیم بهتر است با چند مثال عملی با نحوه تولید لینکها در برنامه گردش کار آشنا شویم.
نحوه تولید لینکها در برنامه گردش کار
لینک به کار
برای تولید لینک به کار از تابع WorkUtils.GetWorkLink استفاده می کنیم. ساختار این تابع به شکل زیر است:
function GetWorkLink (webServiceUrl, workKey, authMode, dbName, expirationTime): String
پارامترهای این تابع به شرح زیر است:
webServiceUrl: آدرس سرویس وب مدیریت فرآیندهاست. برای مثال https:\\nosa-test.nosa.com\reposwebclient
workKey: کلید کار مورد نظر است.
authMode: نوع احراز هویت است. هر روش احراز هویت یک کد دارد که شامل مقادیر زیر است:
LinkEnums.WebAuthMode.Basic = 0
LinkEnums.WebAuthMode.Google = 1
LinkEnums.WebAuthMode.SMS = 2
LinkEnums.WebAuthMode.Anonymous = 99
توضیح این که اگر این پارامتر تعیین نشود، آنگاه روش Basic(0) لحاظ میشود.
:dbName نام پایگاه اطلاعات است که اگر تعیین نشود یا خالی وارد شود پایگاه جاری را در نظر می گیرد.
:expirationTime زمان انقضای لینک است. اگر این پارامتر تعیین نشود یعنی لینک دائمی است و زمان انقضا ندارد.
خروجی این تابع، یک رشته حرفی (String) حاوی لینک به کار مورد نظر است.
مثال: ارسال لینک کار به مدیر عامل برای تایید خرید کالاها
به گردش کار خرید کالاها توجه کنید:

ملاحظه می کنید که در این گردش کار و در وضعیت "در انتظار بررسی و تامین اعتبار"، باید مدیر مالی تصمیم بگیرد به این صورت که یا باید دستور تامین اعتبار را بدهد یا کار را لغو کند. حال فرض کنید که می خواهیم کار در این وضعیت را به صورت لینک و در یک پیامک به مدیری مالی ارسال کنیم. برای این کار یک تابع اجرایی به شکل زیر می نویسیم:
function WorkTaskSendDecisionSMS() {
var WLink=WorkUtils.GetWorkLink("https://nosa-test.nosa.com/reposwebclient", WorkState.WorkKey );
var smsText=URLShortener(WLink);
WorkNotifUtils.CreateNotification (4, "9123456789", smsText, "", WorkState.WorkKey);
}
نکته ای که در اینجا لازم به توضیح است این است که لینکهای سیستم، عبارتهای بسیار طولانی هستند که بهتر است با یک ابزار کوتاه کننده لینک ها (Link Shortener) این عبارات را به شکل کوتاه تولید و ارسال کنیم. سامانه های متعددی در اینترنت موجودند که این سرویس را ارائه می کنند که می توانید با توجه به شرایط آنها و به انتخاب خود از هر یک از این سامانه ها استفاده کنید. یکی از این سامانه ها در شرکت نوسا به شکل یک تابع بنام URLShortener در کتابخانه NosaGenLib توسعه داده شده است و مشتریان نوسا می توانند از این تابع برای کوتاه کردن متن لینکها استفاده کنند. برای توضیحات بیشتر در این زمینه به مطلب زیر مراجعه کنید:
کتابخانه کوتاه کردن لینک های بزرگ URL Shortener
به این ترتیب، لینک کار به شکل زیر به گیرنده ارسال می شود:

ملاحظه می کنید که ارسال لینک به تنهایی و بدون توضیحات لازم، ممکن است برای گیرنده مبهم باشد و او را در تصمیم دچار تردید نماید لذا توصیه می شود که همراه با این لینک، حداقل شرح کار نیز ارسال شود. برای این کار تابع ارسال لینک را به شکل زیر تکمیل می کنیم:
function WorkTaskSendDecisionSMS() {
var WLink=WorkUtils.GetWorkLink("https://nosa-test.nosa.com/reposwebclient", WorkState.WorkKey);
var smsText= WorkState.WorkDesc + "\n" ;
smsText+=URLShortener(WLink);
WorkNotifUtils.CreateNotification (4, "9123456789", smsText, "", WorkState.WorkKey);
}
در این تابع عبارت با رنگ قرمز در واقع شرح کار است که به این ترتیب پیامک ارسالی به شکل زیر خواهد بود:

حال با کلیک روی لینک فوق، کار مورد نظر به شکل زیر روی صفحه باز می شود:

حال مدیر مالی می تواند این کار را باز کند و وظیفه مورد نظر خود را انجام دهد:

لینک به عملیات خاص
برای تولید لینک عملیات خاص از تابع WorkUtils.GetActionLink با ساختار زیر استفاده می کنیم که شباهت زیادی به تابع تولید لینک به کار دارد:
function GetActionLink (webServiceUrl, workKey, actionCode, authMode, dbName, expirationTime): String
:webServiceUrl آدرس سرویس وب مدیریت فرآیندهاست. برای مثال : https://nosa-test.nosa.com/reposwebclient
:workKey کلید کار مورد نظر است.
actionCode: کد عملیات خاص مورد نظر است.
:authMode نوع احراز هویت است. این پارامتر، یک عدد است که هر عدد نشانگر یک روش احراز هویت خاص است.
LinkEnums.WebAuthMode.Basic = 0
LinkEnums.WebAuthMode.Google = 1
LinkEnums.WebAuthMode.SMS = 2
LinkEnums.WebAuthMode.Anonymous = 99
توضیح این که اگر این پارامتر تعیین نشود، روش Basic(0) لحاظ میشود.
:dbName نام پایگاه اطلاعات است که اگر تعیین نشود یا خالی وارد شود پایگاه جاری لحاظ میشود.
expirationTime: زمان انقضای لینک است. و اگر این پارامتر تعیین نشود یعنی لینک دائمی است و زمان انقضا ندارد. خروجی این تابع، یک رشته حرفی (String) حاوی لینک به عملیات خاص مورد نظر است.
همانطور که می دانید عملیات خاص بر سه نوع است: 1- انجام کار 2- اطلاع از وضعیت و 3- ترکیبی (انجام کار + اطلاع از وضعیت) در ادامه برای هر نوع از عملیات خاص یک مثال ذکر می شود:
عملیات خاص از نوع انجام کار
مثال: تغییر کارشناس کارهای پشتیبانی
فرض کنید یک کارشناس پشتیبانی چند کار در دست انجام دارد و این کارشناس به هر دلیلی با شرکت قطع همکاری می کند. حال در این موارد سرپرست پشتیبانی باید کارشناس دیگری را جایگزین او کند و در واقع کارهای کارتابل کارشناس قبلی به کارتابل کارشناس جدید منتقل شود. از طرف دیگر یک گردش کار مدیریت منابع انسانی وجود دارد که قطع همکاری یک کارمند را به شکل پیام به گردش کار مدیریت پشتیبانی اعلام می کند.
در گردش کار پشتیبانی همانطور که در شکل زیر نشان داده شده است، یک عملیات خاص تحت عنوان «جایگزینی کارشناس» تعریف شده است:

حال می خواهیم در این موارد، از طرف گردش کار پشتیبانی یک لینک به این عملیات خاص را تولید و به سرپرست پشتیبانی ارسال کنیم. در این مثال، این کار از طریق پردازش پیام و به شکل زیر انجام می شود:
function WorkProcessMessage() {
var key= WorkMessage.KeyStr;
var Employee=WorkMessage.StringParam;
if (key =="LeftEmployee" ) {
var ALink=WorkUtils.GetActionLink ("https://nosa-test.nosa.com/reposwebclient", WorkState.WorkKey, 2);
var smsText="لطفا برای کارشناس زیر جایگزین تعیین کنید"+ "\n";
smsText+=Employee + “\n”;
smsText+=URLShortener(ALink);
WorkNotifUtils.CreateNotification(4, "9123456789", smsText, "", WorkState.WorkKey;
}
}
در این مثال، گردش کار پشتیبانی به محض دریافت پیام با عبارت کلیدی "LeftEmployee" لینک عملیات خاص جایگزینی کارشناس را برای سرپرست پشتیبانی پیامک می کند. ضمنا در پیامک توضیح می دهد که کدام کارشناس شرکت را ترک کرده است.
عملیات خاص از نوع اطلاع از وضعیت
در مورد عملیات خاص لازم به توضیح است که چون امکان «ملاحظه پیش نمایش وضعیت کار»، «ملاحظه پیش نمایش وضعیت کار به تفکیک آرایه ها» ، «ملاحظه وضعیت کار به فرم Word » و «ملاحظه تراکنشهای کار» در کلاینت وب وجود ندارد لذا فقط دو نوع «ملاحظه فرم عمومی» کار و «ملاحظه فهرست کارها» را می توانیم بصورت لینک در کلاینت ویندوز مشاهده کنیم. بنابراین در اینجا یک مثال از نوع ملاحظه فهرست کارها را شرح می دهیم:
مثال 1: فیش حقوقی کارکنان
فرض کنید در یک گردش کار پرسنلی، یک عملیات خاص از نوع اطلاع از وضعیت به نام «ملاحظه فیش حقوقی» تعریف شده است که از نوع «ملاحظه فرم عمومی» است. یعنی یک فرم عمومی طراحی شده است که در آن اطلاعات فیش حقوقی نمایش داده می شود. حال فرض کنید برای راحتی کارکنان قرار است ابتدای هر ماه، برای کارکنان سازمان، فیش حقوقی پیامک شود.
برای مثال فرض کنید گردش کار پرسنلی در ابتدای هر ماه، اطلاعات فیش حقوقی کارکنان را از پایگاه حقوق و دستمزد در یک آرایه می خواند و سپس در یک حلقه برنامه، فیلدهای اطلاعاتی مرتبط با هر یک از کارکنان را یک به یک مقدار دهی کرده و لینک عملیات خاص ملاحظه فیش حقوقی را به آن کارمند پیامک می کند.
function WorkTaskSalarySlip() {
var ALink=0;
for (var i=0; i
WorkState.baseSalary=personInfo.base;
WorkState.overTime=personInfo.over;
WorkState.housing=personInfo.house;
WorkState.Insurance=personInfo.insur;
WorkState.pureSalary=personInfo.pure;
WorkState.mobileNum=personInfo.mobile;
ALink= WorkUtils.GetActionLink ("https://nosa-test.nosa.com/reposwebclient", WorkState.WorkKey, 4, 0, “”, 30);
Var smsText=” "فیش حقوقی+"\n";
smsText+=URLShortener(ALink);
WorkNotifUtils.CreateNotification(4, WorkState.mobileNum, smsText, "", WorkState.WorkKey );
}
}
در این مثال، اطلاعات فیش حقوقی کارکنان در یک آرایه بنام personInfo خوانده شده است که هر سطر از این آرایه مربوط به یکی از کارکنان می باشد. ضمنا کد عملیات خاص ملاحظه فیش حقوقی 4 است و مدت 30 روز مهلت انقضا برای این لینک تعیین شده است. دلیل این قضیه این است که فیش حقوقی تا حداکثر پایان ماه معتبر است و در آن زمان منقضی می شود.
این لینک در موبایل به شکل زیر دیده می شود:

ملاحظه این لینک در سایز دسکتاپ به شکل زیر است:

و در دیوایس های دیگر مثل تبلت و موبایل بسته به عرض صفحه نمایش، این فرم به شکل دوستونی یا تک ستونی نمایش داده خواهد شد. برای مثال در موبایل و در حالت portrate فیش حقوقی به شکل زیر نمایش داده می شود:

مثال 2: فهرست کارهای در شرف سررسید در هفته جاری
فرض کنید در گردش کار مدیریت کارهای اداری، یک عملیات خاص تعریف شده است که فهرست کارهای در حال سررسید در 7 روز آینده را به کاربر نمایش می دهد. حال فرض کنید یک گردش کار بالادستی وجود داردکه در فواصل زمانی معین یک پیام به گردش کار مدیریت کارهای اداری ارسال می کند و به تبع آن، گردش کار مدیریت کارهای اداری یک لینک از عملیات خاص را برای سرپرست کارهای اداری پیامک می کند.
function WorkProcessMessage() {
var key= WorkMessage.KeyStr;
if (key =="DueInCurrentWook" ) {
var ALink=WorkUtils.GetActionLink ("https://nosa-test.nosa.com/reposwebclient", WorkState.WorkKey, 3, 0, “”, 7);
var smsText="فهرست کارهای در حال سررسید در هفته جاری"+ "\n";
smsText+=Employee + “\n”;
smsText+=URLShortener(ALink);
WorkNotifUtils.CreateNotification(4, "9123456789", smsText, "", WorkState.WorkKey;
}
}
در این مثال، کد عملیات خاص 3 است. این لینک دارای زمان انقضا به مدت 7 روز است. بدیهی است که فهرست کارهای سررسید در هفته جاری تا پایان هفته معتبر است و پس از آن منقضی می شود.
عملیات خاص از نوع ترکیبی
مثال: تغییر کارشناس و ملاحظه کارهای در دست اقدام کارشناس جدید
در مثال اول که از نوع انجام کار بود سرپرست پشتیبانی، فقط کارشناس را تغییر می داد اما اگر بخواهیم فهرست کارهای در دست انجام کارشناس جدید را نیز ملاحظه کنیم باید از عملیات خاص ترکیبی استفاده کنیم.
توضیح: واقعیت این است که اساسا عملیات خاص مستقل از وضعیت کارهاست و لذا ارسال لینک عملیات خاص در جریان کارها و در وضعیتهای مشخص، تعارض و تناقض با ویژگی ذاتی عملیات خاص (مستقل بودن از وضعیت) دارد. اما در موارد خاصی ممکن است این امکان مفید و قابل استفاده باشد بویژه در فرایندهایی که قرار است یک عملیات خاص را در یک گردش کار دیگر اجرا کنند که باید در عمل مصداقهای واقعی این نوع از کارها را پیدا کنیم.
سوال چالشی: آیا می توانید مثالهای واقعی دیگری در مورد استفاده از لینک عملیات خاص بزنید؟ دوستانی که در برخورد مستقیم با مشتریان بوده اند و نیازمندیهای آنها را درک کرده اند احتمالا می توانند مثالهای خوبی را در این زمینه مطرح کنند که می تواند در روشن تر شدن این مطلب و درک بهتر آن بسیار سودمند باشد.