۴۸صنعت
+۵۰۰زیرسیستم
+۱۰۰۰پروژه
۱۸سال
شرکتصنایعسامانه‌ها و APIتماسدانلود
درس ۱۲ از ۱۵۱۶ دقیقه

قوانین منطق و زمان‌بندی

هدف درس

یک قانون «اگر … آنگاه …» را در ویرایشگر بصری می‌سازید، آن را بدون اثر روی تجهیزات آزمایش می‌کنید و می‌دانید کار دوره‌ای را با کدام سازوکار زمان‌بندی کنید.

کجای نرم‌افزار

«طراحی سیستم» ← «طراحی منطقی» ← «موتور قوانین و اتوماسیون» ← زبانه‌های «قوانین» و «ویرایشگر بصری»

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

صفحه را بشناسید

صفحهٔ موتور قوانین و اتوماسیون شش زبانه دارد؛ چهار سازوکار اجرایی و دو ابزار:

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

در زبانهٔ قوانین شمارنده‌ای به شکل «۱۴ قانون · ۱۴ فعال» بالای جدول دیده می‌شود و جدول این ستون‌ها را دارد: وضعیت (کلید روشن/خاموش)، نام، اولویت (CRITICAL، HIGH، MEDIUM، LOW)، ترکیب شرط (AND یا OR)، cooldown بر حسب ثانیه و عملیات. در ستون عملیات سه دکمه هست: تست، ویرایش و حذف.

زبانهٔ قوانین با جدول قانون‌های پروژه
زبانهٔ «قوانین» · ستون‌های وضعیت، نام، اولویت، ترکیب شرط و cooldown

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

ویرایشگر بصری با کتابخانهٔ گره‌ها و بوم خالی
ویرایشگر بصری · کتابخانهٔ گره‌ها در یک سمت، بازرس در سمت دیگر

کتابخانه سه دسته گره دارد:

دستهگره‌ها
محرک‌هاتغییر ACV، شرط ACV، زمان‌بندی، دستی، آبشاری
شروطمقایسه، عبارت، بازه زمانی
اقداماتتنظیم ACV، تنظیم چند ACV، اعلان چندکاناله، ایمیل، پیامک، تلگرام، اجرای اسکریپت، Webhook، ماشین حالت، ثبت لاگ

مهم‌ترین نکتهٔ معماری: قانون با تغییر مقدار نقطه‌هایی ارزیابی می‌شود که در شرط‌هایش نام برده شده‌اند. پس شرط‌ها فقط «فیلتر» نیستند؛ همان‌ها تعیین می‌کنند قانون اصلاً کِی بررسی شود.

