Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Buchungsregeln im Felddienst erstellen Warnungs- oder Fehlermeldungen, die Benutzern beim Erstellen oder Bearbeiten eines Ressourcenbuchungsdatensatzes basierend auf benutzerdefinierten Bedingungen angezeigt werden. Erstellen Sie zum Beispiel eine Buchungsregel, die einen Nutzer warnt, wenn er versucht, einen Arbeitsauftrag für eine Ressource auf dem Planungsplan zu buchen, die nicht die für den Auftrag erforderlichen Eigenschaften besitzt.
Buchungsregeln sind benutzerdefinierte JavaScript-Methoden, die ausgeführt werden, bevor der Buchungsdatensatz für buchbare Ressourcen erstellt oder bearbeitet wird. Die JavaScript-Methode kann einen Parameter akzeptieren, der Informationen für den zu erstellenden Bookable Resource Booking-Eintrag enthält und ein JavaScript-Objekt mit den erforderlichen Eigenschaften zurückgeben muss.
Richten Sie Buchungsregeln ein, um eine Buchung zu überprüfen, wenn sie erstellt oder geändert wird.
Notiz
- Buchungsregeln sind nur für die stundenweise Ansicht und nicht für die tägliche, wöchentliche oder monatliche Ansicht der Zeitplantafel und des Planungsassistenten verfügbar. Sie sind verfügbar, wenn eine Buchung im Formular Bookable Resource Booking erstellt oder aktualisiert wird.
- Buchungsregeln sind auf dem Formular Buchungsformular für buchbare Ressourcen nicht verfügbar, wenn für das Formular ein Geschäftsprozessfluss aktiviert ist.
- Buchungsregeln sind für die Neuzuweisungsfunktion auf der Plantafel nicht verfügbar.
- Jede benutzerdefinierte Buchungsregel kann nur einen Fehler oder eine Warnung zurückgeben. Um mehrere Nachrichten zurückzugeben, richten Sie einzelne Buchungsregeln für jede Überprüfung ein.
Lösung erstellen
Erstellen Sie eine benutzerdefinierte JavaScript-Webressource. Erstellen Sie in Microsoft Power Apps eine Lösung, um Ihre eigene JavaScript-Webressource hinzuzufügen, oder verwenden Sie eine bestehende Lösung für Anpassungen.
Erstellen Sie eine neue Lösung für Ihre JavaScript-Webressourcen für die Buchungsregel. Verwenden Sie einen einzigartigen Verlag statt des Standardverlags.
Erstellen Sie nach dem Erstellen der Lösung eine neue Webressource.
Wählen Sie JavaScript (JS) als Typ aus.
Geben Sie Ihren JavaScript-Code für die Buchungsregel ein.
Wählen Sie Speichern und Veröffentlichen aus.
Einrichten einer Buchungsregel
Wechseln Sie zum Felddienst , und wählen Sie den Bereich "Ressourcen " aus.
Wählen Sie unter "Buchungseinstellungen" die Option "Buchungsregeln" und dann " Neu" aus.
Geben Sie die folgenden Informationen ein:
- Der Name der Buchungsregel.
- Die Webressource, die Sie kürzlich erstellt haben.
- Der Methodenname, den Sie in Ihrem JavaScript definiert haben.
Wählen Sie Speichern & Schließen aus. Die Stundenansicht der Plantafel, der Planungsassistent und das Entitätsformular verwenden die Buchungsregel.
Notiz
Die Stundenansicht und der Terminassistent des Schedule-Boards sind die einzigen Orte, die Buchungsregeln unterstützen. Buchungsregeln gelten auch, wenn Nutzer Buchungen über das Buchungsformular für Buchbare Ressourcen erstellen oder aktualisieren. Buchungsregeln werden beim Löschen eines Buchungsdatensatzes nicht ausgeführt. Die Buchungsregeln funktionieren bei Formularen nicht, wenn Multiedit verwendet wird. Um die Ausführung der Regel zu beenden, deaktivieren Sie die Buchungsregel.
Eine benutzerdefinierte Prozessaktion erstellen
Um die Validierung als Teil einer Buchungsregel durchzuführen, verwenden Sie die Aktion Erstellen eines benutzerdefinierten Prozesses. Rufen Sie im JavaScript Ihrer benutzerdefinierten Webressource die benutzerdefinierte Prozessaktion auf, und bewerten Sie die Ergebnisse aus der Aktion. Um zu sehen, wie man eine benutzerdefinierte Prozessaktion aufruft, gehe zum Beispielcode.
Verwenden Sie die von Ihnen definierte Lösung für Ihre benutzerdefinierte Webressource, um Ihre individuelle Prozessaktion hinzuzufügen.
Verwenden Sie die folgenden Eingabe- und Ausgabeparameter. Sie können bei Bedarf weitere Eingabe- und Ausgabeparameter hinzufügen. Stellen Sie sicher, dass das JavaScript, das Sie definieren, um Ihre benutzerdefinierte Prozessaktion aufzurufen, aktualisiert wird, um Ihre anderen Eingabe- und Ausgabeparameter zu unterstützen.
Eingabeparameter:
- originalerZeitplanStart – DateTime
- originalScheduleEnd - DateTime
- originalBookableResource – Entitätsreferenz
- originalScheduleSource - Picklist
- newScheduleStart - Datum/Uhrzeit
- newScheduleEnd - Datum/Uhrzeit
- isCreate - Boolesch
- isUpdate – Boolescher Wert
Ausgabeparameter:
- isError - Boolesch
- isWarning – boolesch
- errorMessage – Zeichenfolge
- warningMessage - Zeichenfolge
Der folgende Screenshot zeigt ein Beispiel für eine benutzerdefinierte Prozessaktion. Dieses Beispiel prüft, ob die newBookableResource mit der bevorzugten Ressource im Arbeitsauftrag übereinstimmt und ob der newScheduleStart innerhalb der Zeit von versprochen und Zeit bis versprochen liegt. Es wird angenommen, dass die Datumsangaben des zugesagten Fensters für ein einzelnes Datum gelten. Beispiel: Zeit von versprochen: 01.01.2026 8:00 Uhr / Zeit bis versprochen: 01.01.2026 12:00 Uhr.
Beispielcode
Die von Ihnen erstellte JavaScript-Funktion kann einen einzigen Parameter akzeptieren, nämlich den Buchungskontext. Der Buchungskontextparameter ist kein typischer CRM-Kontext, der im clientseitigen Skripting verwendet wird.
Buchungskontextschema:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Der Buchungskontextparameter hat folgende JavaScript-Definition.
Notiz
Du musst diesen JavaScript-Code nicht in die benutzerdefinierte Webressource für die Buchungsregel einfügen.
Die möglichen Werte für ResourceScheduleSource stammen aus dem globalen Optionensatz der Resource Schedule Source. Verwenden Sie diese Eigenschaft, um zu erkennen, ob die Buchungsregel von der Plantafel oder vom Planungsassistenten ausgelöst wird.
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
};
Die Validierungsmethode muss ein JavaScript-Objekt mit der folgenden Definition zurückgeben.
Notiz
Du musst diesen JavaScript-Code nicht in die benutzerdefinierte Webressource für die Buchungsregel einfügen.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Beispieldefinition der JavaScript-Funktion. Der folgende JavaScript-Code ist der einzige JavaScript-Code, den Sie in Ihre individuelle Webressource einfügen müssen.
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;
}
Mit dem folgenden JavaScript können Sie eine benutzerdefinierte CRM-Aktion aufrufen, die dieselben Eingabe- und Ausgabeparameter wie im vorherigen Beispiel enthält.
Im Buchungsregeldatensatz muss der Methodenname sein: MSFSAENG.ScheduleBoard.Validate. Weitere Informationen finden Sie im Screenshot im Abschnitt "Einrichten einer Buchungsregel" in diesem Artikel.
/// <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 = {}));
Verwenden Sie Geschäftsprozessabläufe und andere benutzerdefinierte Skripte
Wenn Sie buchbare Ressourcenbuchungen aktivieren, verwenden Sie Buchungsregeln, um Warnungen oder Fehlermeldungen zu erstellen, die Nutzer sehen, wenn sie einen Ressourcenbuchungseintrag basierend auf benutzerdefinierten Bedingungen erstellen oder bearbeiten. Das System verwendet preventDefault in Buchungsregeln. Daher können Sie keine Geschäftsprozessabläufe und andere benutzerdefinierte Skripte verwenden, die an das onSave Event gebunden sind, auf der Bookable Resource Booking-Entität , wenn Buchungsregeln aktiviert sind.
Sie können jedoch die Bearbeitung der Buchungsregeln im Speichermodus des Buchungsformulars deaktivieren, indem Sie die folgende Einstellung aktivieren. Diese Änderung ermöglicht es den Nutzern, die Geschäftsprozessabläufe zu nutzen. Nutzen Sie die Client-APIs, um diese Einstellung auf Umgebungsebene zu aktivieren.
- Lesen Sie den aktuellen Wert der Einstellung
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
- Aktivieren Sie die Einstellung
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
- Deaktivieren Sie die Einstellung
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})