Konfigurere bestillingsregler
Bestillingsregler i Field Service oppretter advarsler eller feilmeldinger som brukere ser når de oppretter eller redigerer en ressursbestillingsoppføring, basert på egendefinerte betingelser. Du kan for eksempel opprette en bestillingsregel for å advare brukere når de prøver å bestille en arbeidsordre til en ressurs på planleggingstavlen, som ikke har ferdighetene som kreves for prosjektet.
Bestillingsregler er egendefinerte JavaScript-metoder som utføres før oppføringen for bestilling av en ressurs som kan reserveres, opprettes eller redigeres. JavaScript-metoden kan godta en parameter som inneholder informasjon for oppføringen Bestilling av ressurs som kan reserveres, som oppføres, og som må returnere et JavaScript-objekt med de nødvendige egenskapene.
Konfigurer bestillingsregler for å validere en bestilling når den opprettes eller endres.
Merk
- Bestillingsregler er bare tilgjengelige for timevisningen, og ikke daglige, ukentlige eller månedlige visninger av planleggingstavlen og planleggingsassistenten. De er også tilgjengelige når en bestilling opprettes eller oppdateres via ressursbestillingsskjemaet som kan reserveres.
- Bestillingsregler er ikke tilgjengelige i ressursbestillingsskjemaet som kan reserveres, hvis forretningsprosessflyt er aktivert i skjemaet.
- Bestillingsregler er ikke tilgjengelige for funksjonen for ny tilordning på planleggingstavlen.
- Hver tilpasset bestillingsregel kan bare returnere én feil/advarsel. For å returnere flere meldinger, konfigurer individuelle bestillingsregler for hver validering.
Opprett en løsning
Det første trinnet for å konfigurere bestillingsregelen, er å opprette en egendefinert JavaScript-webressurs. Vi anbefaler at du oppretter en løsning i CRM for å legge til den egendefinerte JavaScript-webressursen eller bruker en eksisterende løsning, og derfor kan det være nødvendig med tilpassinger.
Opprett CRM-løsning
- Fra Innstillings>Løsninger oppretter du en ny løsning for bestillingsregelen JavaScript-webressurser.
Følgende skjermbilde viser en nylig opprettet løsning. Vi anbefaler at løsningen bruker en unik utgiver i stedet for standardutgiveren.
- Etter at du har opprettet løsningen, velger du komponenten Webressurser og oppretter en ny webressurs.
- På den nye webressursen angir du følgende informasjon: a. Navn b. Visningsnavn c. Velg Script (JScript) som typen
- Velg alternativet for tekstredigeringsprogram for å angi JavaScript-koden for bestillingsregelen.
- Velg Lagre for å lagre webressursen.
- Velg Publiser for å kontrollere at webressursen for bestillingsregelen er publisert.
Konfigurere en bestillingsregel
Gå til hovedmenyen, gå til Field Service>Ressurser, og velg deretter Bestillingsregler under Bestillingsinnstillinger.
Velg +Ny for å opprette en ny bestillingsregel.
Fra bestillingsregelskjemaet angir du følgende informasjon: a. Navn b. Webressurs (Velg webressursen du opprettet nylig). c. Skriv inn metodenavnet du definerte i JavaScript.
Lagre bestillingsregelen. Når du har lagret bestillingsregelen, brukes den av timevisningen for planleggingstavlen og planleggingsassistenten eller enhetsskjemaet. Du kan deaktivere bestillingsregeloppføringen for å hindre at planleggingstavlen, planleggingsassistenten eller bestillingsenhetsskjemaet utfører regelen.
Merk
Bestillingsreglene støttes for øyeblikket bare i timevisningen for planleggingstavlen og planleggingsassistenten. Bestillingsreglene støttes også når bestillingene opprettes eller oppdateres ved hjelp av ressursbestillingsskjemaet som kan reserveres. Bestillingsregler kjøres ikke ved sletting av en bestillingsoppføring. Bestillingsregler fungerer ikke på skjemaer ved bruk av flere redigeringer.
Opprett en CRM-handling
I dette avsnittet skal vi se på et eksempel på hvordan du kan bruke en egendefinert CRM-handling til å utføre valideringen som en del av en bestillingsregel.
Når du bruker en CRM-handling for valideringen av bestillingsregelen, må du fortsatt opprette en egendefinert webressurs som angitt ovenfor. JavaScript du definerer i den egendefinerte webressursen, kaller den egendefinerte CRM-handlingen og evaluerer resultatene fra den egendefinerte CRM-handlingen. Se vedlegg A på slutten av dette dokumentet for eksempelkode som du kan bruke til å kalle en tilpasset CRM-handling.
En egendefinert CRM-handling må opprettes i CRM. Vi anbefaler at du bruker CRM-løsningen du har definert for den egendefinerte webressursen, til å legge til den egendefinerte CRM-handlingen.
Den egendefinerte CRM-handlingen må ha følgende inndata- og utdataparametere. Du kan legge til flere inn inndata- og utdataparametere etter hvert som scenarioet krever. Du må sikre at JavaScript du definerer for å kalle den egendefinerte CRM-handlingen, oppdateres til å støtte flere parametere for inndata og utdata.
Inndataparametere:
- originalScheduleStart – DateTime
- originalScheduleEnd – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource – Picklist
- newScheduleStart – DateTime
- newScheduleEnd – DateTime
- isCreate – Boolean
- isUpdate – Boolean
Utdataparametere:
- isError – Boolean
- isWarning – Boolean
- errorMessage – String
- warningMessage - String
Følgende skjermbilde viser et eksempel på en egendefinert CRM-handling. Dette eksemplet kontrollerer om newBookableResource samsvarer med den foretrukne ressursen i arbeidsordren, og om newScheduleStart er innenfor Tid fra lovet og Tid til lovet. Det antas at datoene i "lovet"-vinduet er for én enkelt dato. Eksempel: Tid fra lovet: 01/01/2016 8:00AM / Tid til lovet: 01/01/2016 12:00PM.
Eksempelkode
JavaScript-funksjonen du opprettet, kan godta én enkelt parameter, som anses som bestillingskonteksten. Den innsendte bestillingskontekstparameteren er ikke en typisk CRM-kontekst som brukes i skript på klientsiden.
Bestillingskontekstskjema:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Parameteren for bestillingskontekst vil ha følgende JavaScript-definisjon.
Merk
Det er ikke nødvendig å inkludere JavaScript-koden i den egendefinerte webressursen for bestillingsregelen.
Mulige verdier for ResourceScheduleSource kommer fra det globale alternativsettet for ressursplankilden. Du kan bruke denne egenskapen til å finne ut om bestillingsregelen utløses fra planleggingstavlen eller planleggingsveiviseren.
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 må returnere et JavaScript-objekt med følgende definisjon.
Merk
Det er ikke nødvendig å inkludere JavaScript-koden i den egendefinerte webressursen for bestillingsregelen.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Eksempel på JavaScript-funksjonsdefinisjon. JavaScript-koden nedenfor er den eneste JavaScript-koden du må inkludere i den egendefinerte webressursen.
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 brukes til å kalle en egendefinert CRM-handling som har samme inndata- og utdataparametere som forrige eksempel.
I bestillingsregeloppføringen må Metodenavn være: MSFSAENG.ScheduleBoard.Validate. For referanse kan du se skjermbildet i delen "Opprette en bestillingsregel" i denne artikkelen.
/// <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 = {}));
Ytterligere merknader
Bestillingen av ressurs som kan reserveres, aktiveres for å bruke bestillingsregler til å opprette advarsler eller feilmeldinger som brukere ser når de oppretter eller redigerer en ressursbestillingsoppføring, basert på egendefinerte betingelser. Systemet bruker preventDefault
i bestillingsregler. Forretningsprosessflyter og andre egendefinerte skript som er bundet til onSave
-hendelsen, kan derfor ikke brukes i ressursbestillingsenheten når bestillingsregler er aktivert.
Behandlingen av bestillingsregler kan imidlertid deaktiveres ved lagring av Bestilling-skjemaet ved å aktivere innstillingen nedenfor, noe som gjør at brukerne kan bruke forretningsprosessflytene. API-ene på klientsiden kan brukes til å aktivere denne innstillingen på et miljønivå.
Les gjeldende verdi for innstillingen msdyn_DisableProcessBookingRulesOnSaveBookingForm
.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
Aktiver innstillingen msdyn_DisableProcessBookingRulesOnSaveBookingForm
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
Deaktiver innstillingen **msdyn_DisableProcessBookingRulesOnSaveBookingForm**
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})