پرش به مطلب اصلی

ترسیم یک فرایند

هدف​

یک فرایند را بکشید: خط‌هایی که از آن‌ها می‌گذرد، گام‌های هر خط، و اتصال‌های میانشان.

باز کردن طراح​

از فرایندها یک فرایند را برگزینید و طراحی را بزنید — یا روی سطر کلیک کنید. بوم درون همان برنامه باز می‌شود، با مسیر راهنما و نوار عنوان که همچنان بالای آن می‌مانند.

فرایندی که هرگز نکشیده‌اید با یک نمودار آغازین باز می‌شود نه بوم خالی: یک خط، یک آغاز و یک پایان. هر فرایندی همین شکل را دارد، پس همین‌جا شروع می‌کنید.

چهار ناحیه​

  • پالت، در لبهٔ چپ — آنچه می‌توانید بیفزایید: یک خط، و گونه‌های گره.
  • رئوس، کنارش — فرایند به‌شکل درخت: ریشه، خط‌ها، و گره‌های هر خط. انتخاب در رئوس روی بوم هم انتخاب می‌کند و برعکس. لبهٔ راستش را بکشید تا پهن‌تر شود.
  • بوم، در میانه — خودِ نمودار.
  • پنل ویژگی‌ها، در راست — هرچه دربارهٔ چیزِ برگزیده هست.

خط‌ها: کار با کیست​

از پالت خطی بیفزایید، یا یکی را روی بوم بکشید. نامش را از روی نقش بگذارید، نه شخص — «مدیر»، نه نام یک نفر — چون فرایند از هرکسی که این ماه آن کار را می‌کند بیشتر عمر می‌کند.

  • تغییر نام با دوبار کلیک روی سرستون خط.
  • تغییر اندازه با کشیدن مرز زیر آن. خط‌های پایینی همراهش پایین می‌روند، و گره‌هایشان نیز.
  • گره به خطی تعلق دارد که در آن نشسته است. آن را به خط دیگری بکشید و صاحبش عوض می‌شود.

«نقش» خط را تعیین کنید، وگرنه گام‌هایش به هیچ‌کس نمی‌رسند​

نام‌گذاری یک خط به «مدیر» به خواننده می‌گوید کار با کیست؛ به موتور نمی‌گوید. خط را برگزینید و در پنل ویژگی‌ها نقش آن را انتخاب کنید — یک جست‌وجوگر روی نقش‌های دسترسی همین محیط، همراه با کادر جست‌وجو: شروع به تایپ کنید و فهرست بر پایهٔ نام نقش یا نام منطقی‌اش محدود می‌شود.

پیش‌تر کادری بود که نام را در آن تایپ می‌کردید، و یک غلط تایپی خطی می‌ساخت که کارش به نقشی ناموجود می‌رفت — و تا وقتی اجرایی متوقف نمی‌شد، چیزی این را نمی‌گفت. اگر خالی بماند، هر گام خودش تصمیم می‌گیرد.

آن‌گاه هر کار کاربریِ آن خط به دارندگان همان نقش می‌رسد — و همین تمام دلیلِ کشیدن خط شناست، که یک بار برای خط تعیین می‌شود نه برای هر گام. گامی که خودش عبارت واگذار به دارد، بر این اولویت دارد.

توجه

خطی بدون نقش و گام‌هایی بدون واگذار به یعنی فرایندی که اجرا می‌شود و بعد با پیام «… به هیچ‌کس واگذار نشد» متوقف می‌ماند. کار ساخته می‌شود تا مدیر بتواند ببیندش — اما در فهرست هیچ‌کس نیست.

تا نقشی به شخصی برسد دو چیز دیگر هم باید برقرار باشد: نقش باید وجود داشته باشد (نقش‌ها، در مرکز کنترل مدیریت) و کسی باید آن را در یک واحد داشته باشد (نقش‌های فرایندی، در برنامهٔ سازمان). نگاه کنید به سازمان خود را برپا کنید.

گره‌ها: گام‌ها​

گونهیعنی چه
آغازجایی که فرایند شروع می‌شود. دقیقاً یکی بکشید.
پایانجایی که تمام می‌شود. می‌تواند چند تا باشد — «تأیید» و «رد» هر دو پایان‌اند.
کاریک گام. بیشترین چیزی که به کار می‌برید.
انشعابیک تصمیم: یک ورودی، چند خروجی.
دوشاخهجدا شدن به مسیرهایی که همه اجرا می‌شوند.
پیوندماندن تا آن مسیرها دوباره به هم برسند.
زمان‌سنجصبر کردن به اندازهٔ مدتی، یا تا لحظه‌ای مشخص. از کسی چیزی خواسته نمی‌شود.

یک کار گونهٔ کار هم دارد که در پنل ویژگی‌ها انتخاب می‌شود — کاربر، سرویس، اسکریپت، دستی، ارسال، دریافت، قاعدهٔ کسب‌وکار. نشان کوچکی روی گره می‌کشد، و همان است که خواننده با یک نگاه «کسی این را پر می‌کند» را از «سکو خودش این را انجام می‌دهد» تشخیص می‌دهد.

کدام گام‌ها منتظر می‌مانند​