گام‌به‌گام

  1. قانون تازه را باز کنید. در زبانهٔ قوانین دکمهٔ سبز قانون جدید را بزنید تا ویرایشگر بصری با بوم خالی باز شود. نام قانون الزامی است؛ اگر خالی بماند هنگام ذخیره پیام «نام قانون الزامی است» می‌گیرید.
  2. سربرگ قانون را پر کنید. نام گویا («قطع فن در دمای بالا»)، توضیح کوتاه، اولویت (پیش‌فرض MEDIUM) و ترکیب شرط‌ها (AND یا OR). اولویت ترتیب بررسی قانون‌ها را تعیین می‌کند؛ CRITICAL اول بررسی می‌شود.
  3. گره محرک و شرط را اضافه کنید. از کتابخانه گره‌ها یک تغییر ACV روی بوم بکشید، سپس یک مقایسه. در بازرس، ENID نقطه، عملگر (مثلاً GREATER_THAN) و مقدار آستانه را وارد کنید. گره‌ای که تنظیم نشده باشد روی بوم خلاصه‌ای مثل «ENID انتخاب نشده» نشان می‌دهد.
  4. شرط پیچیده را با گره «عبارت» بنویسید. برای ترکیب چند نقطه، گره عبارت بگذارید و نقطه‌ها را با قالب ACV['ENID'] بنویسید؛ مثال: ACV['0001000000010001'] > 28 && ACV['0001000000010002'] < 60. عملگرهای مجاز &&، ||، مقایسه‌ای‌ها و حساب‌وکتاب ساده‌اند و توابعی مثل HOUR، DAY_OF_WEEK، TIME_IN_RANGE، ABS، ROUND، MIN، MAX و توابع تاریخی AVG/MIN/MAX/SUM در دسترس‌اند.
  5. اقدام‌ها را اضافه کنید. برای نوشتن مقدار، گره تنظیم ACV با ENID هدف، مقدار جدید و در صورت نیاز تأخیر (ms). برای خبردادن، گره اعلان چندکاناله با عنوان، متن پیام و گیرندگان (با کاما جدا کنید؛ هر گیرنده‌ای که نشانی ایمیل باشد ایمیل و بقیه پیامک در نظر گرفته می‌شوند).
  6. گره‌ها را وصل کنید. از درگاه خروجی هر گره به ورودی گرهٔ بعد بکشید: محرک ← شرط ← اقدام. گراف بدون اتصال ذخیره می‌شود ولی رفتار موردنظر شما را نمی‌سازد.
  7. پیش از ذخیره، عبارت را اعتبارسنجی کنید. دکمهٔ پخش در نوار بالا برای قانون ذخیره‌نشده فقط گره عبارت را بررسی می‌کند و «عبارت معتبر است» یا خطا نشان می‌دهد. اگر گره عبارت ندارید پیام «برای تست کامل ابتدا قانون را ذخیره کنید…» می‌آید.
  8. ذخیره کنید — و بدانید که فعال می‌شود. با ذخیره پیام «قانون ایجاد و فعال شد» می‌آید و به زبانهٔ قوانین برمی‌گردید. قانون از همان لحظه روی سرور فعال است. اگر اقدام آن فرمان به تجهیز واقعی است، بلافاصله کلید وضعیت را خاموش کنید و اول آزمون امن را انجام دهید.
  9. آزمون امن را اجرا کنید. در جدول قوانین دکمهٔ تست پنجرهٔ آزمایش امن قانون را باز می‌کند. منبع مقدار متغیرها را روی شبیه‌ساز بگذارید، مقدار ورودی‌ها را تغییر دهید و ارزیابی قانون را بزنید. نتیجه به شکل تراشهٔ «شرط برقرار شد» یا «شرط برقرار نشد» به‌همراه وضعیت تک‌تک شرط‌ها و جمله‌ای مثل «n Action شناسایی شد · هیچ Action اجرا نشد» دیده می‌شود.
پشت صحنه: موتور قانون‌ها را روی سرور نگه می‌دارد و هر بار که یکی از نقاط نام‌برده در شرط‌های یک قانون تغییر کند آن قانون را ارزیابی می‌کند؛ ترتیب بررسی بر اساس اولویت است. اگر گره بازه زمانی داشته باشید، ساعت و روز پیش از شرط‌ها بررسی می‌شود و بیرون از بازه قانون اصلاً ارزیابی نمی‌شود. اقدام‌های دارای تأخیر در پس‌زمینه اجرا می‌شوند و نوشتن مقدار از همان مسیر فرمان عادی به تجهیز می‌رود. «آزمایش امن قانون» شرط‌ها را روی نسخه‌ای جدا از مقادیر ارزیابی می‌کند؛ نه اقدامی اجرا می‌شود، نه پیامی می‌رود و نه شمارندهٔ cooldown دست می‌خورد.

زمان‌بندی در عمل

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

  • اسکریپت با نوع محرک = SCHEDULE و عبارت Cron؛ مثلاً 0 0 6 * * * برای هر روز ساعت ۶ صبح.
  • سناریو با نوع فعال‌سازی = SCHEDULE و همان قالب Cron.

قالب پذیرفته‌شده: Cron شش‌بخشی (ثانیه دقیقه ساعت روز ماه روزهفته)، Cron پنج‌بخشی (ثانیه صفر در نظر گرفته می‌شود) یا INTERVAL:<میلی‌ثانیه> با حداقل ۱۰۰۰. همهٔ زمان‌ها به وقت سرور است. برای «وقتی قانون فلان اجرا شد» هم اسکریپت با محرک RULE_FIRED یا سناریو با فعال‌سازی RULE بسازید.

