Codeunit "Graph Request UTCAP"
Appels génériques à l'API Microsoft Graph, pour les besoins que les modules dédiés ("Sharepoint Storage UTCAP", "Outlook Calendar UTCAP"...) ne couvrent pas.
Remarks
Pris en charge : jeton d'application mis en cache et renouvelé sur refus 401, reprise automatique sur throttling
(429/503, en respectant Retry-After), pagination (@odata.nextLink), erreurs Graph lisibles.
Les URI sont relatives au point d'entrée v1.0 (ex. « /users/x@contoso.com ») ou absolues (liens renvoyés par Graph).
Toute valeur externe insérée dans une URI doit passer par
Examples
``` AL
GraphRequest.Initialize(ClientId, ClientSecret, TenantId);
GraphRequest.Get('/users/' + GraphRequest.EncodeSegment(Email), User);
GraphRequest.Send('GET', '/users/' + GraphRequest.EncodeSegment(Email) + '/photo/$value', Response);
if Response.IsSuccessStatusCode() then
Response.Content().ReadAs(PhotoStream);
```
Properties
| Name | Value |
|---|---|
| Access | Public |
Methods
Initialize
Initialise les appels avec les identifiants d'une inscription d'application (flux client credentials).
procedure Initialize(ClientId: Text; ClientSecret: SecretText; TenantId: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| ClientId | Text |
Identifiant de l'inscription d'application. |
| ClientSecret | SecretText |
Secret de l'inscription d'application. |
| TenantId | Text |
Identifiant ou domaine du tenant. |
SetDefaultRequestHeader
Ajoute un en-tête envoyé avec toutes les requêtes authentifiées (ex. « Prefer », « ConsistencyLevel »).
procedure SetDefaultRequestHeader(Name: Text; Value: Text)
Parameters
| Name | Type | Description |
|---|---|---|
| Name | Text | |
| Value | Text |
EncodeSegment
Encode une valeur (identifiant, adresse e-mail, nom de fichier...) pour l'insérer dans une URI.
procedure EncodeSegment(Value: Text): Text
Parameters
| Name | Type | Description |
|---|---|---|
| Value | Text |
Returns
| Type | Description |
|---|---|
| Text |
EncodePath
Encode un chemin relatif (ex. « /Dossier/Sous dossier ») segment par segment, en conservant les « / ».
procedure EncodePath(Path: Text): Text
Parameters
| Name | Type | Description |
|---|---|---|
| Path | Text |
Returns
| Type | Description |
|---|---|
| Text |
Get
Effectue un GET et renvoie le corps JSON. Échoue si la ressource n'existe pas ou si Graph renvoie une erreur.
procedure Get(Uri: Text; var Payload: JsonObject)
Parameters
| Name | Type | Description |
|---|---|---|
| Uri | Text | |
| Payload | JsonObject |
GetIfExists
Effectue un GET et renvoie le corps JSON. Échoue si Graph renvoie une erreur.
procedure GetIfExists(Uri: Text; var Payload: JsonObject): Boolean
Parameters
| Name | Type | Description |
|---|---|---|
| Uri | Text | |
| Payload | JsonObject |
Returns
| Type | Description |
|---|---|
| Boolean |
false si la ressource n'existe pas (HTTP 404/410). |
GetList
Renvoie tous les éléments d'une collection Graph (propriété « value »), toutes pages confondues.
procedure GetList(Uri: Text; var Values: JsonArray)
Parameters
| Name | Type | Description |
|---|---|---|
| Uri | Text | |
| Values | JsonArray |
Send
Envoie une requête authentifiée sans corps (ex. GET d'un contenu binaire, DELETE) et renvoie la réponse brute.
Le statut n'est pas contrôlé : voir
procedure Send(Method: Text; Uri: Text; var Response: HttpResponseMessage)
Parameters
| Name | Type | Description |
|---|---|---|
| Method | Text | |
| Uri | Text | |
| Response | HttpResponseMessage |
SendJson
Envoie une requête authentifiée avec un corps JSON (ex. POST, PATCH, lot « /$batch ») et renvoie la réponse brute.
Le statut n'est pas contrôlé : voir
procedure SendJson(Method: Text; Uri: Text; Payload: JsonObject; var Response: HttpResponseMessage)
Parameters
| Name | Type | Description |
|---|---|---|
| Method | Text | |
| Uri | Text | |
| Payload | JsonObject | |
| Response | HttpResponseMessage |
SendJson
Envoie une requête authentifiée avec un corps JSON et des en-têtes propres à cette requête (ex. « If-Match »),
et renvoie la réponse brute. Le statut n'est pas contrôlé : voir
procedure SendJson(Method: Text; Uri: Text; Payload: JsonObject; RequestHeaders: Dictionary of [Text, Text]; var Response: HttpResponseMessage)
Parameters
| Name | Type | Description |
|---|---|---|
| Method | Text | |
| Uri | Text | |
| Payload | JsonObject | |
| RequestHeaders | Dictionary of [Text, Text] | |
| Response | HttpResponseMessage |
Send
Envoie une requête avec un corps quelconque (ex. binaire) et renvoie la réponse brute.
Le statut n'est pas contrôlé : voir
procedure Send(Method: Text; Uri: Text; var Body: Codeunit "Temp Blob"; ContentHeaders: Dictionary of [Text, Text]; RequestHeaders: Dictionary of [Text, Text]; Authenticate: Boolean; var Response: HttpResponseMessage)
Parameters
| Name | Type | Description |
|---|---|---|
| Method | Text | |
| Uri | Text | |
| Body | System.Utilities."Temp Blob" |
Corps de la requête ; vide pour une requête sans contenu. |
| ContentHeaders | Dictionary of [Text, Text] |
En-têtes du contenu (ex. « Content-Type »). |
| RequestHeaders | Dictionary of [Text, Text] |
En-têtes de la requête. |
| Authenticate | Boolean |
false pour une URL pré-authentifiée renvoyée par Graph (téléchargement, session d'upload). |
| Response | HttpResponseMessage |
CheckResponse
Échoue avec le code HTTP et le message d'erreur Graph si la réponse n'est pas un succès.
procedure CheckResponse(Response: HttpResponseMessage)
Parameters
| Name | Type | Description |
|---|---|---|
| Response | HttpResponseMessage |
IsNotFound
Indique si la réponse signale une ressource inexistante (HTTP 404) ou supprimée (HTTP 410).
procedure IsNotFound(Response: HttpResponseMessage): Boolean
Parameters
| Name | Type | Description |
|---|---|---|
| Response | HttpResponseMessage |
Returns
| Type | Description |
|---|---|
| Boolean |
ReadJson
Lit le corps JSON d'une réponse. Un corps vide (ex. 204 No Content) produit un objet vide.
procedure ReadJson(Response: HttpResponseMessage; var Payload: JsonObject)
Parameters
| Name | Type | Description |
|---|---|---|
| Response | HttpResponseMessage | |
| Payload | JsonObject |