فقط کار کاربری اجرا را منتظر یک نفر نگه می‌دارد. هر نوع دیگری از کار، هنگام ورود و هنگام خروج خود را اجرا می‌کند و مستقیم ادامه می‌دهد؛ نوعش برای کسی است که نمودار را می‌خواند.

وقتی اجرا چند مسیر دارد​

پس از یک انشعاب موازی، اجرا هم‌زمان روی چند مسیر است. دو انتخاب تعیین می‌کنند وقتی این مسیرها تمام می‌شوند چه پیش می‌آید.

  • ادامه می‌دهد وقتی در یک ادغام: همهٔ مسیرها رسیده‌اند (پیش‌فرض)، نخستین مسیر می‌رسد، یا تعدادی از مسیرها رسیده‌اند همراه با چند مسیر. مسیرهایی را می‌شمارد که انشعاب موازیِ آن آغاز کرده، نه اتصال‌هایی را که به آن کشیده شده‌اند. مسیری که هنگام ادامه‌دادنِ ادغام هنوز در جریان است متوقف می‌شود و کار بازِ آن پس گرفته می‌شود.
  • وقتی مسیری به آن می‌رسد در یک پایان: این مسیر تمام شود (پیش‌فرض: اجرا وقتی تمام می‌شود که مسیر دیگری در جریان نباشد)، یا کل اجرا تمام شود که همهٔ مسیرهای دیگر را متوقف می‌کند. دومی پایانِ «رد شد، همه‌چیز را متوقف کن» است.

«عنوان» و «نام» یک گام​

هر گام هر دو را دارد و کارشان فرق می‌کند — همان جفتی که یک جدول با «نام نمایشی» و «نام منطقی» خود دارد.

  • عنوان چیزی است که روی بوم خوانده می‌شود. آن را برای خواننده بنویسید، به هر زبانی که کار می‌کنید، و هر وقت خواستید بازنویسی کنید.
  • نام چیزی است که کد، تاریخچهٔ اجرا و فرایندهای دیگر گام را با آن می‌شناسند. حروف کوچک انگلیسی، رقم و زیرخط، و الزامی است.

معمولاً نام را تایپ نمی‌کنید. همزمان با تایپ عنوان پر می‌شود — «Approve Leave» می‌شود approveleave — و به‌محض اینکه خودتان ویرایشش کنید دیگر دنبال عنوان نمی‌آید، پس نامی که انتخاب کرده‌اید هرگز بازنویسی نمی‌شود. برای بازگشتِ پیشنهاد، کادر را خالی کنید.

دو گام نمی‌توانند یک نام داشته باشند. اگر عنوانی نامی بسازد که گرفته شده است، گام تازه _2 می‌گیرد؛ گام قبلی نامش را نگه می‌دارد، چون تغییر آن یعنی تغییر چیزی که همهٔ اسکریپت‌های موجود به آن اشاره می‌کنند.

نکته

عنوانی به فارسی یا عربی نامی نمی‌سازد، پس گام به نام گونه‌اش نامیده می‌شود — task، task_2. آن را به چیزی تغییر دهید که در تاریخچهٔ یک اجرا بشناسید.

فرایندهایی که پیش از الزامی‌شدن نام کشیده شده‌اند

نام پیش‌تر اختیاری بود، پس ممکن است فرایندی که زودتر کشیده‌اید گام‌هایی بی‌نام داشته باشد — یا نام‌هایی به سبک آزاد قدیمی. آن سندها دیگر پذیرفته نمی‌شوند.

هر کدام را در طراح باز کنید و ذخیره کنید. نام‌ها هنگام باز شدن از روی عنوان‌ها پر می‌شوند و ذخیره‌کردن تمام کار است. چیزی آن‌ها را برایتان تبدیل نمی‌کند، و فرایندی که دوباره باز نکرده باشید، دفعهٔ بعد که ویرایشش کنید ذخیره نخواهد شد.

اتصال‌ها​

در پالت اتصال را برگزینید، سپس از گرهی به گره دیگر بکشید. مسیر اتصال‌ها خودکار محاسبه می‌شود — گوشه‌ها را شما نمی‌کشید.

  • هر جا لازم است به اتصال برچسب بدهید. روی خروجی‌های یک انشعاب، همان است که خواننده به‌جای تصمیم می‌خواند: تأیید شد، بیش از سقف، رد شد.
  • سبک اتصال — منحنی یا گوشه‌دار — روی ریشهٔ فرایند است و بر کل نمودار اثر می‌گذارد، چون نموداری که هر دو را قاطی کند به‌جای انتخاب، اشتباه خوانده می‌شود.

متغیرها: آنچه فرایند با خود می‌برد​

در نمای درختی ریشهٔ فرایند را برگزینید و متغیرها را اضافه کنید — مقادیری که این فرایند از یک گام به گام بعد با خود می‌برد. هر کدام یک نام و یک نوع دارند (متن، عدد، بله/خیر، تاریخ).

نام همان چیزی است که یک اسکریپت می‌نویسد: getVariable("total"). تغییر نام یک متغیر، اسکریپت‌هایی را که آن نام را نوشته‌اند بازنویسی نمی‌کند؛ پس نام را چیزی بدانید که نام‌گذاری می‌کنید، نه برچسبی که آزادانه عوض می‌شود. متغیری که هنوز نامش را نگذاشته‌اید هیچ‌جا پیشنهاد نمی‌شود.

