Налаштуйте правила бронювання
Правила бронювання в Field Service створюють попередження або повідомлення про помилки, які користувачі бачать під час створення або редагування запису резервування ресурсів на основі спеціальних умов. Наприклад, правило бронювання може бути створене, щоб попереджати користувачів, коли вони намагаються забронювати наряд-замовлення з ресурсом на дошці розкладу, який не має навичок, необхідних для роботи.
Правила резервування – це індивідуалізовані методи JavaScript, які виконуються до створення або редагування запису резервування планованих ресурсів. Для методу JavaScript є допустимим параметр із даними для резервування планованих ресурсів. Створюється запис резервування планованих ресурсів, а результатом виконання є об’єкт JavaScript із необхідними властивостями.
Налаштуйте правила бронювання, щоб підтверджувати бронювання під час його створення або зміни.
Нотатка
- Правила резервування доступні лише для погодинного подання, а не денного, тижневого або місячного подання панелі розкладів і помічника з планування. Вони також доступні під час створення або оновлення резервування за допомогою форми резервування доступних для резервування ресурсів.
- Правила резервування недоступні у формі резервування доступних для резервування ресурсів, якщо у формі ввімкнено потік бізнес-процесу.
- Правила резервування недоступні, якщо функцію на панелі розкладів буде перепризначено.
- Кожне спеціальне правило бронювання може повертати лише одну помилку/попередження. Щоб повернути кілька повідомлень, налаштуйте індивідуальні правила бронювання для кожної перевірки.
Створення рішення
Перший крок до настроювання правила резервування — створити настроюваний веб-ресурс JavaScript. Рекомендовано створити рішення в CRM, щоб додати власний настроюваний веб-ресурс JavaScript або скористатися наявним рішенням для настроювання.
Створити рішення CRM
- У розділі Рішення> налаштуваньстворіть нове рішення для веб-ресурсів JavaScript правила бронювання.
На наведеному знімку екрана показано новостворене рішення. У рішенні рекомендовано використовувати унікального видавця, а не видавця за замовчуванням.
- Після створення рішення виберіть компонент веб-ресурсів і створіть новий веб-ресурс.
- У формі нового веб-ресурсу введіть наведену далі інформацію: a. Ім’я b. Коротке ім’я c. Виберіть Script (Jscript) як тип
- Виберіть параметр текстового редактора, щоб ввести код JavaScript для правила резервування.
- Виберіть Зберегти , щоб зберегти веб-ресурс.
- Виберіть Опублікувати , щоб переконатися, що веб-ресурс правила бронювання опублікований.
Задати правило резервування
У головному меню перейдіть до розділу Field Service>Resources, а потім виберіть Правила бронювання в розділі Налаштування бронювання.
Виберіть + Створити , щоб створити нове правило резервування.
У формі правила резервування введіть наведену далі інформацію: a. Ім’я b. Веб-ресурс (виберіть щойно створений веб-ресурс). в. Введіть назву методу, визначену в JavaScript.
Збережіть правило резервування. Після збереження правила резервування воно використовуватиметься для погодинного подання панелі розкладів і помічника із планування або форми сутності. Запис правила резервування можна вимкнути, щоб панель розкладів, помічник із планування або форма сутності резервування не виконували правила.
Нотатка
Наразі правила резервування підтримуються лише в погодинних поданнях панелі розкладів і помічника з розкладів. Правила резервування також підтримуються під час створення або оновлення резервування за допомогою форми резервування доступних ресурсів. Правила бронювання не застосовуються при видаленні запису про бронювання. Правила бронювання не працюють у формах, якщо використовується мультиредагування.
Створіть дію CRM
У цьому розділі ми розглянемо приклад того, як можна скористатися настроюваниою дією CRM, щоб виконати перевірку як частину правила резервування.
Якщо ви використовуєте дію CRM для перевірки правила бронювання, вам все одно потрібно буде створити власний веб-ресурс, як визначено вище. JavaScript, який ви визначите на власному веб-ресурсі, викличе настроювану дію CRM і оцінить результати її дії. Див. у Додатку А в кінці цього документа наведено зразок коду, який ви можете використовувати для виклику настроюваної дії CRM.
У CRM необхідно буде створити настроювану дію CRM. Ми рекомендуємо використовувати CRM-рішення, яке ви визначили для власного веб-ресурсу, щоб додати власну дію CRM.
Для настроюваної дії CRM має бути визначено наведені далі параметри вводу та виводу. Ви можете додати більше вхідних і вихідних параметрів відповідно до сценарій. Вам потрібно буде переконатися, що JavaScript, який ви визначаєте для виклику власної дії CRM, оновлено для підтримки інших вхідних і вихідних параметрів.
Вхідні параметри:
- originalScheduleStart – DateTime
- originalScheduleEnd – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource – розкривний список
- newScheduleStart – DateTime
- newScheduleEnd – DateTime
- isCreate – логічний оператор
- isUpdate – логічний оператор
Вихідні параметри:
- isError – логічний оператор
- isWarning – логічний оператор
- errorMessage – рядок
- warningMessage - рядок
На наведеному знімку екрана показано приклад настроюваної дії CRM. Цей зразок перевіряє, чи відповідає newBookableResource бажаному ресурсу в замовленні на роботу, і чи newScheduleStart знаходиться в межах Часу від обіцяного та Часу до обіцяного. Передбачається, що дати обіцяного вікна припадають на одну дату. Приклад: очікуваний початковий час: 01.01.2016 8:00, очікуваний кінцевий час: 01.01.2016 12:00.
Зразок коду
Створена функція JavaScript може прийняти один параметр, який вважається контекстом резервування. Параметр контексту переданого бронювання не є типовим контекстом CRM, який використовується в сценарії на стороні клієнта.
Схема контексту бронювання:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Параметр контексту резервування матиме наведене далі визначення JavaScript.
Нотатка
Для правила бронювання не обов’язково включати цей JavaScript-код на користувацький веб-ресурс.
Можливі значення для ResourceScheduleSource взяті з глобального набір параметрів джерела розкладу ресурсів. Ви можете скористатися цією властивістю, щоб дізнатися, чи ініціюється правило резервування з панелі розкладів або помічника з планування.
var sbContext = {
oldValues: {
StartTime: "01/01/2016 08:00AM",
EndTime: "01/01/2016 05:00PM",
ResourceId: "00000000-0000-0000-0000-00000000",
ResourceScheduleSource: 690970001
},
newValues: {
StartTime: "01/01/2016 08:00AM",
EndTime: "01/01/2016 05:00PM",
ResourceId: "00000000-0000-0000-0000-00000000",
ResourceScheduleSource: 690970001
},
isCreate: true,
isUpdate: false
};
Результатом методу підтвердження має бути об'єкт JavaScript з наведеним далі визначенням.
Нотатка
Для правила бронювання не обов’язково включати цей JavaScript-код на користувацький веб-ресурс.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Приклад визначення функції JavaScript. Наступний код JavaScript — це єдиний код JavaScript, який необхідно включити до настроюваного веб-ресурсу.
function Validate(ctx) {
var url = Xrm.Page.context.getClientUrl();
var ruleResult = {
IsValid: false,
Message: '',
Type: 'error'
};
//
// perform some lookups or other validation logic here.
//
ruleResult.IsValid = false;
ruleResult.Message = 'Some Error Message Here.';
ruleResult.Type = 'error';
return ruleResult;
}
Наступний JavaScript може бути використаний для виклику настроюваної дії CRM, яка має такі ж параметри вводу та виводу, що й попередній приклад.
У записі правила бронювання ім’я методу має бути таким: MSFSAENG. ScheduleBoard.Перевірити. Для посилання див. знімок екрана в розділі «Налаштування правила резервування» цієї статті.
/// <reference path="xrm.d.ts" />
function brErrorCallback(sb) {
// Add custom error handeling here if desired.
return;
}
function brWarningCallback(sb) {
// Add custom warning handeling here if desired.
return;
}
function brSuccessCallback(sb) {
// add custom sucess handeling here if desired.
return;
}
var MSFSAENG;
(function (MSFSAENG) {
MSFSAENG.ScheduleBoard = {
url: Xrm.Page.context.getClientUrl() + "/api/data/v8.1/",
actionName: "msfsaeng_MSFSAScheduleBoardRuleActionSample",
actionInputParameters: function (ctx) {
var inputParameters = {};
if (ctx.isUpdate) {
inputParameters = {
"originalScheduleStart": ctx.oldValues.StartTime,
"originalScheduleEnd": ctx.oldValues.EndTime,
"originalBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.oldValues.ResourceId,
"name": ""
},
"originalScheduleSource": ctx.oldValues.ResourceScheduleSource,
"newScheduleStart": ctx.newValues.StartTime,
"newScheduleEnd": ctx.newValues.EndTime,
"newBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.newValues.ResourceId,
"name": ""
},
"newScheduleSource": ctx.newValues.ResourceScheduleSource,
"isCreate": ctx.isCreate,
"isUpdate": ctx.isUpdate
};
}
else {
inputParameters = {
"newScheduleStart": ctx.newValues.StartTime,
"newScheduleEnd": ctx.newValues.EndTime,
"newBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.newValues.ResourceId,
"name": ""
},
"newScheduleSource": ctx.newValues.ResourceScheduleSource,
"isCreate": ctx.isCreate,
"isUpdate": ctx.isUpdate
};
}
return JSON.stringify(inputParameters);
},
ctx: null,
ruleResult: {
IsValid: true,
Message: "",
Type: ""
},
outputParameters: {
isError: false,
isWarning: false,
errorMessage: "",
warningMessage: ""
},
Validate: function (context) {
this.ctx = context;
ScheduleBoardHelper.callActionWebApi(this);
return this.ruleResult;
},
errorCallback: brErrorCallback,
warningCallback: brWarningCallback,
successCallback: brSuccessCallback
};
var ScheduleBoardHelper = (function () {
function ScheduleBoardHelper() {
}
ScheduleBoardHelper.callActionWebApi = function (sb) {
var oDataEndpoint = sb.url + sb.actionName;
var req = new XMLHttpRequest();
req.open("POST", oDataEndpoint, false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (req.readyState == 4) {
req.onreadystatechange = null;
if (req.status == 200) {
sb.outputParameters = JSON.parse(req.response);
if (sb.outputParameters.isError) {
sb.ruleResult.IsValid = false;
sb.ruleResult.Message = sb.outputParameters.errorMessage;
sb.ruleResult.Type = 'error';
if (sb.errorCallback)
sb.errorCallback(sb);
return;
}
else if (sb.outputParameters.isWarning) {
sb.ruleResult.IsValid = false;
sb.ruleResult.Message = sb.outputParameters.warningMessage;
sb.ruleResult.Type = 'warning';
if (sb.warningCallback)
sb.warningCallback(sb);
return;
}
else {
sb.ruleResult.IsValid = true;
sb.ruleResult.Message = '';
sb.ruleResult.Type = '';
if (sb.successCallback)
sb.successCallback(sb);
return;
}
}
else {
alert('Error calling Rule Action. Response = ' + req.response + ', Status = ' + req.statusText);
}
}
};
req.send(sb.actionInputParameters(sb.ctx));
};
return ScheduleBoardHelper;
}());
})(MSFSAENG || (MSFSAENG = {}));
Додаткові нотатки
Резервування ресурсів, які можна забронювати, вмикається для використання правил резервування для створення попереджень або повідомлень про помилки, які користувачі бачать під час створення або редагування запису резервування ресурсів на основі спеціальних умов. Система використовує preventDefault
в бронюванні правила. Таким чином, потоки бізнес-процесів та інші користувацькі скрипти, пов’язані з подією, onSave
не можуть бути використані в об’єкті резервування ресурсу, який можна забронювати, з увімкненими правилами бронювання.
Проте обробку правил резервування можна вимкнути при збереженні формі Резервування, якщо увімкнути наведений нижче параметр, і це дозволить користувачам використовувати цикли бізнес-процесів. Можна скористатися API на стороні клієнта, щоб увімкнути цей параметр на рівні середовища.
Зчитування поточного значення налаштування msdyn_DisableProcessBookingRulesOnSaveBookingForm
.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
Увімкніть налаштування msdyn_DisableProcessBookingRulesOnSaveBookingForm
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
Вимкніть налаштування **msdyn_DisableProcessBookingRulesOnSaveBookingForm**
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})