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

کاری کنید که یک دکمه کاری انجام دهد

هدف​

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

پیش‌نیازها​

  • فرم یا نمایی که در طراح آن باز است و دست‌کم یک عملیات روی نوار Actions دارد.

گام‌ها​

  1. فرم را در طراح فرم یا نما را در طراح نما باز کنید.

  2. دکمه خود را در نوار Actions انتخاب کنید.

  3. در با فشردن انتخاب کنید چه کاری انجام دهد:

    انتخابچه چیزی لازم داردچه اتفاقی می‌افتد
    باز کردن یک نماجدول (خالی یعنی همین جدول) و یکی از نماهای آنفهرست با آن نما باز می‌شود
    رکورد جدیدجدول (خالی یعنی همین جدول)فرم یک رکورد خالی باز می‌شود
    باز کردن یک داشبوردیک داشبوردداشبورد باز می‌شود
    باز کردن یک صفحهیک صفحهٔ کشیده‌شدهصفحه باز می‌شود
    اجرای یک گزارشیک گزارشگزارش همچون صفحه‌ای مستقل باز می‌شود — و اگر رکوردی باز باشد، محدود به آن
    باز کردن یک نشانی وبنشانی http:// یا https:// که می‌تواند فیلدهای رکورد را نام ببرددر زبانه جدید باز می‌شود
    اجرای اسکریپتچیزی اینجا لازم نیست — پایین را ببینیداسکریپت BS Lang شما اجرا می‌شود
  4. مقصد را از فهرست برگزینید. هر یک از آن کادرها فهرستی جست‌وجوپذیر از آنچه محیط شما واقعاً دارد باز می‌کند: نام نمایشی هر چیز در سطر اول و نام منطقی‌اش زیر آن. برای پالایش تایپ کنید — هر دو سطر مطابقت می‌دهند، پس هم par_inv «فاکتورها» را پیدا می‌کند و هم تایپ‌کردن فاکتور.

  5. فرم یا نما را ذخیره کنید.

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

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

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

نشانی وب می‌تواند مقدارهای رکورد را با خود ببرد​

نام منطقی یک فیلد را در آکولاد بگذارید تا نشانی، مقدار آن فیلد را از رکورد باز برداشت کند:

https://teams.microsoft.com/l/call/0/0?users=4:{pw_phone_number}
https://www.openstreetmap.org/search?query={address1_city}

مقدار به‌طور خودکار برای URL رمزگذاری می‌شود، پس شماره‌ای مانند +44 20 7946 0000 یکپارچه می‌رسد. نشانی همچنان باید با http:// یا https:// آغاز شود و این بخش باید نوشته شود: فیلد می‌تواند بخشی از نشانی را پر کند، اما هرگز طرح (scheme) آن را نه.

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

پنج مورد نخست کاربر را جابه‌جا می‌کنند — و راه بازگشت می‌گذارند​

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

به همین دلیل، صفحه‌ای که یک دستور باز می‌کند دکمهٔ → دارد که به همان جایی بازمی‌گردد که از آن آمده‌اید. با نگه‌داشتن اشاره‌گر روی آن نام همان جا را می‌گوید — «بازگشت به حساب‌ها»، یا وقتی دکمه روی یک رکورد فشرده شده «بازگشت به فاکتورها · شرکت نمونه».

این دکمه همان‌جایی می‌نشیند که پیمایشِ آن صفحه از پیش هست، پس همیشه در یک گوشه است:

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

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

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

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

چه وقت به‌جای آن اسکریپت بنویسیم​

گزینه اجرای اسکریپت را انتخاب کنید تا دکمه Edit code ظاهر شود. وقتی سراغ آن بروید که کار دکمه به چیزی بستگی دارد که فقط مرورگر می‌داند: آنچه کاربر تایپ کرده، یا سطرهایی که تیک زده.

اسکریپت می‌تواند این‌ها را صدا بزند:

فراخوانیکاری که می‌کند
getValue(field)مقدار فعلی یک فیلد روی فرم باز
setValue(field, value)مقدار یک فیلد را روی فرم تعیین می‌کند (ذخیره نمی‌کند)
recordId()شناسه رکورد باز، یا ""
selectedCount() / selectedId(index)چند سطر تیک خورده، و یکی از آن‌ها
openRecord(table, id)رکوردی را باز می‌کند؛ شناسه خالی یعنی رکورد جدید
newRecord(table, { field: value })رکورد جدیدی باز می‌کند که آن فیلدها از پیش در آن پر شده‌اند. تا کاربر ذخیره را نفشارد چیزی ذخیره نمی‌شود
openView(table, view) / openDashboard(name) / openScreen(name) / runReport(name)همان کارهای فهرست انتخاب
openUrl(url)نشانی http/https را در زبانه جدید باز می‌کند؛ {field} در آن، مانند بالا، پر می‌شود
notify(message)چیزی به کاربر می‌گوید
refresh()آنچه روی صفحه است را دوباره بارگذاری می‌کند
save()ذخیرهٔ فرم را پس از آنچه اسکریپت تعیین کرده می‌فشارد. فقط روی فرم
if (selectedCount() == 0) {
notify("Tick a ticket first.");
} else {
openRecord("par_ticket", selectedId(0));
}

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

دکمهٔ تماس در فروش این‌گونه با یک فشار هم Teams را باز می‌کند و هم یک تماس تلفنی دربارهٔ مشتری:

openUrl("https://teams.microsoft.com/l/call/0/0?users=4:{telephone1}");
newRecord("pw_activity", {
pw_type: 110000002,
pw_regarding: "contact:" + recordId(),
pw_phone_number: getValue("telephone1")
});

جست‌وجویی که می‌تواند به چند جدول اشاره کند به شکل table:id پر می‌شود، همان‌طور که pw_regarding در اینجا.

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

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

save() راهی برای دور زدن این نیست. همان ذخیرهٔ خود فرم را به‌جای کاربر می‌فشارد، با همان بررسی‌ها: فیلدهای الزامی، قاعده‌هایی که هنگام ذخیره اجرا می‌شوند، و هر چه سرور رد کند. همین است که یک دکمه را قادر می‌کند هم فیلدی را تعیین کند و هم ذخیره‌اش کند، مثل ارسالِ یک ایمیل:

setValue("pw_delivery", 110000001);
save();

هر صفحه هم محدودیت خودش را دارد و دستوری که بیشتر بخواهد، به‌جای وانمود به کار کردن، همین را می‌گوید:

  • یک فهرست رکورد بازی ندارد، پس setValue آنجا کاری نمی‌کند؛
  • یک زبانه مرتبط درون فرم نشانی مستقل ندارد، پس نمی‌تواند جابه‌جا شود؛
  • یک فرم با refresh() خودش را دوباره بارگذاری نمی‌کند، چون ویرایش‌هایی را نگه داشته که کسی نخواسته از دست بروند.

هر گزینه یک دکمه دوبخشی کار خودش را می‌کند​

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

در منوی بیشتر (…) یک دکمه دوبخشی یک گروه است: نامش، و گزینه‌هایش زیر آن. خود نام فقط وقتی یک گزینه است که دکمه کاری از خودش داشته باشد؛ وگرنه فقط عنوان گروه است.

روی نوار هم همین‌طور است: وقتی دکمهٔ دوپاره رفتار خودش را ندارد، فشردن نامش منوی آن را باز می‌کند، درست مثل پیکانش.

عیب‌یابی​

  • «… هنوز کاری نمی‌کند: نه عملیاتی دارد و نه اسکریپتی.» — برای دکمه رفتاری تعیین نشده. در با فشردن یکی را انتخاب کنید.
  • «… مشخص نکرده چه چیزی را باز کند.» — رفتار تعیین شده اما کادرش خالی است، یا نشانی وب http/https نیست. نشانی javascript: در همه لایه‌ها، از جمله هنگام درون‌ریزی، رد می‌شود.
  • «… به … نیاز دارد که در این رکورد خالی است.» — نشانی وب فیلدی را نام می‌برد که مقداری ندارد. فیلد را پر کنید، یا دکمه را روی رکوردی بفشارید که آن را دارد.
  • «… اجرا نشد: …» — اسکریپت خطا داده است. پیام از خود مفسر است و صفحه به کار خود ادامه می‌دهد.
  • «… چیزی خواست که این صفحه نمی‌تواند انجام دهد.» — محدودیت‌های بالا را ببینید.
  • گزارش باز شد اما همهٔ رکوردها را نشان می‌دهد. از روی یک فهرست اجرا شده، یا از روی رکوردی که هرگز ذخیره نشده — رکوردی نیست که گزارش به آن محدود شود. نخست رکورد را باز کنید.
  • دکمه Edit code نیست. — دکمه از پیش رفتاری دارد. برای بازگشت ویرایشگر، اجرای اسکریپت را انتخاب کنید؛ دو رفتار روی یک دکمه یعنی یکی از آن‌ها بی‌صدا از بین می‌رود.

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