فرم‌های تصمیم: آنچه فرد برای تمام‌کردن یک گام پر می‌کند​

فرم تصمیم همان فرم کوتاهی است که کسی برای انجام یک کار کاربری پر می‌کند، به‌همراه نتیجه‌ها — دکمه‌هایی که کار را تمام می‌کنند. این فرم، فرم مدل‌محورِ یک جدول نیست: به فرایند تعلق دارد، درون سند فرایند جابه‌جا می‌شود، و فقط همان چیزی را می‌پرسد که تصمیم به آن نیاز دارد.

ریشهٔ فرایند را در نمای درختی انتخاب کنید — همان جایی که طراح روی آن باز می‌شود — تا زیر «متغیرها» بخش فرم‌های تصمیم را ببینید؛ چون فرم تصمیم به فرایند تعلق دارد نه به یک گام خاص و چند گام می‌توانند یک فرم را نشان دهند.

هر فرم تصمیم این‌ها را دارد:

  • یک نام فرم تصمیم که کار با آن به فرم اشاره می‌کند، و یک عنوان که خوانندهٔ فرم آن را می‌بیند.
  • فیلدها — نام فیلد، برچسب و نوع داده. این‌ها همان نوع‌های دادهٔ خودِ سکو هستند، پس فرم تصمیم همان انتخابگرهای تاریخ، تقویم‌ها و فهرست‌های گزینه‌ای را می‌گیرد که یک فرم رکورد دارد.
  • نتیجه‌ها — هر سطر یک دکمه. متن دکمه آنچه روی آن نوشته می‌شود، سبک ظاهر آن (معمولی، اصلی، مخرب)، و نیازمند توضیح باعث می‌شود همان یک دکمه بر پرشدن نخستین فیلد چندخطی فرم اصرار کند. آن را روی «رد» بگذارید و روی «تأیید» نگذارید: تفاوتی که این تنظیم برای آن هست، همین است.

سپس یک کار کاربری را انتخاب کنید و فرم تصمیم آن را از فهرست بردارید.

کاری که فرم تصمیم ندارد باز هم تمام می‌شود، اما فرد هیچ راهی برای گفتن چیزی دربارهٔ آن ندارد. فرایندی که گام‌های انسانی‌اش هیچ نمی‌پرسند، معمولاً فرایندی است که طراحی‌اش تمام نشده است.

آنچه هنگام تصمیم‌گیری می‌بینند​

زیر فرم تصمیم، آنچه می‌بینند تعیین می‌کند در حین تصمیم‌گیری چه چیزی ناحیهٔ اصلی را پر کند: هیچ‌چیز، فرم یک رکورد، یک فهرست، یک گزارش یا یک صفحه. یکی را برگزینید تا بقیهٔ این بخش نمایان شود.

فیلدبرای چیست
برنامهدرون کدام برنامه باز شود. خالی بگذارید تا در برنامه‌ای باز شود که آنچه گام دربارهٔ آن است را دارد: همان برنامه‌ای که شخص در آن است، اگر آن را داشته باشد، وگرنه برنامه‌ای که در فرایندهای کسب‌وکار شرکت دارد. همین است که فرایند را پس از ورود به محیطی دیگر کارآمد نگه می‌دارد.
جدول / گزارش / صفحهگام دربارهٔ چیست. اینکه کدام‌یک را می‌بینید به انتخاب بالا بستگی دارد.
کدام فرم / کدام نمابه‌جای پیش‌فرض جدول، یک فرم یا نمای نام‌دار. خالی یعنی همان پیش‌فرض.
نحوهٔ باز شدنفقط خواندنی، یا برای ویرایش. پاسخ معمول «فقط خواندنی» است — کسی می‌خواند تا تصمیم بگیرد — و ویرایش با دسترسی‌های خودِ رکورد انجام می‌شود: کار هیچ دسترسی تازه‌ای نمی‌دهد.

هر یک از این‌ها فهرستی از آنچه واقعاً در این محیط هست را نشان می‌دهد. پیش‌تر جعبه‌هایی بودند که نام منطقی را در آن‌ها تایپ می‌کردید، و نامی که با دست تایپ شود تنها می‌تواند غلط باشد — که چند هفته بعد، پیش چشم همان کسی که فرایند برایش ساخته شده، به شکل «گام هیچ‌چیز باز نمی‌کند» بروز می‌کند.

کدام رکورد باز شود در این فهرست نیست: آن یک عبارت است، پس همراه بقیه زیر کد جای دارد. معمولاً getRecordRef("request") — همان رکوردی که این اجرا دربارهٔ آن است.

پارامترها: گام دیگر چه چیزی را می‌داند​

رکورد به «کدام‌یک» پاسخ می‌دهد و روی یک فرم معمولاً تمام پرسش همین است. جای دیگر تمام پرسش نیست: گزارش دورهٔ زمانی‌اش را می‌خواهد و صفحه مبلغی را که تأیید می‌شود و کسی را که آن را داده است. این مقدارها در همین اجرا هستند نه در خودِ آن چیز.