نکته‌ها و اشتباه‌های رایج

  • ذخیره یعنی فعال‌سازی. قانون تازه بلافاصله اجرا می‌شود؛ برای قانون‌هایی که به تجهیز فرمان می‌دهند اول تست، بعد روشن‌کردن.
  • قانونی که هیچ شرطی ندارد به هیچ نقطه‌ای وابسته نیست و عملاً هرگز ارزیابی نمی‌شود؛ پنجرهٔ آزمون هم دربارهٔ آن هشدار می‌دهد.
  • در گره عبارت تنها قالب ACV['ENID'] (با تک‌کوتیشن) شناخته می‌شود؛ قالبی که در راهنمای داخل فیلد با آکولاد دیده می‌شود کار نمی‌کند.
  • برای ارسال ایمیل از گره اعلان چندکاناله استفاده کنید؛ گره ایمیل در نسخهٔ فعلی پیامی ارسال نمی‌کند.
  • در گره بازه زمانی شماره‌گذاری روزهای هفته در برچسب فیلد با آنچه موتور می‌خواند هم‌خوان نیست؛ تا اصلاح، برای فیلد روزها همهٔ روزها (1234567) را بگذارید و محدودیت روز را با تابع DAY_OF_WEEK در گره عبارت اعمال کنید.
  • cooldown در ویرایشگر بصری فیلد ندارد و فقط در جدول دیده می‌شود؛ برای تنظیم آن از دستیار کمک بگیرید. قانونی که شرطش مدتی طولانی برقرار می‌ماند، بدون cooldown با هر نمونهٔ تازه دوباره اقدام می‌کند.
  • آزمون با منبع شبیه‌ساز تنها وقتی کار می‌کند که پروژه در شبیه‌ساز همگام شده باشد؛ در غیر این صورت دکمهٔ ارزیابی قانون غیرفعال است (درس B13).

خلاصه

  • قانون روی سرور اجرا می‌شود و با تغییر نقاطی ارزیابی می‌شود که در شرط‌هایش آمده‌اند.
  • گراف را با محرک، شرط و اقدام بسازید و همیشه پیش از اتکا به آن، آزمون امن را اجرا کنید.
  • ذخیره = فعال‌سازی فوری؛ کلید ستون «وضعیت» راه خاموش‌کردن موقت است.
  • قالب ارجاع به نقطه در عبارت‌ها ACV['ENID'] است.
  • کار دوره‌ای را با اسکریپت یا سناریوی SCHEDULE بسازید، نه با محرک زمان‌بندی قانون.

تمرین عملی روی دموی زنده

روی دموی عمومی (هولدینگ ارگ) کار کنید؛ قانون‌های موجود را تغییر ندهید، خاموش نکنید و حذف نکنید.

  1. در زبانهٔ قوانین قانونی با اولویت CRITICAL یا ترکیب شرط OR پیدا کنید و مقدار cooldown آن را یادداشت کنید. توضیح دهید این مقدار در بدترین حالت چند پیام در ساعت را ممکن می‌کند.
  2. روی تست همان قانون بزنید و پنجرهٔ آزمایش امن قانون را بخوانید؛ فهرست ورودی‌ها و تعداد Actionهای شناسایی‌شده را یادداشت کنید. اگر شبیه‌ساز همگام نبود، فقط متن پنجره را بررسی کنید.
  3. در ویرایشگر بصری یک گراف سه‌گرهی بسازید: تغییر ACV ← عبارت ← ثبت لاگ، با نام «تمرین — نام شما». عبارت را با دکمهٔ پخش اعتبارسنجی کنید و ذخیره نکنید. اگر حساب دمو اجازهٔ ذخیره نداد، تا همین مرحلهٔ اعتبارسنجی پیش بروید.
باز کردن دموی زنده

آزمون درس

برای گذراندن درس دست‌کم به ۳ پرسش از ۴ پرسش پاسخ درست بدهید.

  1. ۱. پس از زدن «ذخیره» برای یک قانون تازه، قانون در چه وضعیتی است؟
  2. ۲. کدام نوشتار برای ارجاع به یک نقطه در گره «عبارت» درست است؟
  3. ۳. یک قانون چه زمانی ارزیابی می‌شود؟
  4. ۴. برای اجرای خودکار یک کار هر روز ساعت ۶ صبح کدام راه درست است؟