Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Med reservationsregler i Field Service kan du oprette advarsels- eller fejlmeddelelser, som brugerne ser, når de opretter eller redigerer en ressourcereservationspost ud fra brugerdefinerede betingelser. For eksempel kan du oprette en bookingregel for at advare brugeren, når de forsøger at booke en arbejdsordre til en ressource på planlægningstavlen, som ikke har de nødvendige karakteristika til opgaven.
Bookingregler er tilpassede JavaScript-metoder, der udføres, før bookingposten for bookable resource oprettes eller redigeres. JavaScript-metoden kan acceptere en parameter, der indeholder oplysninger om ressourcebookingposten, der oprettes, og den skal returnere et JavaScript-objekt med de nødvendige egenskaber.
Konfigurer reservationsregler for at validere en reservation, når den er oprettet eller ændret.
Note
- Reservationsregler er kun tilgængelige for timevisningen og ikke daglige, ugentlige eller månedlige visninger af planlægningstavlen og planlægningsassistenten. De er tilgængelige, når en booking oprettes eller opdateres via Bookable Resource Booking-formularen .
- Bookingregler er ikke tilgængelige på Bookable Resource Booking-formularen , hvis der er aktiveret en forretningsprocesflow på formularen.
- Reservationsregler er ikke tilgængelige i gentildelingsfunktionen i planlægningstavlen.
- Hver brugerdefineret bookingregel kan kun returnere én fejl eller advarsel. For at returnere flere beskeder skal du oprette individuelle reservationsregler for hver validering.
Opret en løsning
Opret en tilpasset javascript-webressource. Opret en løsning i Microsoft Power Apps til at tilføje din brugerdefinerede JavaScript-webressource eller brug en eksisterende løsning, du bruger, til tilpasninger.
Opret en ny løsning til din bookingregels JavaScript-webressourcer. Brug en unik udgiver i stedet for standardudgiveren.
Når du har oprettet løsningen , skal du oprette en ny webressource.
Vælg JavaScript (JS) som typen.
Angiv din JavaScript-kode for bookingreglen.
Vælg Gem og Publicer.
Oprette en reservationsregel
Gå til Field Service, og vælg området Ressourcer.
Under Bookingindstillinger skal du vælge Bookingregler og derefter vælge Ny.
Angiv følgende oplysninger:
- Navnet på reservationsreglen.
- Den webressource, du har oprettet for nylig.
- Det metodenavn, du definerede i JavaScript.
Vælg Gem og luk. Skematavlens timevisning, vagtassistent og enhedsformular bruger bookingreglen.
Note
Tidsplanens timevisning og vagtassistent er de eneste steder, der understøtter bookingregler. Bookingregler gælder også, når brugere opretter eller opdaterer bookinger via Bookable Resource Booking-formularen . Bookingregler gælder ikke, når en bookingpost slettes. Bookingregler virker ikke på formularer, når man bruger multiedit. Hvis du vil stoppe udførelsen af reglen, skal du deaktivere reservationsreglen.
Opret en brugerdefineret proceshandling
For at udføre valideringen som en del af en bookingregel, brug Opret en brugerdefineret proces-handling. I JavaScript for din brugerdefinerede webressource skal du kalde den brugerdefinerede proceshandling og evaluere resultaterne fra handlingen. For at se, hvordan man kalder en brugerdefineret proceshandling, gå til eksempelkoden.
Brug den løsning, du har defineret til din brugerdefinerede webressource til at tilføje din tilpassede proceshandling.
Brug følgende input- og outputparametre. Du kan tilføje yderligere input- og outputparametre, alt efter hvad der kræves i scenariet. Sørg for, at det JavaScript, du definerer til at kalde din brugerdefinerede proceshandling, opdateres til at understøtte dine andre input- og outputparametre.
Inputparametre:
- originalScheduleStart – Datotid
- originalPlanSlut – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource – valgliste
- nyPlanStart – DateTime
- nyPlanSlut – DateTime
- isCreate – boolesk
- isUpdate – boolesk
Outputparametre:
- isError – boolesk
- isWarning – boolesk
- errorMessage – Streng
- warningMessage – Streng
På følgende skærmbillede vises et eksempel på en brugerdefineret proceshandling. Dette eksempel tjekker, om newBookableResource matcher den foretrukne ressource på arbejdsordren, og om newScheduleStart er inden for Time From Promised og Time To Promised. Det antages, at datoerne i bekræftet-vinduet er for en enkelt dato. Eksempel: Tid fra lovet: 01/01/2026 kl. 08:00 / Tid til lovet: 01/01/2026 kl. 12:00.
Eksempelkode
JavaScript-funktionen, du opretter, kan acceptere en enkelt parameter, som er bookingkonteksten. Booking-kontekstparameteren er ikke en typisk CRM-kontekst, der bruges i klientside-scripting.
Kontekstskema for reservation:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Booking-kontekstparameteren har følgende JavaScript-definition.
Note
Du behøver ikke inkludere denne JavaScript-kode i den brugerdefinerede webressource for bookingreglen.
De mulige værdier for ResourceScheduleSource kommer fra resource schedule source globale option-sættet. Brug denne ejendom til at finde ud af, om bookingreglen bliver udløst af skematavlen eller planlægningsassistenten.
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
};
Valideringsmetoden skal returnere et JavaScript-objekt med følgende definition.
Note
Du behøver ikke inkludere denne JavaScript-kode i den brugerdefinerede webressource for bookingreglen.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Eksempel på en JavaScript-funktionsdefinition. Følgende JavaScript-kode er den eneste JavaScript-kode, du behøver at inkludere i din brugerdefinerede webressource.
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;
}
Følgende JavaScript kan bruges til at kalde en brugerdefineret CRM-handling, der har de samme input- og outputparametre som i forrige eksempel.
I posten for reservationsreglen skal Metodenavn være: MSFSAENG.ScheduleBoard.Validate. Du kan finde oplysninger ved at gå til skærmbilledet i afsnittet "Konfiguration af en reservationsregel" i denne 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 = {}));
Brug forretningsprocesflows og andre brugerdefinerede scripts
Når du slår bookingen til bookbare ressourcer, brug bookingregler til at oprette advarsler eller fejlmeddelelser, som brugerne ser, når de opretter eller redigerer en ressourcebookingpost baseret på brugerdefinerede betingelser. Systemet bruger preventDefault i reservationsregler. Derfor kan du ikke bruge forretningsprocesflows og andre brugerdefinerede scripts, der binder til begivenheden onSave på Bookable Resource Booking-enheden , når bookingregler er aktiveret.
Du kan dog deaktivere behandlingen af bookingregler på gemme bookingformularen ved at aktivere følgende indstilling. Denne ændring gør det muligt for brugere at bruge forretningsprocesflowene. Brug klient-API'erne til at aktivere denne indstilling på miljøniveau.
- Læs den aktuelle værdi for indstillingen
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
- Aktiver indstillingen
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
- Deaktiver indstillingen
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})