تا قبل از این، تنها راه ارتباط و تعامل سیستم های دیگر با سیستم مالی نوسا امکان استفاده از API های سیستم مالی از طریق سرور Soap بود اما هم اکنون در سیستم مدیریت فرآیندها یک سرویس Rest با عنوان AccCPUConnector راه اندازی شده است که می تواند انواع درخواستهای کلاینتهای Rest سیستمهای دیگر را از راه دور دریافت کند و پاسخهای مرتبط با آن را به آن کلاینتها برگرداند. شماتیک این مدل را در شکل زیر ملاحظه می کنید:
توضیح: البته این سرویس از نظر تئوری منحصر و محدود به سیستم مالی نوسا نیست و امکان اتصال و تعامل با هر پایگاه داده دیگری اعم از مالی و غیرمالی برپایه SQL Server را فراهم می کند اما از آنجایی که قریب به اتفاق مخاطبان این سیستم، مشتریان سیستم مالی نوسا هستند تمرکز این مطلب روی سیستم مالی نوسا قرار گرفته است.
هدف از این سرویس
هدف اصلی از راه اندازی این سرویس، امکان ارائه خدمات ابری (Cloud) به مشتریان سیستم مالی نوساست. بنابراین مشتریان سیستم مالی نوسا از این پس می توانند با راه اندازی این سرویس در مرکز خود، انواع خدمات ابری را از مراکز دیگر دریافت کنند بدون این که لازم باشد سیستم مالی خود را در اختیار آن مراکز قرار دهند. به عبارت بهتر با داشتن سرویس AccCPUConnector، مشتریان سیستم مالی نیازی به نصب و نگهداری سیستمهای دیگر (مثلا سیستم مدیریت فرایندهای نوسا) را در سرور خود ندارند و می توانند پایگاههای مالی را در سرورهای خود داشته باشند و خدمات ابری را از مراکز و سیستمهای دیگر دریافت کنند.
مزیت این سرویس
با توضیحاتی که داده شد مشخص است که این سرویس صرفه اقتصادی زیادی را برای مشتریان سیستم مالی ایجاد می کند. به این ترتیب این مشتریان نیازی به پرداخت هزینه های سنگین سخت افزاری و نرم افزاری برای نصب، استفاده و نگهداری سیستمهای دیگر را نخواهند داشت و تنها با پرداخت یک هزینه به مراتب کمتر و اقتصادی تر، خدمات سیستمهای دیگر را دریافت می کنند. در این مدل، اپلیکیشن های خدمات ابری در سرورهای شرکتهای ارائه کننده سرویس نصب می شود و هرگونه هزینه های بروزرسانی و نگهداری این اپلیکیشن ها نیز به عهده شرکتهای ارائه کننده است
ابزارها و امکانات AccCPUConnector
سرویس AccCPUConnector مجهز به ابزارهای زیر است:
- AccUtils: این موجود امکان استفاده از توابع API سیستم مالی را فراهم می کند.
- WorkADOSelect: از طریق این موجود امکان Query و خواندن داده های هر پایگاه تحت SQL Server ایجاد می شود.
- WorkXMLUtils: این موجود امکان تولید و پردازش داده های با ساختار xml را ایجاد می کند. این داده ها در توابع متعددی از سیستم مدیریت فرایندها استفاده می شود.
- ReposUtils: این موجود امکان تولید API برای تعامل و استفاده از خدمات سیستم آرشیو و مدیریت فرایندها را فراهم می کند.
ملاحظه می کنید که موارد اول و چهارم مختص سیستم های مدیریت فرایند و سیستم مالی نوساست اما موارد دوم و سوم محدود به سیستم های نوسا نیست و سیستمهای دیگر برپایه SQL را شامل می شود.
راه اندازی سرویس AccCPUConnector
برای راه اندازی این سرویس کافی است :
- یک فولدر با نام AccCPUConnector داشته باشید که شامل فایلهای زیر است:
توضیح: اگر مرکز دارای سیستم مدیریت فرایندها باشد، این فولدر در هنگام نصب این سیستم بطور خودکار در فولدر Repository ایجاد می شود ولذا نیازی به این مرحله نیست.
- یک Application pool با نام دلخواه برای این سرویس ایجاد کنید.
دقت کنید که تمام تنظیمات این pool باید به شکل پیش فرض باشد. تنها نکته ای که باید چک کنید این است که این Application pool باید 64 بیتی باشد لذا در این مرحله باید محاوره تنظیمات پیشرفته (Advanced Settings) را باز کنید و تنظیمات Enable 32-Bit Applications را نگاه کنید. اگر این گزینه True بود آن را تغییر دهید و همانند شکل زیر روی گزینه False قرار دهید:
- یک Application برای فولدر AccCPUConnector ایجاد کنید (همانند شکل زیر):
ملاحظه می کنید که برای این Application باید pool تعریف شده در قسمت قبل را انتخاب کنید. توضیح این که در این مورد نیز تمام تنظیمات دیگر Application باید به شکل پیش فرض باشد.
- اعتبارسنجی Basic را برای Application تعیین کنید.
نوع اعتبارسنجی Application ها بطور پیش فرض از نوع Anonymous می باشد اما برای بالاتر بردن سطح امنیت داده ها باید تنظیمات را تغییر دهید و نوع اعتبار سنجی Basic را انتخاب کنید. برای تنظیمات اعتبارسنجی همانند شکل زیر روی آیکون Authentication دبل کلیک کنید:
با این کار، محاوره تنظیمات اعتبارسنجی به شکل زیر روی صفحه باز می شود:
حال همانطور که در شکل مشاهده می کنید، باید ابتدا گزینه Anonymous Authentication را غیرفعال (Disabled) کنید و سپس گزینه Basic Authentication را فعال (Enabled) کنید. به این ترتیب کاربران برای دسترسی به توابع سرویس Rest نیاز به نام و کلمه عبور خواهند داشت.
- یک کاربر عادی با نام دلخواه در سرور مبدا تعریف کنید اختیار خواندن از پایگاه داده ها را به این کاربر بدهید
این کاربر برای مدیریت دسترسی و امنیت پایگاه داده ها تعریف می شود. برای مثال می توانید کاربر CPUConnUser را برای این کار تعریف کنید و سپس در تنظیمات Security در SQL Server محاوره New user را بازکنید و کاربر CPUConnUser را معرفی کنید. دقت کنید که این کاربر باید در پایگاه سیستم مالی نقش خواندن داده ها (db_datareader) را داشته باشد.
برای این کار باید در انتها باید روی نام این کاربر کلیک راست کنید و گزینه Properties را کلیک کنید و در محاوره باز شده روی گزینه User Mapping را کلیک کنید تا محاوره زیر روی صفحه باز شود:
ملاحظه می کنید که برای این کاربر، در پایگاه مالی _AccXP_hamayesh992 نقش db_datareader اختصاص داده شده است.
نکته مهم: توجه کنید که برای امنیت داده ها اختیار خواندن داده ها برای کاربر کافی است و نقشهای دیگر ممکن است منجر به از دست دادن داده ها شود.
آدرس URL سرویس AccCPUConnector
یادآوری می شود که هر سرویس Rest به شکل یک url ارائه می شود لذا الگوی url مربوط به سرویس AccCPUConnector در هر میزبان به شکل زیر است:
این آدرس از سه قسمت تشکیل شده است: قسمت اول آدرس Virtual Directory میزبان سرویس AccCPUConnector است و قسمت دوم ، آدرس اختصاصی سرویس AccCPUConnector و قسمت سوم نام تابعی است که توسط سرویس صدا زده می شود.
تست های سرویس AccCPUConnector
برای اطمینان از صحت مراحل راه اندازی AccCPUConnector ، دو سرویس Rest به شرح زیر وجود دارد:
الف) تست صحت Application و تنظیمات آن
آدرس این سرویس به صورت زیر است:
نام این سرویس echostring است به این صورت که یک عبارت string از کاربر می گیرد و همان را بازمی گرداند. در این مثال عبارت "1234" وارد شده است اما بجای آن هر عبارت حرفی دیگری می تواند قرار بگیرد. در هر صورت اگر این آدرس را در مرورگر اجرا کنید در صورت صحت Application نتیجه زیر را مشاهده خواهید کرد:
ملاحظه می کنید که عبارت "1234" به عنوان نتیجه بازگشت داده شده است و به معنی این است که Application درست کار می کند. در غیر این صورت با خطاهای مختلفی مانند 500 و 404 مواجه خواهید شد.
ب) تست وجود قفل سخت افزاری در سرور
برای تست قفل سخت افزاری باید از سرویس زیر استفاده کنید:
نکته مهم: توجه کنید که این سرویس باید در سرور میزبان AccCPUConnector و به شکل local اجرا شود.
در صورت وجود قفل سخت افزاری، ، ابتدا محاوره اعتبار سنجی کاربر باز می شود که باید در قسمت نام کاربر CPUConnUser و کلمه عبور این کاربر را وارد و محاوره را تصویب کنید. در صورت تایید اعتبار کاربر، نتیجه به شکل زیر در مرورگر ظاهر می شود:
ملاحظه می کنید که سرویس AccCPUConnector درخواست را پردازش کرده و تابع AccCPUCallFunction را Call کرده است اما به دلیل پاس نشدن پارامترهای لازم، پیغام خطای Invalid Content را برگردانده است. این پدیده نشانه این است که قفل وجود دارد. در غیر این صورت با نتیجه زیر روبرو خواهید شد:
ملاحظه می کنید که نتیجه به شکل Null بازگشت داده شده و به معنی نبودن قفل سخت افزاری است.
نحوه کار سرویس AccCPUConnector
برای نگاهی دقیق تر به نحوه کار این سرویس باید شکل گرافیکی روند کار را به شکل جزئی تر ببینیم. این روند در شکل زیر نمایش داده شده است:
بر مبنای شکل فوق، مراحل کار در این مدل به شرح زیر است:
- یک کلاینت REST در پایگاه A، پارامترهای مورد نیاز را از طریق WEB به REST سرویس AccCPUConnector در شبکه محلی پایگاه مبدا ارسال می کند
- این پارامترها به یک تابع استخراج اطلاعات که در فایل Script.js قرار دارد پاس می شود. در واقع این تابع از راه دور Call می شود.
- تابع استخراج اطلاعات اجرا می شود و داده های مورد نظر را از طریق Query در پایگاه مبدا، استخراج می کند.
- AccCPUConnector نتایج را از طریق WEB به کلاینت REST در پایگاه مدیریت فرآیندها برمی گرداند.
با یک مثال ساده می توانیم این مراحل را به تفصیل بررسی کنیم.
مثال: خواندن تاریخ استخدام پرسنل
فرض کنید در یک گردش کار «مدیریت وامها» واقع در شبکه محلی A، می خواهیم تاریخ استخدام کارکنان را از یک سیستم مالی واقع در شبکه محلی B بخوانیم. در این صورت باید مراحل زیر را انجام دهیم:
- ایجاد تابع استخراج اطلاعات در Scipt.js
در پایگاه مبدا و در شبکه محلی B تابع زیر را در Script.js درج می کنیم:
توضیح این که در سیستم دستمزد، جدول _WfixInf شامل اطلاعات پایه پرسنلی است که ستون fi_FI2 حاوی شماره ملی و ستون fi_FI8 حاوی تاریخ استخدام می باشد. بنابراین در تابع فوق شماره ملی شماره ملی کارمند به عنوان پارامتر p پاس می شود و سپس با استفاده از موجود WorkADOSelect ، تاریخ استخدام استخراج می شود.
- ایجاد یک تابع در برنامه گردش کار مدیریت وامها برای Call کردن تابع ReadPersonData از راه دور
این تابع باید با استفاده از کلاینت REST به شکل زیر ایجاد شود:
همانطور که ملاحظه می کنید، تابع RemoteCallData دارای پنج پارامتر به شرح زیر است:
url: آدرس سرویس AccCPUConnector
funcName: نام تابعی است که در Script.js است و قرار است از راه دور Call شود.
funcParam: پارامترهایی است که قرار است به تابع راه دور پاس شود.
userName: نام کاربری است که در سرور حاوی AccCPUConnector تعریف شده است و اختیار read (خواندن) فایل Script.js را داراست.
password: کلمه عبور کاربر فوق
در این تابع ابتدا یک کلاینت REST ایجاد و در متغیر restClt قرار می گیرد. سپس دو پارامتر نام کاربری و کلمه عبور در Header و بعد دو پارامتر نام تابع راه دور (funcName) و پارامتر ارسالی (FuncParam) به فرمت JSON و به صورت یک رشته حرفی در بدنه (Body) درخواست قرار گرفته و به سرویس AccCPUConnector ارسال می شود.
در مرحله بعد و پس از دریافت پاسخ (Response) ، محتوای پاسخ (Response.Content) به کلاینت برمی گردد.
توضیح: ساختار درخواست کلاینت REST قبلا و در یک مستند دیگر بطور مشروح و مفصل توضیح داده شده است که برای اطلاعات بیشتر می توانید به این مستند مراجعه کنید.
- استفاده از تابع RemoteCallCredit برای خواندن تاریخ استخدام یک کارمند
حال باید تابع فوق را با پارامترهای واقعی اجرا کنیم. برای این کار، تابع زیر را به برنامه گردش کار مانده وامها اضافه می کنیم:
در این مثال، محتوای فیلد melliNum که حاوی کد ملی کارمند است به عنوان پارامتر param به تابع ReadPersonData پاس می شود و این تابع از راه دور صدا زده می شود. ضمنا کاربر CPUConnUser با کلمه عبور Nosa1234 اختیار خواندن داده ها از پایگاه سیستم مالی را داراست.
خطاهای سرویس AccCPUConnector
- اگر نام یا کلمه عبور کاربر اشتباه باشد خطای 401 به معنی عدم دسترسی به داده ها به شکل زیر ظاهر می شود:
- اگر کاربر نقش خواندن داده های پایگاه مبدا (مثلا سیستم مالی) را در SQL Server نداشته باشد آنگاه خطای 500 – Internal server error نمایش داده خواهد شد.
- در صورت هر گونه اشتباه در تابع استخراج اطلاعات نیز خطای 500 نمایش داده می شود.
نکته مهم: توجه کنید که در خطای 500 هیچ پیغامی مبنی بر این که داده ها یافت نشد ظاهر نمی شود و لذا پس از مشاهده این پیغام خطا باید ابتدا نقش db_datareader را برای کاربر چک کنید و سپس تابع استخراج اطلاعات را Debug کنید.
کارکردهای سرویس AccCPUConnector
بطور کلی AccCPUConnector چون بر پایه REST کار می کند، این امکان را دارد که پارامترهای لازم را از طریق یک کلاینت REST راه دور دریافت و به توابع موجود در سرور میزبان خود پاس کند و سپس نتایج حاصل از اجرای این توابع را به کلاینت برگرداند.به این ترتیب، این سرویس دریچه ای برای ارائه خدمات متنوع در Cloud ایجاد کرده است که به تدریج و بسته به شرایط و نیازهای مشتریان، این خدمات پیاده سازی و ارائه خواهد شد. اما در حال حاضر می توانیم به دو کارکرد واقعی این سرویس اشاره کنیم:
1.توسعه خدمات API سیستم مالی نوسا
در حال حاضر خدمات API سیستم مالی نوسا در قالب تعداد مشخصی از توابع با کارکردهای معین و تعریف شده و از طریق سرور SOAP ارائه می شود. حال با استفاده از AccCPUConnector می توانیم:
الف) توابع API سیستم مالی را از طریق سرور REST ارائه دهیم
ب) توابع API مالی را مطابق نیازها و قواعد تجاری (Business Rules) سازمان توسعه دهیم.
برای مثال فرض کنید یک سازمان می خواهد در یک اپلیکیشن خاص و از راه دور از مانده حساب بانک یا مانده بدهی مشتری استفاده کند. بدیهی است که این توابع در API سیستم مالی وجود ندارد و لذا سازمان می تواند با استفاده از امکانات AccCPUConnector توابعی را برای این منظور تعریف و استفاده کند.
توضیح: این ویژگی در یک مستند جداگانه و به تفصیل شرح داده شده است.
2.اتصال فیلد انتخابگر حرفی فرایندها به پایگاههای مالی راه دور
برای خوانده اطلاعات سیستم مالی در سیستم مدیریت فرایندها از فیلدهای انتخابگر حرفی استفاده می کنیم. حال اگر سیستم مالی و سیستم مدیریت فراینده در یک شبکه محلی نباشند آنگاه تنها از طریق امکانات AccCPUConnector می توانیم تابع استخراج محتوای انتخابگر حرفی را در سرور میزبان سیستم مالی بنویسیم و سپس از طریق پروتکل REST ، پارامترهای لازم (rawParams, processed Params) را به این تابع پاس و نتیجه را دریافت نماییم.
بهترین مثال برای این مورد، ارائه خدمات ابری مدیریت فرایندها به مشتریان سیستم مالی نوساست. در این مدل، سیستم مدیریت فرایندها در سرور شرکت نوسا و سیستم مالی در سرور مشتریان است اما فیلدهای انتخابگر حرفی گردش کارها از راه دور و از طریق AccCPUConnector به پایگاههای سیستم مالی مشتریان متصل است و داده های مالی را از آن پایگاهها می خواند.
توضیح: این امکان نیز در یک مستند جداگانه و با جزئیات کامل شرح داده شده است.