Creating, pursuing and routing a case in processmaker by webservices from an external website

مقدمه

در این آموزش قصد داریم برنامه‌ای وبی که با تکنولوژی دلخواهی (مانند net.) را توسعه دهیم که به نرم‌افزار Processmaker متصل شده و فرایند مورد نظر را شروع کند. سپس در ادامه فرایند را به مرحله دلخواه هدایت می‌کنیم. برای این منظور ابتدا مقدماتی از مفاهیم را تشریح می‌کنیم و سپس قدم به قدم فرایند ساخت و هدایت Case جدید را توضیح می‌دهیم.

پیش نیاز

معرفی بخش Rest Api سایت Processmaker

این بخش شامل معرفی و آموزش برخی از وب سرویس‌های نرم‌افزار Processmaker است. در این بخش قابلیت‌های فراخوانی وب سرویس‌هایی برای ایجاد فرایند، هدایت فرایند، تخصیص مجدد به فرد جدید، متوقف کردن فرایند، اجرای تریگرهای فرایند و… با مثال‌های مختلف آموزش داده شده است.

دسترسی به پایگاه داده نرم افزار Processmaker و جداول Process و Task

برای دسترسی به پایگاه داده نرم‌افزار Processmaker می‌توان در سیستمی که این نرم‌افزار نصب شده است، از طریق منوی Start کنسول این نرم‌افزار را باز کرده و با گزینه Open PhpMyAdmin به صفحه دسترسی پایگاه داده دسترسی داشته باشید.

با نام کاربری و رمز عبور موردنظر وارد شده و از منوی سمت چپ پایگاه داده bitnami_pm را با دوبار کلیک انتخاب می‌کنیم. سپس برای دسترسی به تابع Process و Task نام این جداول را در فیلد جستجو تایپ کرده و Enter می‌کنیم.

از این طریق به جداول این نرم‌افزار دسترسی داریم. حال مقادیر PRO_UID فرایندی مد نظرمان را برای استفاده در کد از جدول Process برمی‌داریم.

همین طور مقدار TAK_UID را از جدول Task برمی‌داریم. نکته‌ای که در این قسمت لازم است توجه فرمایید این است که دقت فرمایید مقدار TAK_UID مربوط به کاری را بردارید که داخل فرایند مدنظر شما است. برای این منظور می‌توانید مقدار PRO_UID فرایند مد نظر خود را در فیلد Filter Rows وارد کنید تا تنها کار های این فرایند را به شما نمایش دهد.

معرفی بخش “ثبت نام برنامه خارجی” برای دسترسی به سرویس‌های نرم‌افزار

نرم‌افزار Processmaker برای برنامه نویسانی که می‌خواهند برنامه‌ای توسعه دهند که از قابلیت‌های این نرم‌افزار استفاده می‌کند امکانات مختلفی قرار داده است. اما برای این منظور باید حتما در نرم‌افزار Processmaker، درخواست دسترسی به نرم‌افزار ثبت شده و از سمت نرم افزار کدی دریافت شود.

به این ترتیب نرم افزار در برابر دسترسی های غیر مجاز محفوظ بوده و تنها کسانی که از طریق مدیر سیستم Processmaker در نرم‌افزار معرفی شود اجازه استفاده از این قابلیت ها را خواهند داشت.

معرفی دسترسی‌های کاربران در Processmaker

در نرم‌افزار Processmaker استفاده از قابلیت‌های مختلف مشروط به داشتن دسترسی‌های مربوطه برای کاربر استفاده کننده است. برای بررسی دسترسی های کاربر بنابه نقش یا Role کاربر می‌توانید از بخش زیر به دسترسی ها راه پیدا کنید.

Admin > Users > Roles > Permissions

معرفی مفهوم Case در Processmaker

Case یک نمونه اجرا شده از فرایند است. هر فرایند دارای نقشه کار فرایند است که با نمادهای BPMN نشان داده می‌شود. یک Case یک نمونه اجرایی از فرایند که بر اساس آن نقشه حرکت می‌کند. بنابراین هر زمان که کاربر فرایندی را اجرا می کند یک Case ساخته می‌شود و بنابر ساختار نقشه یا مدل فرایند بین Task ها و افراد مختلف جابجا می‌شود.

معرفی مفهوم Route کردن فرایند در Processmaker

Route کردن به معنای جابجا کردن کار درحال اجرای یک Case به کاری دیگر است. به عنوان مثال می‌توان فرایندی که هم اینک در Task 3 و در دست کاربر 1 می‌باشد را به Task 4 که کاربر 5 می‌باشد Route می‌کنیم و این فرد در کارتابل فرایند خود این کار را می‌بیند.

ثبت نام برنامه خارجی” برای دسترسی به قابلیت‌های وبسرویسی Processmaker

برای ثبت نام برنامه خارجی از این مسیر به صحفه آموزش ثبت نام برنامه خارجی دسترسی خواهید داشت.

در این مسیر با استفاده از گزینه New به صحفه ثبت برنامه وارد می‌شوید. در این بخش نام دلخواهی که بهتر است نام برنامه‌ای که قصد دسترسی به Processmaker را دارد را وارد می‌کنیم. در بخش Web Site نیز هر مقدار دلخواه که بهتر است در صورت وجود آدرس اینترنتی نرم‌افزاری که قصد دسترسی به Processmaker را دارد وارد کنیم. در مورد آموزش جاری، نیازی نیست آدرس معتبری در این فیلد وارد شود.