افزودن پارامتر را بزنید، نامی را که گزارش یا صفحه انتظار دارد بگذارید، و مقدار آن به شکل یک ردیف زیر کد ظاهر می‌شود — چون مقدار، عبارتی است روی متغیرهای فرایند و وضعیت همین اجرا: getVariable("month")، instanceStartedBy().

نام همان چیزی است که آن ابزار با آن مقدار را می‌یابد، پس دو پارامتر نمی‌توانند یک نام داشته باشند و پارامتر بی‌نام هنگام ذخیرهٔ فرایند کنار گذاشته می‌شود.

نتیجه‌ها: کدام تصمیم، کدام اتصال را برمی‌دارد​

کار کاربری وقتی تمام می‌شود که کسی یکی از نتیجه‌های فرم تصمیم آن را بزند، و هر نتیجه فرایند را از راهی می‌فرستد. اتصالی را که از یک کار کاربری بیرون می‌رود انتخاب کنید و وقتی که را تنظیم کنید — فهرستی از نتیجه‌های فرم تصمیم همان کار.

همین است که تأیید یا رد را یک گام می‌کند، نه یک کار به‌علاوهٔ انشعابی که دوباره همان چیزی را می‌پرسد که فرد پیش‌تر تصمیم گرفته است.

  • فقط جایی پیشنهاد می‌شود که کار، فرم تصمیمی با نتیجه نشان دهد. جای دیگر چیزی برای انتخاب نیست.
  • فرم تصمیمی با یک نتیجه به این نیاز ندارد: یک دکمه، یک راه بیرون.
  • با چند نتیجه، هرکدام اتصال خودش را می‌خواهد. پنل مشکل‌ها این را می‌گوید — نتیجه‌ای که هیچ اتصالی برنمی‌دارد، دو اتصال که یک نتیجه را برداشته‌اند، و اتصالی که نتیجه‌ای را نام می‌برد که فرم تصمیم دیگر ندارد؛ این آخری وقتی پیش می‌آید که فرم تصمیمی را ویرایش کنید که کار دیگری هم آن را نشان می‌دهد.

فراخوانی فرایندی دیگر​

نوع یک کار را روی فراخوانی فرایند بگذارید و فرایندی که اجرا می‌شود را انتخاب کنید. قرار است این گام منتظر پایان آن فرایند بماند و سپس ادامه دهد — اما موتور هنوز آن را اجرا نمی‌کند. انتخاب نگه داشته می‌شود و پنل مشکل‌ها بررسی می‌کند که فرایندی انتخاب شده باشد؛ هنگام اجرا، گام هنگام ورود و هنگام خروج خود را اجرا می‌کند و بی‌آنکه فرایند دیگر را آغاز کند مستقیم ادامه می‌دهد، مثل هر گامی که کار کاربر نیست.

وقتی چند فرایند به یک کار مشترک نیاز دارند — یک تأیید، یک بررسی اعتبار — از این استفاده کنید. یک فرایند که سه بار فراخوانده می‌شود، یک چیز برای تغییردادن می‌ماند؛ سه رونوشت از آن ظرف یک سال با هم اختلاف پیدا می‌کنند.

فهرست، فرایندهای دیگرِ همین محیط را نشان می‌دهد. یک فرایند نمی‌تواند خودش را فرا بخواند.

شرط‌ها: انشعاب از کدام راه می‌رود​

اتصالی را که از یک انشعاب بیرون می‌آید برگزینید و شرط آن را از بخش کد باز کنید — یک عبارت که تعیین می‌کند جریان این اتصال را می‌پیماید یا نه. یک طرف getVariable("approved") و طرف دیگر !getVariable("approved").

این فقط روی اتصال‌های یک انشعاب پیشنهاد می‌شود و بس. یک کار تنها یک راه خروج دارد، پس شرط روی آن پرسشی با یک پاسخ می‌بود.

یک شرط تنها می‌تواند بخواند. مسیر را تعیین می‌کند و موتور ممکن است بیش از یک بار آن را بپرسد، پس شرطی که چیزی را تغییر دهد فرایند را وابسته می‌کند به اینکه چند بار پرسیده شده است — ویرایشگر اصلاً واژه‌های این کار را به شما پیشنهاد نمی‌دهد.

کار به چه کسی می‌رسد​

یک کار کاربری ردیف واگذار به را زیر کد دارد: یک عبارت که پاسخ می‌دهد چه کسی باید آن را انجام دهد.

اگر می‌خواهیدبنویسید
هر کسی که یک نقش را داردrole("Manager")
یک شخص مشخصuser("a.khan")
یک تیمteam("Finance")
کسی که فرایند را آغاز کردهinstanceStartedBy()

عمداً یک عبارت است و نه یک فهرست انتخاب: واگذاری‌هایی که ارزش نوشتن دارند همان‌هایی هستند که یک فهرست انتخاب نمی‌تواند بیان کند — تأییدکنندهٔ متناسب با مبلغی که در یک متغیر است، یا مدیرِ کسی که درخواست را داده است.

فقط کار کاربری چنین چیزی دارد. کار سرویسی را خود سکو انجام می‌دهد، پس کسی نیست که به او واگذار شود.

گامی که عبارتی ندارد به «نقش» خطِ خودش برمی‌گردد، و حالت عادی همین است: عبارت را فقط جایی بنویسید که یک گام با بقیهٔ خط فرق دارد.

