Objets serveur

La logique serveur fournit des objets intégrés sous l’espace de noms du serveur. Ces objets simplifient le développement en vous permettant de consigner des messages, d’appeler des services externes, d’utiliser Dataverse ou d’accéder aux détails de la demande.

HttpClient

Utilisez le client HTTP pour l’intégrer à des services externes en envoyant des requêtes HTTP.

Note

Actuellement, la logique serveur prend uniquement application/jsonen charge les types de text/htmlcontenu et application/x-www-form-urlencoded de contenu dans le corps de la requête.

Exemples

HTTP GET

let url = "https://contoso.com/objects";
let header = { client_id: "00001111-aaaa-2222-bbbb-3333cccc4444" };

let response = await Server.Connector.HttpClient.GetAsync(url, header);

HTTP POST

let url = "https://contoso.com/objects";
let body = JSON.stringify({ name: "Sample Account" });
let header = { client_id: "00001111-aaaa-2222-bbbb-3333cccc4444" };
let contentType = "application/json";

// Make the POST request
let response = await Server.Connector.HttpClient.PostAsync(url, body, header, contentType);

HTTP PUT

let url = "https://contoso.com/objects/6";
let body = JSON.stringify({ name: "Updated Sample Account" });
let header = { client_id: "00001111-aaaa-2222-bbbb-3333cccc4444" };
let contentType = "application/json";

// Make the PUT request
let response = await Server.Connector.HttpClient.PutAsync(url, body, header, contentType);

CORRECTIF HTTP

let url = "https://contoso.com/objects/6";
let body = JSON.stringify({ name: "{\"capacity\": \"2 TB\"}" });
let header = { client_id: "00001111-aaaa-2222-bbbb-3333cccc4444" };
let contentType = "application/json";

// Make the PATCH request
let response = await Server.Connector.HttpClient.PatchAsync(url, body, header, contentType);

HTTP DELETE

let url = "https://contoso.com/objects/6";
let header = { contentType: "application/json" };

let response = await Server.Connector.HttpClient.DeleteAsync(url, header);

Exemple : réponse

{
    "StatusCode": 200,
    "Body": "JsonString",
    "IsSuccessStatusCode": true,
    "ReasonPhrase": "OK",
    "ServerError": false,
    "ServerErrorMessage": null,
    "Headers": {
        "Transfer-Encoding": "chunked",
        "Connection": "keep-alive",
        "Server": "",
        "Content-Type": "application/json"
    }
}

SiteSetting

Vous permet de lire les valeurs des paramètres de site pour le site web actuel.

Note

Ne stockez pas de secrets, tels que des clés API ou des informations d’identification, directement dans la logique du serveur. Au lieu de cela, stockez-les en toute sécurité dans Azure Key Vault, sourcez-les via des variables d’environnement et référencez-les à l’aide des paramètres de site.

Example

Server.SiteSetting.Get("Search/Enabled");

EnvironmentVariable

Lit la valeur d’une variable d’environnement.

Example

Server.EnvironmentVariable.get("SITEPATH");

Website

Fournit des détails sur l’enregistrement de site web actuel dans Dataverse.

Example

Server.Website.adx_primarydomain;

Utilisateur

Fournit des détails sur l’utilisateur connecté. Retourne la valeur Null si elle est anonyme.

Example

Server.User.fullname;

Dataverse

Utilisez l’objet Server.Connector.Dataverse pour effectuer des opérations CRUD sur des tables Dataverse et appeler des API personnalisées.

Note

  • Lorsque vous faites référence à des tables Dataverse dans votre code, utilisez EntitySetName. Par exemple, pour accéder à la account table, utilisez EntitySetName accounts.

CreateRecord

Créez un enregistrement.

Server.Connector.Dataverse.CreateRecord(string entitySetName, string payload)   

Exemple

Server.Connector.Dataverse.CreateRecord("accounts", "{\"name\": \"Contoso Ltd.\", \"telephone1\": \"555-555-0100\", \"websiteurl\": \"https://contoso.com\"}");

RécupérerEnregistrement

Récupère un enregistrement unique par ID.

Server.Connector.Dataverse.RetrieveRecord(string entitySetName, string id)
Server.Connector.Dataverse.RetrieveRecord(string entitySetName, string id, string options)
Server.Connector.Dataverse.RetrieveRecord(string entitySetName, string id, string options, bool skipCache)

Example

Server.Connector.Dataverse.RetrieveRecord("accounts", "00000000-0000-0000-0000-000000000001", "$select=name,telephone1");

RetrieveMultipleRecords

Récupère un ensemble d’enregistrements.

Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName)
Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName, string options)
Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName, string options, bool skipCache) 

Example

Server.Connector.Dataverse.RetrieveMultipleRecords("accounts", "$select=name,emailaddress1&$top=3");