در صفحه بعدی نرم‌افزار، مقادیر Client ID و Client Secret را ارائه می‌دهد. این مقادیر در کدهای آینده استفاده می‌شود.

احراز هویت با username و password و بدست آرودن access token

دراین قسمت شروع به نوشتن و توسعه نرم‌افزار می‌کنیم. لازم بذکر است که الزامی به استفاده از تابعی با این نام و جزئیات نیست و هرتابعی به هر زبان برنامه نویسی که به آدرس webservice متصل شده و داده‌ها را رد و بدل کند کافی است. این نکته برای تمام کدها و تابع‌های ادامه معتبر است. ما در این مثال از یک webform با تکنولوژی asp.net استفاده کرده ایم و محیط توسعه ای که انتخاب کردیم Visual Studio می‌باشد.

در قدم اول با رایت کلیک کردن روی پروژه یک Sevice  WCF اضافه می‌کنیم.

فایل‌های IService1.cs و Service1.svc به پروژه شما اضافه می‌گردد.

کلاس Service1 از Interface به نام Iservice1 ارث بری می‌کند و متدهایی که آنجا تعریف شده را پیاده سازی می‌کند.

در قدم بعدی کدهای احراز هویت را می‌نویسیم. برای این منظور ابتدا متغیر ها را با مقادیر اولیه متناسب با سیستم خود پر می‌کنیم. جهت یادآوری مقادیر clientId و clientSecret را در مرحله ثبت برنامه خارجی از سیستم دریافت کردیم.

متد login داخل فایل بصورت زیر پیاده سازی می‌شود.

متدهای CreateNewCaseو Login و RouteCase در داخل کلاس CaseModel تعریف شده‌اند.

که در فایل NewCaseparameter.cs قرار دارد.

ساخت Case جدید از فرایند موردنظر

تا به این مرحله احراز هویت لازم برای استفاده از قابلیت وبسرویس ساخت Case جدید آماده شده ایم. در مرحله نیز مانند مرحله قبل ابتدا متغیرها را با مقادیر اولیه متناسب با سیستم خود پر می‌کنیم. مجددا جهت یادآوری مقادیر pro_uid و tas_uid از جداول Process و Task که در بخش قبل توضیح داده شد استخراج شده و در متغیرهای مربوطه از آنها استفاده می‌کنیم.

در داخل متد CreateNewCase متد CallRestapi با پارامترهای apiUrl, restApiParameter, token, “POST” صدا زده می‌شود.

وب سایت طراحی شده ما بصورت زیر می‌باشد.

کد پشت دکمه Create case بصورت زیر می باشد.

با Deserialize کردن متغیر result می‌توانید به شماره Case که ساخته شده است دسترسی داشته باشیم ، در این مثال این شماره را برروی یک Label نشان می دهیم.

اگر Processmaker را با admin لاگین کنیم در Case  ، inbox های ایجاد شده را می‌بینیم.

برای انتقال داده‌های textbox ها متغیرهایی به همین نام در Processmaker باید ایجاد شده باشد.

این متغیرها را می‌توانید در یک Dynaform استفاده نمایید.

هدایت یا Route فرایند به کار موردنظر

در برنامه‌ای که در اینجا توسعه داده‌ایم فرآیند CreateNewCase و Route کردن هم زمان صورت گرفته است.

(تابع Route از داخل CreateNewCase صدا زده می‌شود.)

در این مثال مدل فرآیند ما بصورت زیر می‌باشد:

اگر به Processmaker توجه کنیم میبینیم که Case ساخته شده در Inbox و Task برابر Task2 می‌باشد.

(Routing صورت گرفته است)

اگر در قطعه کد ، قسمتی که routing صورت می‌گیرد را Comment کنیم :

متوجه می‌شویم که case جدید در drafts قرارگرفته و Task برابر Task1 می‌باشد.

پی گیری وضعیت case ایجاد شده و اینکه در چه مرحله ای قرار دارد

در فاز اول یک anonymous user با مراجعه به وب سایت یک case ایجاد کرده است، در این فاز با توجه به شماره Case برگشتی، این کاربر می تواند پیگیری نماید تا Task در چه مرحله‌ای هست و در صورت وجود شرایط مورد نظر ، آن case را از طریق وب سایت به Task بعدی هدایت (route) کند.

پیگیری وضعیت case

در صفحه بعدی وب سایت، کاربر می تواند با این شماره Case وضعیت فعلی کار خود را پیگیری کند.

پیگیری وضعیت case
پیگیری وضعیت case
پیگیری وضعیت case

و کار در کارتابل فرد بعدی که Task3 به آن assign شده قرار می گیرید.

پیگیری وضعیت case

در قسمت code behind دکمه show data کد زیر قرار دارد.

که با استفاده از یک connection و query مربوطه یک datatable را پرکرده و این Datatable گرید مورد نظر را پر میکند.

پیگیری وضعیت case

در قسمت code behind دکمه route to next task کد زیر قرار دارد.

پیگیری وضعیت case

نکته حایز اهمیت این است که برای استفاده از متد Route_only (این متد فقط عمل Route کردن را انجام می‌دهد و قسمت create از آن حذف شده است.) ما به uid این task  نیاز داریم که در این مثال آنرا از همان گرید نمایش دهنده اطلاعات دریافت کرده‌ایم.

در پایان نمونه سورس کامل پروژه در قالب فایل rar برای دانلود قرار داده شده است.