انتظار، و دیر شدن​

زمان‌سنج: انتظار برای ساعت​

هر جا فرایند باید فقط صبر کند، یک زمان‌سنج بکشید. از کسی چیزی خواسته نمی‌شود: اجرا همان‌جا می‌ایستد و خودش ادامه می‌دهد.

گزینهٔ فعال می‌شود را روی پس از گذشت مدتی بگذارید و به اندازهٔ را پر کنید: یک عدد و یک واحد که کنارش برمی‌گزینید — ۳ روز، ۴ ساعت، ۹۰ دقیقه.

زمان‌سنجی که مدتی نگوید صبر نمی‌کند — اجرا را متوقف می‌کند. این تنها تنظیم فرایند است که پیش‌فرض معقولی پشتش نیست: فعال شدن بی‌درنگ، انتظار را بی‌سروصدا به بی‌انتظاری تبدیل می‌کرد، پس به‌جای آن مسیر متوقف می‌شود و در تاریخچهٔ اجرا نوشته می‌شود «… نمی‌گوید کی فعال می‌شود». اگر زمان‌سنجی که کشیده‌اید هرگز فعال نشد، اول همین را بررسی کنید.

ماه و سال پیشنهاد نمی‌شوند، و این عمدی است. یک ماه در فوریه ۲۸ روز و در مارس ۳۱ روز است، پس انتظاری که این‌گونه نوشته شود بسته به زمان شروعش شمار ساعت‌های متفاوتی خواهد بود. ۳۰ روز بخواهید.

برای هر کس که سند را می‌خواند

این بازه به شکل مدت ISO-8601 ذخیره می‌شود — P3D، PT4H، PT90M — همان چیزی که موتور می‌خوانَد و فرایندی که با دست یا با هوش مصنوعی نوشته شود باید بگوید. شما هرگز آن را تایپ نمی‌کنید؛ عدد و واحد تمامِ این فیلد است. بازه‌ای که با دست در دو واحد نوشته شده باشد (PT4H30M) به‌صورت همان بازه در یک واحد باز می‌شود (۲۷۰ دقیقه).

اگر آن لحظه به داده‌ها بستگی دارد — تاریخ روی رکورد، متغیری که کسی پر کرده — به‌جای آن در لحظه‌ای که کد پاسخ می‌دهد را برگزینید و عبارت را زیر اسکریپت‌ها بنویسید؛ می‌تواند یک لحظه یا یک بازه را پاسخ دهد.

مهلت: یک گام تا چه زمانی باید انجام شود​

یک کار کاربری را برگزینید و مهلت انجام را پر کنید — همان جفتِ عدد و واحدی که زمان‌سنج می‌گیرد. ساعت از همان لحظه‌ای شروع می‌شود که کار در فهرست کسی پیدا می‌شود — نه وقتی آن را باز می‌کند — پس کاری که عصر پنجشنبه ساخته شود، بی‌سروصدا آخر هفته را هدیه نمی‌گیرد.

فرد زیر نام کار عبارت مهلت … را می‌بیند، و پس از گذشتن آن لحظه، قرمز می‌شود و مهلت آن … بود می‌خوانَد. کنارش، مدت انتظار می‌گوید کار چه مدت است که آنجا مانده.

گزینهٔ وقتی دیر شد می‌گوید فرایند در این‌باره چه می‌کند:

گزینهچه اتفاقی می‌افتد
دیرکرد را ثبت کنچیزی جابه‌جا نمی‌شود. کار در فهرست به‌روشنی دیرکرده است و تاریخچهٔ اجرا آن را ثبت می‌کند.
به بالادست هم پیشنهاد بدهبه هر کسی که ارتقای خط نام می‌برد هم پیشنهاد می‌شود. کسی که پیش‌تر آن را داشت نگهش می‌دارد — یک نفر بیشتر می‌تواند اقدام کند و چیزی از کسی که شاید در آستانهٔ تمام‌کردن است گرفته نمی‌شود.
خودکار تصمیم بگیرفرایند یکی از دکمه‌های خودِ همان کار را به‌جای فرد می‌فشارد. کدام یک را زیر تصمیم خودکار برگزینید.

تصمیم خودکار از نتیجه‌های خودِ همان گام استفاده می‌کند، پس نمودار از پیش نشان می‌دهد فرایند بعد از آن کجا می‌رود — راه خروج دومِ نامرئی‌ای از گام وجود ندارد. «اگر کسی تا سه روز تأیید نکرد، رد حساب شود» با برگزیدن خودکار تصمیم بگیر و سپس رد نوشته می‌شود.

برای گامی که مهلت ندارد — که بیشتر گام‌ها همین‌اند — مهلت انجام را خالی بگذارید.

اسکریپت‌ها: چه چیزی، و چه زمانی​

یک کار را برگزینید تا فهرست اسکریپت‌های آن را ببینید — لحظه‌هایی که می‌تواند به آن‌ها واکنش نشان دهد. با برگزیدن هر کدام، صفحهٔ کد باز می‌شود.

