API per la ricerca di disponibilità delle risorse
Le organizzazioni di assistenza sul campo hanno sempre del lavoro in arrivo che deve essere pianificato da un agente del servizio al telefono o direttamente dal cliente tramite il sito Web. La creazione della prenotazione si basa in genere sulle risorse a disposizione dell'azienda e sui requisiti del lavoro.
Quando si utilizza Dynamics 365 Field Service v8.8.43.51 e Pianificazione risorse universale v3.12.46.21 per pianificare il lavoro, può essere usata l'API msdyn_SearchResourceAvailability
per recuperare tutte le risorse idonee per il lavoro e consentire una pianificazione efficiente del lavoro. Al momento della stesura di questo articolo, v3 è l'ultima versione di msdyn_SearchResourceAvailability e supporta le chiamate API Web.
Parametri di input
Nome | Digita | Descrizione | Richiesto | Valore predefinito |
---|---|---|---|---|
Versione | Stringa | Il numero di versione dell'API identifica la versione dell'API da richiamare. Segue il formato "principale.secondaria.patch". La richiesta non deve contenere il numero di versione completo.
|
Sì | -N/D- |
IsWebApi | Booleano | Imposta su Vero per utilizzare la SA tramite l'API Web. | Sì | -N/D- |
Requisito | Entity | Questo attributo specifica il requisito della risorsa per cui viene recuperata la disponibilità della risorsa. Dovrebbe essere un'entità di tipo msdyn_resourcerequirement. Il requisito può essere un record preesistente dal database oppure uno creato al volo con i vincoli necessari. L'entità dovrebbe contenere tutte le specifiche rilevanti per la ricerca. Il @odata.type per questa entità dovrebbe essere Microsoft.Dynamics.CRM.msdyn_requirement . Di seguito sono riportati alcuni attributi importanti da popolare:
|
Sì | -N/D- |
Impostazioni | Entity | L'attributo impostazioni aiuta a filtrare ulteriormente le risorse recuperate. Le impostazioni sono specificate come attributi in un contenitore di entità. Il tipo di entità non ha importanza, è possibile specificare qualsiasi nome logico di entità. | Sì | -N/D- |
ResourceSpecification | Entity | L'attributo resourceSpecification è definito come attributi in un contenitore di entità. Il @odata.type per questa entità dovrebbe essere Microsoft.Dynamics.CRM.expando . |
No | Nessuna |
Entità impostazioni
L'entità impostazioni non è un'entità che esiste in Dataverse; tuttavia, è una raccolta di tutti i seguenti attributi che aiuta l'API dell'assistente di pianificazione a filtrare i risultati. Pertanto, il @odata.type
per questa entità dovrebbe essere Microsoft.Dynamics.CRM.expando
.
Nome | Digita | Descrizione | Richiesto | Valore predefinito |
---|---|---|---|---|
ConsiderSlotsWithLessThanRequiredCapacity | Booleano | Imposta su Vero se una fascia oraria con capacità inferiore a quella richiesta (sforzo) deve essere considerata nel calcolo delle potenziali fasce orarie disponibili sul calendario della risorsa. | No | Falso |
ConsiderSlotsWithLessThanRequiredDuration | Booleano | Imposta su Vero se una fascia oraria con durata inferiore a quella richiesta deve essere considerata nel calcolo delle potenziali fasce orarie disponibili sul calendario della risorsa. | No | Falso |
ConsiderSlotsWithOverlappingBooking | Booleano | Imposta su Vero se una fascia oraria con prenotazioni sovrapposte deve essere considerata nel calcolo delle potenziali fasce orarie disponibili sul calendario della risorsa. | No | Falso |
ConsiderSlotsWithProposedBookings | Booleano | Imposta su Vero se una fascia oraria con prenotazioni proposte deve essere considerata nel calcolo delle potenziali fasce orarie disponibili sul calendario della risorsa. | No | False |
ConsiderAppointments | Boolean | Impostalo su Vero per l'API di disponibilità delle risorse di ricerca per rispettare gli appuntamenti Dataverse come prenotazioni della risorsa, purché siano state impostate le impostazioni a livello di organizzazione e risorse. Gli appuntamenti con stato Occupato o Completato saranno considerati non disponibili dalle operazioni di pianificazione. | No | False |
ConsiderTravelTime | Boolean | Imposta su Vero se la durata del viaggio deve essere considerata quando si calcolano le potenziali fasce orarie sul calendario della risorsa. | No | Vero |
MovePastStartDateToCurrentDate | Booleano | Imposta su Vero per spostare una data di inizio passata alla data corrente. | No | Falso |
UseRealTimeResourceLocation | Booleano | Imposta su Vero se la posizione in tempo reale delle risorse deve essere usata quando si calcolano le potenziali fasce orarie sul calendario della risorsa. | No | Falso |
SortOrder | Entity | L'ordinamento può essere specificato utilizzando una raccolta di entità. Ogni entità nella raccolta rappresenterà un criterio di ordinamento. Il @odata.type per questa entità dovrebbe essere Microsoft.Dynamics.CRM.expando . Di seguito sono riportati gli attributi che è necessario popolare:
|
No | Nessuna |
MaxResourceTravelRadius | Entity | Questo attributo specifica il raggio di viaggio massimo che può essere definito in un'entità. Il @odata.type per questa entità dovrebbe essere Microsoft.Dynamics.CRM.expando . Di seguito sono riportati gli attributi che è necessario popolare:
|
No | 0 km. In tal caso, non verranno restituite risorse per i requisiti in loco. |
MaxNumberOfResourcesToEvaluate | Intero | Questo attributo definisce un limite per il numero di risorse considerate per la richiesta. | No | Limite di recupero della disponibilità delle risorse dalla definizione dell'entità pianificabile |
Entità di specifica della risorsa
Nome | Digita | Descrizione | Richiesto | Valore predefinito |
---|---|---|---|---|
ResourceTypes | EntityCollection | Questo attributo specifica il tipo di risorsa richiesto per il requisito. Può essere specificato utilizzando una raccolta di entità. Ogni entità nella raccolta rappresenterà un tipo di risorsa prenotabile. Il @odata.type per questa entità dovrebbe essere Microsoft.Dynamics.CRM.msdyn_resourceType . Questo è l'attributo richiesto:
|
No | Tutti i tipi di risorse eccetto i team |
PreferredResources | EntityCollection | Questo attributo specifica le risorse preferite per il requisito. L'aggiunta di risorse a questa raccolta di entità garantisce che siano in cima all'elenco delle risorse disponibili. Anche le risorse che non fanno parte della raccolta di entità saranno nell'elenco, ma solo dopo le risorse preferite. | No | Nessuna |
RestrictedResources | EntityCollection | Questo attributo specifica le risorse che non devono essere considerate per il requisito. Tutte le fasce orarie di questa risorsa verranno escluse dall'elenco dei risultati di questa API. | No | Nessuna |
MustChooseFromResources | EntityCollection | Questo attributo specifica le uniche risorse che possono essere presenti nell'elenco delle risorse disponibili. Filtrerà tutti gli altri risultati eliminandoli dall'elenco di output. | ||
Vincoli | Entity | Questo attributo specifica i vincoli aggiuntivi che dovrebbero essere applicati al recupero delle risorse disponibili. | No | Nessuna |
RetrieveResourcesQueryId | GUID | L'ID per la query Recupera risorse. | No | L'ID della query Recupera risorse predefinita. |
BookedResourceId | GUID | Questo attributo specifica la risorsa attualmente prenotata per il requisito. | No | None |
Nota
Gli attribuiti delle risorse Preferred/ Restricted / MustChooseFrom possono essere specificati utilizzando una raccolta di entità di entità di risorse prenotabili. Ogni entità nella raccolta rappresenterà una risorsa Preferred / Restricted / MustChooseFrom. Questo è l'attributo richiesto per loro:
-
Value (Guid): l'ID della risorsa prenotabile della risorsa Preferred / Restricted / MustChooseFrom. Il
@odata.type
per questa entità dovrebbe essereMicrosoft.Dynamics.CRM.msdyn_bookableresource
.
Vincoli
Ulteriori vincoli possono essere specificati tramite gli attributi in questa entità. Il tipo di entità non ha importanza, è possibile specificare qualsiasi nome logico di entità.
Esamina la query Recupera risorse nelle impostazioni della scheda di pianificazione per individuare i vincoli che potrebbero essere applicati. Per impostazione predefinita, sono inclusi i seguenti:
Nome | Digita | Descrizione |
---|---|---|
Caratteristiche | EntityCollection | Una raccolta di ID caratteristica che una risorsa qualificata deve avere. |
Ruoli | EntityCollection | Una raccolta di ID ruolo che una risorsa qualificata deve avere. |
Aree | EntityCollection | Una raccolta di ID area. Una risorsa qualificata deve essere assegnata a una delle aree. |
UnspecifiedTerritory | Booleano | In combinazione con il vincolo delle aree, specifica che una risorsa qualificata deve essere assegnata a una delle aree o a nessuna area. |
OrganizationalUnits | EntityCollection | Una raccolta di ID unità organizzativa. Una risorsa qualificata deve essere membro di una delle unità organizzative specificate. |
Teams | EntityCollection | Una raccolta di ID team. Una risorsa qualificata deve appartenere a uno dei team (implica che il tipo di risorsa è un utente di sistema). |
BusinessUnits | EntityCollection | Una raccolta di ID Business Unit. Una risorsa qualificata deve appartenere a una delle Business Unit (implica che la risorsa è un utente di sistema). |
Parametri di output
Al livello più alto, l'output ha i seguenti quattro parametri. I risultati sono rappresentati in raccolte di entità ed entità. Le risposte potrebbero non includere tutti gli attributi descritti qui poiché i valori null o valori non ND vengono omessi dalla risposta. Verifica sempre la presenza di un attributo prima di provare ad accedervi.
Nome | Digita | Descrizione |
---|---|---|
TimeSlots | EntityCollection | Una raccolta dei risultati delle fasce orarie. Per ulteriori informazioni, vedi la sezione (entità fascia oraria)[#time-slots-entity]. |
risorse | EntityCollection | Una raccolta dei risultati delle risorse. Le risorse sono rappresentate come una raccolta di entità con i seguenti attributi:
|
Elementi correlati | Entity | Le risorse correlate rappresentano risorse e fasce orarie di risorse che non sono direttamente qualificate per il requisito richiesto ma sono correlate. Ad esempio, se un membro del team si qualifica per un requisito, gli altri membri di quel team sono risultati correlati.
|
Eccezioni | Entity | Questo attributo contiene informazioni su tutte le eccezioni che si sono verificate e informazioni su se e dove la ricerca delle risorse è stata troncata.
|
Entità fasce orarie
Nome | Digita | Descrizione |
---|---|---|
ID | GUID | Identificatore univoco della fascia oraria |
Digita | Intero | Il tipo di fascia oraria può essere uno dei seguenti:
|
StartTime | DataOra | L'ora di inizio della fascia oraria. Se è previsto un viaggio per il requisito, questa è l'ora di inizio del viaggio. In caso contrario, questa è l'ora di inizio del requisito. |
ArrivalTime | DataOra | L'ora di arrivo della fascia oraria. Se è previsto un viaggio per il requisito, questa è l'ora di inizio del requisito una volta completato il viaggio. In caso contrario, è uguale all'ora di inizio della fascia oraria. |
EndTime | DataOra | L'ora di fine della fascia oraria. |
Lavoro | Intero | Lo sforzo o la capacità della risorsa di soddisfare i requisiti. |
ResourceRequirement | EntityReference | Il requisito di risorsa per cui vengono recuperate le fasce orarie. |
Potential | Booleano | Un valore booleano che indica se la fascia oraria ha il potenziale per soddisfare il requisito richiesto. |
IsDuplicate | Booleano | Un valore booleano che indica se la fascia oraria è un duplicato. |
AllowOverlapping | Booleano | Un valore booleano che indica se la sovrapposizione è consentita. |
Risorsa | Entity | La risorsa a cui appartiene la fascia oraria. Per ulteriori informazioni, vedi risorsa fascia oraria. |
Location | Entity | La posizione ha tre attributi:
|
Viaggi | Entity | Questa entità contiene i dettagli delle informazioni sulla distanza e durata del viaggio per una fascia oraria. Gli attributi sono i seguenti:
|
Successiva | Entity | Questa entità contiene i dettagli sulla distanza e la durata del viaggio alla prenotazione della fascia oraria successiva.
|
Disponibilità | Entity | Le informazioni dettagliate sulla disponibilità per una fascia oraria. Viene utilizzato in connessione con i gruppi di ore.
|
TimeGroup | Entity | I dettagli su un gruppo di ore.
|
Suggerimento
Quando crei prenotazioni con l'API, utilizza il campo Potenziale descritto nella tabella. Il mancato utilizzo di tale campo potrebbe comportare prenotazioni sovrapposte o non idonee.
Risorsa fascia oraria
Name | Type | Descrzione |
---|---|---|
Risorsa | EntityReference | Un riferimento entità per la risorsa prenotabile. |
ResourceGroup | EntityReference | Un riferimento entità per il gruppo di risorse prenotabili. |
BusinessUnit | EntityReference | Un riferimento di entità alla Business Unit. |
OrganizationalUnit | EntityReference | Un riferimento entità per l'unità organizzativa. |
ResourceType | Intero | Tipo di risorsa. Vedi l'attributo ResourceType nell'entità BookableResource per i possibili valori. |
PoolId | GUID | L'ID del pool di cui fa parte la risorsa per la durata dalla fascia oraria. |
CrewId | GUID | L'ID del team di cui fa parte la risorsa per la durata dalla fascia oraria. |
Caratteristiche | EntityCollection | Le caratteristiche delle risorse prenotabili. Ciascuna entità nella raccolta contiene entità con caratteristiche e informazioni sulla valutazione.
|
HasStartLocation | Booleano | Un valore booleano che indica se la risorsa ha una posizione iniziale. |
HasEndLocation | Booleano | Un valore booleano che indica se la risorsa ha una posizione finale. |
Indirizzo e-mail | Stringa | L'indirizzo e-mail della risorsa. |
Telefono | Stringa | Il numero di telefono della risorsa. |
ImagePath | Stringa | Il percorso dell'immagine della risorsa. |
CalendarId | GUID | L'ID calendario della risorsa. |
Esempi
In questo esempio, la v3 dell'API dell'assistente di pianificazione che consente chiamate API Web viene utilizzata per un requisito della durata di 60 minuti. Utilizzando l'attributo impostazioni, i risultati vengono filtrati. Per i risultati finali vengono presi in considerazione due tipi di risorse: 1 e 2 (in altre parole, generico e contatto).
{
"Version": "3",
"IsWebApi": true,
"Requirement": {
"msdyn_fromdate": "2021-07-14T00:00:00Z",
"msdyn_todate": "2021-07-15T23:59:00Z",
"msdyn_remainingduration": 60,
"msdyn_duration": 60,
"msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
"@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
},
"Settings": {
"ConsiderSlotsWithProposedBookings": false,
"MovePastStartDateToCurrentDate": true,
"@odata.type": "Microsoft.Dynamics.CRM.expando"
},
"ResourceSpecification": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"ResourceTypes": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "1"
},
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2"
}
],
"Constraints": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Characteristics": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"characteristic": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
}
}
],
"Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Territories": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
}
]
L'esempio seguente dimostra l'utilizzo corretto delle raccolte di entità. In questo caso, specifica MustChooseFromResources.
{
"Version": "3",
"IsWebApi": true,
"Requirement": {
"msdyn_fromdate": "2021-07-14T00:00:00Z",
"msdyn_todate": "2021-07-15T23:59:00Z",
"msdyn_remainingduration": 60,
"msdyn_duration": 60,
"msdyn_TimeGroup@odata.bind": "/msdyn_timegroups(c3dc79ea-d12f-ee11-9cc9-000d3a745a58)",
"@odata.type": "Microsoft.Dynamics.CRM.msdyn_resourcerequirement"
},
"Settings": {
"ConsiderSlotsWithProposedBookings": false,
"MovePastStartDateToCurrentDate": true,
"@odata.type": "Microsoft.Dynamics.CRM.expando"
},
"ResourceSpecification": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"ResourceTypes@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"ResourceTypes": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "1"
},
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2"
}
],
"MustChooseFromResources@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"MustChooseFromResources": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "2145a982-f718-ed11-b83e-0022482d79c8",
}
],
"Constraints": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"Characteristics@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Characteristics": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"characteristic": {
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "67387f9f-12e2-ec11-bb43-000d3aed25f7"
}
}
],
"Territories@odata.type": "Collection(Microsoft.Dynamics.CRM.expando)",
"Territories": [
{
"@odata.type": "Microsoft.Dynamics.CRM.expando",
"value": "cc19f004-4483-ee11-8178-000d3a5c32c3"
}
]
}
}
}
}
}
}