تفاوت تسک ارسال/دریافت (Send/Receive Task) و رویداد میانی (ارسال کننده و دریافت کننده) پیام (intermediate catch/throw message event)
در استاندارد BPMN، هر دوی نمادهای تسک ارسال/دریافت و رویداد میانی (ارسال کننده و دریافت کننده) پیام برای نمایش تبادل پیام استفاده میشوند اما رفتار و موارد کاربرد آنها با هم متفاوت است.
ویژگی های وظایف ارسال/دریافت (Send/Receive Task):
- فعالیتهایی مجزا و مستقل هستند که طی آن، پیامی به صورت فعالانه به فرایند یا سیستم دیگری ارسال یا دریافت میشود.
- زمانی استفاده میشوند که ارتباطات، به عنوان بخش اصلی منطق فرایند است.
- امکان کنترل بیشتری روی تبادل پیام را فراهم میآورند مثلا با مشخص نمودن نام پیام، correlation key، و دیگر پارامترها
- برای ارتباطات ساختاریافته سودمند هستند به ویژه زمانی که استفاده از رویدادهای مرزی برای مدیریت انتظارات و استثنائات لازم باشد.
- یک گام مشخص در یک فرایند است که در آن میخواهیم به صورت عمدی و آگاهانه پیامی را ارسال کنیم.
- کار انجام شده توسط یک شرکتکننده برای ارسال یا دریافت یک پیام را نشان میدهد. بیشتر در مورد “انجام دادن” تبادل پیام به عنوان یک گام در یک فرآیند هستند (مثلا دستور برای فرآیند برای ارسال چیزی یا یک دستور برای فرآیند برای انتظار و دریافت چیزی به عنوان بخشی از مسئولیت مستقیم فرد به عنوان یک گام اختصاصی).
ویژگی های رویدادهای میانی (ارسال کننده و دریافت کننده) پیام (intermediate catch/throw message event)
- رویدادهای پیام میانی اغلب بهعنوان سیگنال یا محرک اقدامات در بخشهای دیگر فرایند یا در فرایندهای مجزا کاربرد دارند.
- نشاندهنده نقاطی است که در آن، جریان فرایند ممکن است تا زمان رسیدن یک پیام مشخص دچار وقفه یا مکث شود.
- امکان الصاق رویداد مرزی به آنها وجود نداشته و نسبت به وظایف ارسال/دریافت، کنترل کمتری روی تبادل پیام آنها هست.
مثال تفاوت رویداد میانی دریافت کننده پیام و وظیفه دریافت: انتظار برای یک بسته پستی
تصور کنید شما یک اعلان از شرکت پست دریافت میکنید که “بستهتان امروز بین ساعت ۱۰ صبح تا ۱ بعدازظهر میرسد.” شما کار خاصی برای “دریافت” بسته انجام نمیدهید. فقط گوش به زنگ هستید و در طول بازه زمانی مشخص، انتظار میکشید که زنگ در به صدا دربیاید. وقتی زنگ در به صدا درآمد، طی یک “رویداد” شما متوجه آن میشوید و بسته را تحویل میگیرید.
در اینجا رویداد میانی دریافت کننده پیام همان “گوش به زنگ بودن” شماست. فرآیند در آن نقطه متوقف میشود و به صورت غیرفعال منتظر یک پیام (زنگ در) میماند تا جریان فرآیند را ادامه دهد و بیشتر یک نقطه همگامسازی است. فرآیند خودش کاری برای “دریافت” انجام نمیدهد؛ صرفاً منتظر وقوع یک رویداد خارجی است.
حالا تصور کنید شما یک شرکت حمل و نقل هستید و وظیفه دارید “بسته را از انبار دریافت کنید” که این یک وظیفه مشخص برای شماست. شما فعالانه به انبار میروید، فرمهای لازم را تکمیل میکنید، بسته را امضا میکنید و آن را “دریافت” میکنید. این یک کار عملیاتی است که بخشی از شغل شماست. در اینجا وظیفه دریافت همان “رفتن به انبار و دریافت بسته” است. فرآیند در آن نقطه یک وظیفه فعال دارد که آن وظیفه “دریافت یک پیام یا اطلاعات” است. این یک اقدام عملیاتی است که فرآیند (یا عامل آن) باید انجام دهد تا گام بعدی تکمیل شود.
مثال تفاوت رویداد میانی پرتاب کننده پیام و وظیفه ارسال: انتظار برای یک بسته پستی
تصور کنید شما در شرکت پستی کار میکنید و وظیفه دارید “بستهها را در دستهبندیهای پستی مناسب ارسال کنید.” این مثال یک وظیفه عملیاتی روزمره است زیرا طی آن، فعالانه بسته را برمیدارید، بارکدش را اسکن میکنید، آن را در دستهبندی مربوط به شهر مقصد میگذارید و از نظر شما، کار “ارسال” بسته در این مرحله تمام شده است. این یک گام فعال در فرآیند کاری شماست یعنی شما عملی را برای ارسال انجام میدهید.
در اینجا وظیفه ارسال مثل “قرار دادن بسته در دستهبندی مناسب برای ارسال” است. فرآیند در این نقطه یک اقدام فعال را انجام میدهد که هدفش ارسال چیزی به یک مقصد مشخص است. یک “کار” که توسط فرآیند یا یک عامل درون آن انجام میشود و پس از انجام آن، فرآیند به مرحله بعدی میرود.
حالا تصور کنید شما در خانه هستید و بستهای را برای ارسال آماده کردهاید. به این منظور آن را بستهبندی کردهاید و آدرس را روی آن نوشتهاید. وقتی بسته کاملاً آماده ارسال شد، آن را کنار درب ورودی میگذارید یا به صندوق پست میاندازید. “انداختن در صندوق پست” یا “گذاشتن کنار درب برای پیک” در واقع یک اعلام و نشانه است که “این بسته آماده رفتن است!” شما دیگر کار خاصی روی بسته انجام نمیدهید؛ فقط آن را در محلی قرار میدهید که سیستم (پستچی یا صندوق پست) آن را بردارد و فرآیند ارسال را آغاز کند. در اینجا، رویداد میانی پرتاب کننده پیام مثل “انداختن بسته آماده در صندوق پست” است. شما چیزی را به بیرون “پرتاب” میکنید (مثلاً یک پیام، یک بسته، یک اعلان) تا یک فرآیند یا شرکتکننده دیگر آن را بگیرد و ادامه کار را انجام دهد. بیشتر شبیه یک اعلامیه یا سیگنال است که نشان میدهد فرآیند به نقطهای رسیده است که باید اطلاعاتی را به بیرون بفرستد، اما خود این عمل “پرتاب”، یک وظیفه پیچیده عملیاتی نیست؛ بلکه نتیجه یک سری اقدامات قبلی است.
پس تفاوت اساسی در این است که آیا عنصر موردنظر، نشاندهنده یک وظیفه فعال انجام شده توسط یک شرکتکننده است یا یک رویداد غیرفعال که باعث شروع یا انتظار برای یک پیام میشود.
(در این مثال نشان داده شده که در انتهای فرایند داوری، پاسخ رد مقاله به صورت پیام به نویسنده مقاله ارسال شده. اگر این پاسخ ارسال نشود به مثابه این است که هنوز داوری کامل نشده است (مشابه مثال ارسال نامه در بالا).