جایگاهچه زمانی اجرا می‌شود
هنگام ورودفرایند به این گام می‌رسد.
هنگام واگذاریکار صاحبی پیدا می‌کند — فقط کار کاربری.
هنگام تکمیلآن شخص کار را انجام‌شده علامت می‌زند — فقط کار کاربری.
هنگام خروجفرایند این گام را ترک می‌کند، از هر مسیری که برود.

ریشهٔ فرایند هم سه لحظهٔ خودش را دارد، با همان شکل: هنگام آغاز، هنگام تکمیل و هنگام لغو. «هنگام آغاز» جایی است که به یک متغیر مقدار اولش را می‌دهید.

فهرست می‌گوید روی کدام جایگاه‌ها چیزی نوشته شده است، تا در یک نگاه ببینید کار کجاست.

یک انشعاب «هنگام ورود» و «هنگام خروج» دارد، و هیچ جایگاهی که راه خروج را برگزیند.

  • هنگام ورود همان لحظه‌ای اجرا می‌شود که فرایند می‌رسد، پیش از آنکه شرطی پرسیده شود. اینجا جای محاسبهٔ انشعاب است: پاسخ را یک بار به دست آورید، در یک متغیر بگذارید، و بگذارید همهٔ شرط‌ها آن را بخوانند. آن‌گاه شش بازهٔ یک مبلغ یعنی شش شرط کوتاه، نه شش نسخه از همان محاسبه.
  • هنگام خروج پس از برگزیده‌شدن راه اجرا می‌شود. اگر هیچ شرطی درست نباشد اجرا نمی‌شود — چیزی خارج نشده، پس خروجی هم نبوده است.
  • تصمیم روی اتصال‌ها می‌ماند. عمداً هیچ کدی راه خروج را برنمی‌گزیند: نموداری که انشعابش جایی نادیدنی تصمیم گرفته می‌شود، نموداری است که دربارهٔ کار فرایند دروغ می‌گوید.

صفحهٔ کد​

تمام ویرایشگر را می‌گیرد و فهرست جایگاه‌ها را کنارش نگه می‌دارد، پس جابه‌جایی میان لحظه‌های یک کار یک کلیک است. چشمِ بالای آن هر چیزی را که می‌توانید از همان جایگاه فراخوانی کنید فهرست می‌کند — و این همه‌جا یکسان نیست: یک شرط و یک واگذار به تنها می‌خوانند، یک رویداد می‌تواند چیزی را تغییر دهد، و user()، role() و team() تنها به واگذار به پیشنهاد می‌شوند.

صفحهٔ کد ذخیره ندارد. ذخیره در نوار عنوان تنها ذخیره است و کل فرایند را ذخیره می‌کند.

یادداشت

ذخیره‌کردن یک اسکریپت آن را اجرا نمی‌کند. متغیرها، شرط‌ها، واگذاری‌ها و اسکریپت‌ها همراه طرح ذخیره و هنگام نوشتن بررسی می‌شوند؛ وقتی فرایند منتشر شود و اجرایی آغاز شود، اجرا می‌شوند.

مشکل‌ها: چه چیزی هنوز کم است​

در گوشهٔ بوم نواری هست که می‌گوید فرایند چند مشکل دارد. برای دیدن فهرست بازش کنید؛ روی هر سطر که بزنید، طراح شما را به همان چیز می‌برد — گره، اتصال، یا ریشهٔ فرایند.

آنچه موتور لازم خواهد داشت بررسی می‌شود:

  • دقیقاً یک آغاز و دست‌کم یک پایان؛
  • هیچ اتصالی به یک شروع وارد یا از یک پایان خارج نشود؛ اجرا از یکی آغاز و در دیگری تمام می‌شود، پس چنین اتصالی هرگز پیموده نمی‌شود؛
  • هیچ گامی که جریان هرگز به آن نرسد یا هرگز از آن بیرون نیاید؛
  • شرط روی هر اتصالی که از یک انشعاب بیرون می‌آید، و دست‌کم دو راه خروج از آن؛
  • دست‌کم دو خروجی برای انشعاب موازی و دو ورودی برای پیوند، و شمار برابر از هر کدام؛
  • هر متغیری که یک اسکریپت نام می‌برد تعریف شده باشد، و هر سطر متغیر نامی داشته باشد؛
  • هر اسکریپت تجزیه شود.

هیچ‌کدام از این‌ها جلوی شما را نمی‌گیرد. یک فرایند نیمه‌کشیده صفحه‌ای مشکل گزارش می‌کند و بی‌هیچ اشکالی ذخیره می‌شود — که اصلاً هدف کشیدن آن است. این فهرست راه دانستن آن چیزی است که مانده، و همان فهرستی است که سکو هنگام انتشار فرایند برای اجرا به کار می‌برد.

دربارهٔ دو موردشان: پنل می‌گوید اسکریپت تجزیه می‌شود یا نه؛ اینکه اجازهٔ فراخوانی یک نام را دارد یا نه کارِ ویرایشگر کد است و همان‌جا هنگام تایپ، بر پایهٔ آنچه آن جایگاه می‌بیند، زیرش خط می‌کشد. و انشعاب‌های موازی و پیوندها شمرده می‌شوند، نه یک‌به‌یک تطبیق داده — فرایندی که بیش از آنکه به هم برسد جدا می‌شود، مسیری دارد که هنوز اجرا می‌شود در حالی که باید تمام شده باشد، و این تقریباً همیشه همان اشتباه است.

