با سلام خدمت همکاران گرامی
در این مطلب سعی می کنم با یک مثال ساده، روش خواندن اطلاعات فیلدها از یک گردش کار دیگر و استفاده از این اطلاعات در گردش کار جاری را توضیح بدهم. فرض کنید دو گردش کار به شرح زیر داریم:
گردش کار جاری
کد گردش کار: 11
نام گردش کار: ارجاعات پشتیبانی
نام فیلد مبادله ای : تعداد ارجاعات کارشناس (Expert_Refs) . این همان فیلدی است که قرار است با فراخوانی از گردش کار دیگر پر شود.
گردش کار فرعی (فراخوانی شونده)
کد گردش کار: 15
نام گردش کار: صف کارهای ارجاع شده
نام فیلد مبادله ای: تعداد ارجاعات (Karmand_Refs). این همان فیلدی است که قرار است اطلاعات آن به گردش کار 11 منتقل شود.
روش فراخوانی
این کار در 3 مرحله انجام می شود:
مرحله اول: جستجوی یک کار در گردش کار 15 با شرایط مورد نظر
مرحله دوم: خواندن وضعیت کار بازیابی شده
مرحله سوم: انتخاب مقدار فیلد مورد نظر از این کار (Karmand_Refs) و قرار دادن این مقدار در فیلد مورد نظر در گردش کار 11 (Expert_Refs)
حال این مراحل را یک به یک توضیح می دهیم:
مرحله اول) جستجوی کار در گردش کار 15
برای این کار باید از تابع SearchWork به شکل زیر استفاده کنید:
عبارت جستجو (reqXML)
در این تابع متغیر reqXML در واقع همان عبارت جستجو است که جستجو براساس آن انجام می شود. این عبارت به فرمت XML می باشد که در این مثال ساده ترین حالت آن نمایش داده شده است. همانطور که می بینید تنها شرط ما در این مثال WorkflowCode=15 است . یعنی تمام کارهایی که در گردش کار 15 هستند بازیابی می شود.
تابع جستجو (SeachWork)
از آنجایی که تعداد کارهای بازیابی شده براساس شرایط جستجو، ماهیتا متعدد است بنابراین خروجی این تابع، یک آرایه است. یعنی خروجی یک تعداد کد کار (WorkKey) است که در قالب یک آرایه تولید می شود.
مرحله دوم) خواندن وضعیت کار بازیابی شده
در این مرحله وضعیت کار مورد نظر توسط تابع GetWorkState خوانده و در یک متغیر ذخیره می شود:
همانطور که مشاهده می کنید وضعیت کار در متغیر ws15 ذخیره شده است که نام این متغیر کاملا سلیقه ای است و من برای اینکه مشخص شود از کدام گردش کار است این نام را انتخاب کرده ام. نکته دیگر این است یکی از پارامترهای این تابع، کلید کار یا WorkKey است. این کلید در مرحله قبل (جستجوی کار) تولید شده است اما از آنجا که همانطور که گفته شد یک آرایه است لذا باید اندیس مشخصی از این آرایه را به عنوان پارامتر در نظر بگیرید. به عبارت دیگر در تابع GetWorkState فقط یک عدد به عنوان WorkKey باید وارد شود. در این مثال اندیس صفر از آرایه که در واقع اولین مقدار آرایه است، انتخاب شده است. به عبارت دیگر اگر مثلا سه کار با شرایط مورد نظر ما وجود داشته باشد، ما کار اول را انتخاب و وضعیت آن را در متغیر قرار می دهیم.
مرحله سوم) انتخاب فیلد هدف از این وضعیت و قرار دادن آن در فیلد مورد نظر در گردش کار جاری
در این مرحله، مقدار فیلد Karmand از گردش کار 15 در فیلد Expert_Refs از گردش کار جاری (11) قرار می گیرد.
همانطور که گفته شد این ساده ترین حالت می باشد. در مطالب بعدی سعی خواهد شد مرحله اول یعنی جستجوی کار بیشتر و با مثالهای دقیق تر توضیح داده شود.
موفق باشید