نوشتن یک قاعده کسبوکار
هدف
کاری کنید که فرم به آنچه کاربر در حال انجام آن است واکنش نشان دهد: فیلد مدیر را فقط برای هزینههای بالای ۱۰۰ نشان دهد، تاریخ بستن را تا برنده شدن معامله غیرفعال نگه دارد، یا واحد پول را از روی حساب پر کند.
پیشنیازها
- با نقش سازنده وارد شدهاید و راهحل جدول باز است.
- جدول فیلدهایی را که قاعده دربارهشان صحبت میکند دارد، و اگر میخواهید قاعده را به یک فرم مشخص ببندید، آن فرم وجود دارد.
قاعده کسبوکار چیست و چه نیست
قاعده کسبوکار در مرورگر و روی فرم اجرا میشود و رفتار فرم را تغییر میدهد. چهار کار میکند: نشان دادن یا پنهان کردن یک فیلد، فعال یا غیرفعال کردن آن، اجباری کردن یا نکردن آن، و تعیین یک مقدار.
اما تعیین نمیکند چه چیزی قابل ذخیره است. کاربر میتواند قاعده را خاموش کند، از صفحه دیگری استفاده کند یا مستقیم API را صدا بزند و رکورد باز هم ذخیره میشود. هر چیزی که باید درباره داده درست باشد به یک افزونه سمت سرور تعلق دارد که فارغ از رفتار مرورگر اجرا میشود. از قاعده کسبوکار برای خوشایند کردن فرم استفاده کنید و از افزونه سمت سرور برای واقعی کردن یک قانون. خواستن هر دو طبیعی است و عمداً جدا نوشته میشوند.
گامها
-
فرمی را که قاعده برای آن است باز کنید — جدول، سپس فرمها، سپس همان فرم — و در نوار ابزارش رویدادها را بزنید. فهرست، هر قاعدهای را که روی این فرم اجرا میشود نشان میدهد، از جمله قواعدی که به همه فرمهای جدول بسته شدهاند.
-
جدید را بزنید تا طراح قاعده باز شود.
-
نام نمایشی را بنویسید. نام منطقی خودکار و با پیشوند ناشر شما پر میشود و پس از ذخیره تغییرناپذیر است.
-
فرم را وارسی کنید. از پیش همان فرمی است که از آن آمدهاید و تقریباً همیشه درست است — قاعده دربارهٔ فیلدها حرف میزند و فیلدهایی که از آنها حرف میزند همانهاییاند که پیش روی شماست. برای چیزی که باید هر جا جدول نشان داده میشود برقرار باشد — مثل «تا تأیید نشده پنهان بماند» — آن را به همه فرمها تغییر دهید. قاعدهای که به همه فرمها بسته شده باز هم در فهرست رویدادهای هر فرم، با همین نشانه، دیده میشود.
-
زمان اجرا را انتخاب کنید — هر قاعده یک رویداد:
- هنگام باز شدن فرم، قاعده را همزمان با نمایش رکورد اعمال میکند.
- هنگام تغییر یک فیلد، انتخابگر فیلد را نشان میدهد. فیلدی را انتخاب کنید تا به شکل یک برچسب اضافه شود؛ هر تعداد که لازم است اضافه کنید و با ✕ روی هر برچسب حذفش کنید.
- هنگام ذخیرهٔ فرم، قاعده را میان فشردن دکمه و نوشتن رکورد اجرا میکند؛ پس میتواند
مقداری را پر کند — یا با
cancelSave(پایینتر) جلوی ذخیره را بگیرد.
قاعدهای بدون رویداد هرگز اجرا نمیشود، پس دکمه ذخیره تا وقتی قاعدهٔ تغییر فیلد دستکم یک فیلد نداشته باشد غیرفعال میماند.
یک رویداد برای هر قاعده عمدی است. وقتی یک کار باید در دو لحظه انجام شود — حالت رایج، مثل «این را وقتی وضعیت رد شده است نشان بده» که هم هنگام باز شدن فرم و هم با هر تغییر وضعیت باید درست باشد — دو قاعده بنویسید که یک اسکریپت راهحل را وارد میکنند، هرکدام دو سطر. منطق یکبار نوشته میشود؛ و آنجا که دو لحظه واقعاً فرق دارند، خودِ اسکریپت
eventType()را میپرسد و تصمیم میگیرد. چند رویداد روی یک قاعده، این تصمیم را جایی نمیگذارد: هیچچیز روی صفحه نمیگوید کدام نیمهٔ اسکریپت به کدام رویداد تعلق دارد. -
اسکریپت را در ویرایشگر بنویسید. هنگام تایپ اشتباهها را زیرخط میکشد، توابع پلتفرم را تکمیل میکند و با باز کردن پرانتز، آرگومانهای هر تابع را نشان میدهد. دکمهٔ چشم در گوشهٔ بالای ویرایشگر، توابع در دسترس اسکریپت را روی کد باز میکند.
-
تیک فعال را نگه دارید، یا بردارید تا قاعده بماند ولی اجرا نشود.
-
ذخیره را بزنید.
توابع در دسترس اسکریپت
| فراخوانی | کاری که میکند |
|---|---|
getValue(field) | مقدار فعلی فیلد روی فرم. |
setValue(field, value) | مقدار یک فیلد را تعیین میکند. |
setVisible(field, visible) | فیلد را نشان میدهد یا پنهان میکند. |
setDisabled(field, disabled) | فیلد را فقطخواندنی میکند یا نمیکند. |
setRequired(field, required) | فیلد را اجباری میکند یا نمیکند. |
eventType() | "OnLoad"، "OnChange" یا "OnSave" — رویدادی که در حال اجراست. |
changedField() | فیلدی که تغییرش OnChange را اجرا کرده، وگرنه "". |
isNewRecord() | تا وقتی رکورد یک بار ذخیره نشده true است. برای قفل کردن فیلدی که یک بار انتخاب میشود و دیگر تغییر نمیکند، مثل نوع یک فعالیت. |
cancelSave(message) | فقط هنگام ذخیره: جلوی ذخیرهٔ همین فرم را میگیرد و پیام را نشان میدهد. |
isEmpty(value) | آیا مقدار پر نشده است. متن سفید و «هیچ» خالیاند؛ 0 و false مقادیریاند که کسی انتخاب کرده. |
فیلد با نام منطقی (par_amount) نامیده میشود، نه با نام نمایشی.
فیلدی که چیزی در آن نیست، متنِ خالی خوانده میشود، پس getValue("par_currency") == "" همان
بررسی «هنوز پر نشده» است — نمونهٔ واحد پول پایینتر دقیقاً همینطور کار میکند. برای عدد، تاریخ یا
لوکاپ متن خالیای برای مقایسه وجود ندارد؛ آنجا isEmpty(getValue("par_due")) را بپرسید. همان
تعریفی از «خالی» را به کار میبرد که بررسی اجباریبودنِ خودِ فرم — و به همین دلیل قاعده نمیتواند
فیلدی را پیشفرض کند که فرم همین حالا آن را پرشده پذیرفته است.
getValue و setValue دقیقاً همانطور که در افزونه سمت سرور نوشته میشوند و کار میکنند
اینجا هم هستند، تا منطقی که یک بار درمیآورید در هر دو طرف یکسان خوانده شود.
یک فیلد عددی بهصورت عدد خوانده میشود — ۱۲۰۰٫۵، نه «۱۲۰۰٫۵» — حتی هنگام تایپ، و فیلد
پرنشده همچنان خالی خوانده میشود. این نکته درست از لحظهای اهمیت پیدا میکند که تابعی از خودتان
بنویسید: func needsApproval(amount: number) متن را نمیپذیرد و خطا بهجای آنکه دربارهٔ نوعها
باشد Function overload for needsApproval not found. است. پس مبلغ را number اعلام کنید،
نه int — ستون Decimal مقدار ۱۲۰۰٫۵۰ را نگه میدارد و پارامتر عدد صحیح آن را رد میکند — و پیش
از هر محاسبهای برای جعبهٔ خالی صفر بگذ ارید:
func claimAmount(): number {
var raw = getValue("par_amount");
if (isEmpty(raw)) { return 0; }
return raw;
}
…و هرچه یک اسکریپت راهحل صادر کرده باشد. وقتی چند سطر یکسان در چند قانون پیدا شد، آنها را
به یک اسکریپت راهحل ببرید و با نوشتن
import 'par_expense_helpers'; در بالای قاعده واردش کنید — ویرایشگر نام را تکمیل میکند و از
آن پس میداند آن ماژول چه چیزی صادر کرده است.