Mise à jourEnregistrement

Met à jour un enregistrement existant par ID.

Server.Connector.Dataverse.UpdateRecord(string entitySetName, string id, string payload)   

Example

Server.Connector.Dataverse.UpdateRecord("accounts", "00000000-0000-0000-0000-000000000001", "{ \"telephone1\": \"555-555-0100\" }");

DeleteRecord

Supprime un enregistrement par ID.

Server.Connector.Dataverse.DeleteRecord(string entitySetName, string id) 

Example

Server.Connector.Dataverse.DeleteRecord("accounts", "00000000-0000-0000-0000-000000000001");

InvokeCustomApi

Server.Connector.Dataverse.InvokeCustomApi(string httpMethod, string url, string payload = null) 

Appeler une fonction liée :

Server.Connector.Dataverse.InvokeCustomApi("get", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundFunction");

Appelez une action liée :

Server.Connector.Dataverse.InvokeCustomApi("post", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundAction", "{ \"parameter1\": \"value1\" }");

Appelez une action indépendante :

Server.Connector.Dataverse.InvokeCustomApi("post", "new_Action", "{ \"parameter1\": \"value1\" }");

Exemple : réponse

{
    "StatusCode": 204,
    "Body": "",
    "IsSuccessStatusCode": true,
    "ReasonPhrase": "No Content",
    "ServerError": false,
    "ServerErrorMessage": null,
    "Headers": {
        "x-ms-cds-service-request-id": "00001111-aaaa-2222-bbbb-3333cccc4444"
    }
}

Logger

Utilisez l’enregistreur d’événements pour écrire des messages de diagnostic que vous pouvez afficher dans l’extension DevTools.

Exemple :

Server.Logger.Log("Information message");
Server.Logger.Warn("Warning message");
Server.Logger.Error("Error message");

Contexte

L’objet Server.Context fournit des informations sur l’appel de logique de serveur actuel. Les propriétés disponibles dépendent de l’appel de la logique du serveur via une requête HTTP ou à partir d’un modèle Liquid.

Propriétés

Nom Disponible pour Description
ActivityId HTTP et Liquid Identificateur unique pour l’appel de logique serveur. Utilisez cette valeur pour mettre en corrélation les journaux et résoudre les problèmes d’une opération.
Body HTTP Corps de la requête HTTP brute.
FunctionName HTTP et Liquid Nom de la fonction JavaScript appelée. Pour un appel Liquid, cette valeur correspond au operation paramètre de la serverlogic balise.
Headers HTTP En-têtes de requête HTTP.
HttpMethod HTTP Méthode de requête HTTP, telle que GET, , POSTPUT, PATCH, ou DELETE.
Input Liquid Chaîne d’entrée fournie via le input paramètre de la serverlogic balise Liquid. Lorsque l’entrée contient des données structurées, analysez-la en tant que JSON avant de l’utiliser.
QueryParameters HTTP Paramètres de chaîne de requête à partir de la requête HTTP.
ServerLogicName HTTP et Liquid Nom de l’enregistrement logique du serveur appelé.
Url HTTP URL complète de la requête HTTP.

Accéder au contexte de requête HTTP

L’exemple suivant lit le paramètre de requête lorsque la id logique du serveur est appelée par le biais d’une requête HTTP :

var id = Server.Context.QueryParameters["id"];

Vous pouvez également accéder aux métadonnées de demande :

function getRequestInformation() {
    return JSON.stringify({
        activityId: Server.Context.ActivityId,
        functionName: Server.Context.FunctionName,
        httpMethod: Server.Context.HttpMethod,
        serverLogicName: Server.Context.ServerLogicName,
        url: Server.Context.Url
    });
}

Accéder au contexte d’appel Liquid

Lorsque la logique du serveur est appelée à partir de Liquid, utilisez Server.Context.Input cette option pour lire la valeur fournie via le paramètre de input la balise.

Par exemple, liquid passe l’entrée JSON suivante :

{% assign inputData = '{"category":"active","maximumResults":5}' %}

{% serverlogic output: result, name: 'customer-summary', operation: 'getSummary', input: inputData %}

L’opération logique du serveur peut analyser les informations d’entrée et d’accès à l’appel Liquid :

function getSummary() {
    var input = JSON.parse(Server.Context.Input || "{}");

    return JSON.stringify({
        category: input.category,
        maximumResults: input.maximumResults,
        activityId: Server.Context.ActivityId,
        functionName: Server.Context.FunctionName,
        serverLogicName: Server.Context.ServerLogicName
    });
}

Étape suivante

Comment interagir avec des tables Dataverse à l’aide de la logique serveur

Vue d’ensemble de la logique serveur
Écrire une logique de serveur