چیدمان خودکار​

نما ← چیدمان خودکار نمودار را از چپ به راست و به ترتیب جریان مرتب می‌کند و هر گره را در خط خودش نگه می‌دارد. گره‌ها را افقی جابه‌جا می‌کند و اتصال‌ها را دوباره مسیریابی می‌کند؛ هرگز کاری را از کسی به کس دیگر نمی‌دهد.

تولید با هوش مصنوعی​

تولید با هوش مصنوعی فرایند را با واژه‌ها توصیف می‌کند و می‌کشدش. هرچه بازگردد پیش از رسیدن به بوم اعتبارسنجی می‌شود، درست مثل پرونده‌ای که وارد می‌کنید — پس نموداری که سرِ هم نباشد کشیده نمی‌شود، رد می‌شود.

پیش از تسلیم‌شدن، خودش را اصلاح می‌کند. اگر آنچه بازمی‌گردد سرِ هم نباشد، سکو همان را با نام‌بردن از اشکال به مدل بازمی‌گرداند — از شما نمی‌خواهد خطای ساختاری‌ای را درست کنید که خودتان ننوشته‌اید. تا سه بار تلاش می‌کند و در این میان دکمه «در حال اصلاح… تلاش ۲ از ۳» را نشان می‌دهد. شکست را تنها زمانی می‌بینید که اصلاح آزموده شده باشد، و آنچه آن‌گاه نشانتان داده می‌شود آخرین اشکال است.

آنچه روی بوم است را جایگزین می‌کند و ذخیره نمی‌کند. پیش از فشردن «ذخیره» نگاهش کنید.

شما فقط فرایند را توصیف می‌کنید و بس. اینکه کدام مدل هوش مصنوعی پاسخ می‌دهد، یک بار برای کل سکو توسط مدیر تنظیم می‌شود — کلیدی برای چسباندن و ارائه‌دهنده‌ای برای انتخاب وجود ندارد، و آنچه اینجا می‌نویسید جایی جز همان یک مدل نمی‌رود.

اگر هوش مصنوعی‌ای وصل نباشد، «تولید» همین را می‌گوید. مدیر مستأجر یک بار، در تنظیمات ← هوش مصنوعی، آن را برای همهٔ سازمان وصل می‌کند. این چیزی نیست که سازنده روشنش کند.

ذخیره​

ذخیره در نوار عنوان، فرایند را می‌نویسد. تنها ذخیره همین است: طرح بخشی از مؤلفه است، پس نه پرونده‌ای هست که با آن هماهنگ بماند و نه صدوری که یادتان برود.

خروج با تغییرهای ذخیره‌نشده نخست می‌پرسد — از بستن، از ریل ناوبری، و از دکمهٔ بازگشت خود مرورگر.

انتشار: ذخیره‌کردن یعنی به‌کارانداختن نیست​

ذخیره کار شما را نگه می‌دارد. انتشار آنچه را اجرا می‌شود تغییر می‌دهد. این دو، دو دکمه‌اند چون دو تصمیم‌اند، و این جدایی یک دلیل دارد: فرایندی که هم‌اکنون در حال اجراست نباید زیر پای کسانی که آن را اجرا می‌کنند عوض شود. بدون این جدایی، اصلاح یک غلط تایپی در ساعت چهار بعدازظهر، فرایندی را که همهٔ نمونه‌های در جریان دنبال می‌کردند بازنویسی می‌کرد — از جمله گام‌هایی که از آن‌ها گذشته بودند.

پس موتور تنها چیزی را می‌خواند که منتشر کرده‌اید، و هر انتشار یک نسخهٔ شماره‌دار و منجمد از همان طرح در همان لحظه است.

خط زیر عنوان می‌گوید در کدام‌یک از سه حالت هستید:

می‌گویدیعنی
هنوز منتشر نشدههیچ‌چیز این فرایند را اجرا نمی‌کند.
نسخهٔ ۳ در حال اجراست و با آنچه می‌بینید یکی استآنچه می‌بینید همان چیزی است که زنده است.
نسخهٔ ۳ در حال اجراست. تغییرات منتشرنشده داریدویرایش‌های ذخیره‌شدهٔ شما هنوز زنده نیستند.

انتشار را بزنید تا پیش‌نویس نسخهٔ بعدی شود. اگر ویرایش ذخیره‌نشده داشته باشید نخست ذخیره می‌کند، چون منتشرکردن آنچه روی صفحه است همان معنای این واژه است.

چند نکته:

  • انتشار فرایندی که تغییر نکرده رد می‌شود. اگر از آخرین انتشار چیزی عوض نشده باشد چیزی برای انتشار نیست، و تاریخچه‌ای پر از نسخه‌های یکسان تاریخچه‌ای است که کسی نمی‌خواندش.
  • لغو انتشار وجود ندارد. نسخه‌ای که ممکن است کسی در حال اجرای آن باشد چیزی برای حذف‌کردن نیست. اگر می‌خواهید برگردید، طرح پیشین را روی بوم بیاورید و همان را منتشر کنید — تاریخچه دست‌نخورده می‌ماند، و ارزش تاریخچه هم به همین است.
  • هر نمونه با همان نسخه‌ای که آغاز کرده تمام می‌شود. آنچه با نسخهٔ ۲ شروع شده با نسخهٔ ۲ پایان می‌یابد، هرچه در این میان منتشر کنید.
