Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le regole di prenotazione in Field Service creano messaggi di avviso o di errore visualizzati dagli utenti durante la creazione o la modifica di un record di prenotazione delle risorse, in base a condizioni personalizzate. Ad esempio, crea una regola di prenotazione per avvisare un utente quando tenta di prenotare un ordine di lavoro a una risorsa sulla tabella degli orari che non possiede le caratteristiche richieste per il lavoro.
Le regole di prenotazione sono metodi JavaScript personalizzati che vengono eseguiti prima che il record di Booking Resource Booking venga creato o modificato. Il metodo JavaScript può accettare un parametro che contiene informazioni per il record Bookable Resource Booking da creare e deve restituire un oggetto JavaScript con le proprietà necessarie.
Configurare le regole di prenotazione per convalidare una prenotazione quando viene creata o modificata.
Note
- Le regole di prenotazione sono disponibili solo per la visualizzazione oraria e non per le visualizzazioni giornaliere, settimanali o mensili del tabellone di pianificazione e dell'assistente di pianificazione. Sono disponibili quando una prenotazione viene creata o aggiornata nel modulo Bookable Resource Booking.
- Le regole di prenotazione non sono disponibili sul modulo Bookable Resource Booking se sul modulo è abilitato un flusso dei processi aziendali.
- Le regole di prenotazione non sono disponibili nella funzione di riassegnazione della scheda di pianificazione.
- Ogni regola di prenotazione personalizzata può restituire un solo errore o avviso. Per restituire più messaggi, imposta regole di prenotazione individuali per ciascuna convalida.
Creare una soluzione
Creare una risorsa Web JavaScript personalizzata. Crea una soluzione in Microsoft Power Apps per aggiungere la tua risorsa web JavaScript personalizzata o usa una soluzione esistente che usi per le personalizzazioni.
Creare una nuova soluzione per le risorse Web JavaScript della regola di prenotazione. Usa un editore unico invece di quello predefinito.
Dopo aver creato la soluzione, creare una nuova risorsa Web.
Selezionare JavaScript (JS) come tipo.
Immettere il codice JavaScript per la regola di prenotazione.
Selezionare Salva e Pubblica.
Configurare una regola di prenotazione
Passare a Field Service e selezionare l'area Risorse.
In Impostazioni prenotazione selezionare Regole di prenotazione e quindi selezionare Nuovo.
Inserire i seguenti dati:
- Nome della regola di prenotazione.
- Risorsa Web creata di recente.
- Nome del metodo definito in JavaScript.
Seleziona Salva e chiudi. La visualizzazione oraria della scheda di pianificazione, l'assistente di pianificazione e il modulo entità utilizzano la regola di prenotazione.
Note
La visualizzazione oraria della bacheca di pianificazione e l'assistente di pianificazione sono le uniche aree in cui sono supportate le regole di prenotazione. Le regole di prenotazione si applicano anche quando gli utenti creano o aggiornano prenotazioni tramite il modulo Booking Resource Booking . Le regole di prenotazione non si applicano alla cancellazione di un registro di prenotazione. Le regole di prenotazione non funzionano sui moduli quando si usa multiedit. Per interrompere l'esecuzione della regola, disattivare la regola di prenotazione.
Creare un'azione di processo personalizzata
Per eseguire la validazione come parte di una regola di prenotazione, usa Crea un'azione di processo personalizzata. Nel codice JavaScript della tua risorsa web personalizzata, invoca l'azione del processo personalizzato e valuta i risultati dell'azione. Per vedere come chiamare un'azione di processo personalizzata, vai al codice di esempio.
Usa la soluzione che hai definito per la tua risorsa web personalizzata per aggiungere l'azione del processo personalizzato.
Usare i parametri di input e output seguenti. È possibile aggiungere altri parametri di input e output in base alle esigenze dello scenario. Assicurati che il JavaScript che definisci per chiamare la tua azione di processo personalizzata sia aggiornato per supportare gli altri parametri di input e output.
Parametri di input:
- originalScheduleStart - DateTime
- FinePianificazioneOriginale – DateTime
- originalBookableResource - EntityReference
- originalScheduleSource - Lista di selezione
- newScheduleStart - DateTime
- newScheduleEnd - DateTime
- isCreate – Boolean
- isUpdate - Boolean
Parametri di uscita:
- isError : valore booleano
- isWarning - Boolean
- errorMessage - String
- messaggio di avviso - Stringa
Lo screenshot seguente mostra un'azione di processo personalizzata di esempio. Questo esempio verifica se newBookableResource corrisponde alla risorsa preferita nell'ordine di lavoro e se newScheduleStart è compreso tra Time From Promised e Time To Promised. Si presuppone che le date della finestra promessa siano per una singola data. Esempio: Ora/data promessa di inizio: 01/01/2026 8:00 / Ora/data promessa di fine: 01/01/2026 12:00.
Esempio di codice
La funzione JavaScript che crei può accettare un singolo parametro, che è il contesto di prenotazione. Il parametro del contesto di prenotazione non è un tipico contesto CRM usato negli scripting lato client.
Schema del contesto di prenotazione:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Il parametro contesto della prenotazione ha la seguente definizione JavaScript.
Note
Non è necessario includere questo codice JavaScript nella risorsa web personalizzata per la regola di prenotazione.
I possibili valori per ResourceScheduleSource provengono dal set globale di opzioni della resource schedule source. Usa questa proprietà per sapere se la regola di prenotazione viene attivata dalla bacheca degli orari o dall'assistente per la programmazione.
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
};
Il metodo di convalida deve restituire un oggetto JavaScript con la definizione seguente.
Note
Non è necessario includere questo codice JavaScript nella risorsa web personalizzata per la regola di prenotazione.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Definizione di funzione JavaScript di esempio. Il seguente codice JavaScript è l'unico codice JavaScript che devi includere nella tua risorsa web personalizzata.
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;
}
Il codice JavaScript seguente può essere usato per chiamare un'azione CRM personalizzata con gli stessi parametri di input e output dell'esempio precedente.
Nel record della regola di prenotazione il nome del metodo deve essere MSFSAENG. ScheduleBoard.Validate. Per riferimento, vedere lo screenshot nella sezione "Configurazione di una regola di prenotazione" di questo articolo.
/// <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 = {}));
Utilizzare flussi di processi aziendali e altri script personalizzati
Quando attivi la prenotazione delle risorse prenotabili, usa le regole per creare avvisi o messaggi di errore che gli utenti vedono quando creano o modificano un record di prenotazione delle risorse, basandosi su condizioni personalizzate. Il sistema utilizza preventDefault nelle regole di prenotazione. Pertanto, non puoi usare flussi di processi aziendali e altri script personalizzati che si associano all'evento onSave sull'entità Booking Resource Booking quando le regole di prenotazione sono attivate.
Tuttavia, puoi disabilitare l'elaborazione delle regole di prenotazione nel salvataggio del modulo di prenotazione abilitando la seguente impostazione. Questa modifica consente agli utenti di utilizzare i flussi di processo aziendale. Usa le API client per abilitare questa impostazione a livello di ambiente.
- Leggere il valore corrente dell'impostazione
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
- Abilitare l'impostazione
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
- Disabilitare l'impostazione
msdyn_DisableProcessBookingRulesOnSaveBookingForm.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})