یادداشت

انتشار چیزی را آغاز نمی‌کند. تعیین می‌کند دفعهٔ بعد که فرایند آغاز می‌شود چه اجرا شود، و اجراهایی که در جریان‌اند نسخه‌ای را که با آن آغاز شده‌اند نگه می‌دارند.

انتشار منتظر می‌ماند تا فهرست مشکل‌ها خالی شود. تا وقتی گوشهٔ بوم چیزی را فهرست کرده، این دکمه در دسترس نیست و اگر نشانگر را روی آن نگه دارید، دلیلش را می‌گوید. فرایندی که مشکل دارد اجرا نمی‌شود، و پیش‌تر انتشارش نخست طرح را ذخیره می‌کرد و سپس رد می‌شد.

ورود و صدور​

صدور JSON طرح را به‌شکل پروندهٔ .bpms.json دریافت می‌کند — آنچه همین حالا روی بوم است، با تغییرهای ذخیره‌نشده، چون پرونده برای بردن طرح به جای دیگر است و صدور نسخهٔ هفتهٔ پیش وقتی به نسخهٔ این هفته نگاه می‌کنید همان غافلگیری‌ای است که فقط در مقصد کشف می‌شود.

ورود JSON یکی را بازمی‌گرداند. آنچه کشیده شده را جایگزین می‌کند و ذخیره نمی‌کند، پس ورودی که پروندهٔ اشتباه از آب دربیاید با خروج بدون ذخیره خنثی می‌شود.

پرونده پیش از بارگذاری بررسی می‌شود: نسخه، خط‌ها، گره‌ها، و اینکه هر اتصال واقعاً دو گرهِ موجود را به هم می‌رساند. پرونده‌ای که رد شود می‌گوید کدام شناسه اشتباه بوده است.

از وقتی فرایند در راه‌حل خود سفر کند، ورود و صدور برای جابه‌جایی دستی طرح میان محیط‌هاست — یک راحتی، نه شیوهٔ ارتقای کار. آن شیوه راه‌حل است.

صدور تصویر​

صدور ← تصویر (PNG) و تصویر (SVG) نمودار را همان‌گونه که دیده می‌شود می‌کشند — برای یک سند، یک اسلاید، یا یک دیوار. هیچ‌کدام خودِ فرایند نیستند: نمی‌توان دوباره واردشان کرد.

عیب‌یابی​

  • متغیر من در پیشنهادهای ویرایشگر نیست. — متغیر بی‌نام هیچ‌جا پیشنهاد نمی‌شود. به سطر نام بدهید و از فیلد بیرون بیایید تا نام ثبت شود.

  • setVariable را در یک شرط پیدا نمی‌کنم. — یک شرط تنها می‌خواند؛ بالاتر را ببینید. تغییر را در اسکریپت یک کار بگذارید.

  • اسکریپتی که روی یک کار نوشته بودم ناپدید شده است. — تغییر نوع کار، لحظه‌های آن را عوض می‌کند. یک کار کاربری را به کار سرویسی تبدیل کنید و هنگام واگذاری و هنگام تکمیل دیگر پیشنهاد نمی‌شوند؛ طرحی هم که با آن‌ها وارد شود، آن‌ها را از دست می‌دهد.

  • «آن پرونده JSON معتبری نیست، پس وارد نشد.» — پرونده ناقص است یا اصلاً طرح نیست.

  • «آن پرونده طرح فرایند معتبری نیست: …» — جزئیات، شناسهٔ نادرست را نام می‌برد: گرهی در خطی که در پرونده نیست، یا اتصالی به گرهی که نیست.

  • ذخیره می‌گوید طرح معتبر نیست. — همان بررسی پیش از ذخیره هم اجرا می‌شود. گره یا اتصالی را که نام می‌برد درست کنید؛ نمودار روی صفحه از دست نمی‌رود.

  • گره‌ای هنگام باز شدن جابه‌جا شد. — گرهی که بیرون خط خود بوده هنگام باز شدن به داخل آن بازگردانده می‌شود. خطِ یک گره یعنی کار با کیست، پس هرگز اجازه ندارند با هم اختلاف داشته باشند.

  • چیدمان خودکار کاری نکرد. — بر پایهٔ جریان می‌چیند، پس به اتصال نیاز دارد. نموداری از گره‌های بی‌اتصال ترتیبی ندارد که بر پایه‌اش چیده شود.

  • «هیچ ارائه‌دهندهٔ هوش مصنوعی‌ای تنظیم نشده است. برای وصل‌کردن، تنظیمات ← هوش مصنوعی را باز کنید.» — سازمان هنوز به هوش مصنوعی وصل نیست. مدیر مستأجر یک بار، در تنظیمات ← هوش مصنوعی، آن را برای همه وصل می‌کند.

  • «هوش مصنوعی پاسخی بدون طرح داد.» — مدل به‌جای فرایند، متن معمولی برگرداند. خط‌ها و گام‌ها را ساده‌تر توصیف کنید و دوباره بسازید؛ چیزی از بوم از دست نمی‌رود.

سناریوهای مرتبط​