Objectes del servidor

La lògica del servidor proporciona objectes integrats a l'espai de noms del servidor. Aquests objectes simplifiquen el desenvolupament permetent registrar missatges, trucar a serveis externs, treballar amb el Dataverse o accedir als detalls de la sol·licitud.

Client http

Utilitzeu el client HTTP per integrar-vos amb serveis externs enviant sol·licituds HTTP.

Nota

Actualment, la lògica del servidor només application/jsonsuporta , text/html, i application/x-www-form-urlencoded els tipus de contingut al cos de la sol·licitud.

Exemples

OBTENIR HTTP

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

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

PUBLICACIÓ HTTP

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 POSAR

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);

PEGAT 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);

SUPRESSIÓ HTTP

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

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

Exemple: Resposta

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

Configuració del lloc

Utilitza aquest connector per llegir els valors de la configuració del lloc web actual.

Nota

No emmagatzemis secrets, com claus d'API o credencials, directament a la lògica del servidor. En comptes d'això, emmagatzema'ls de manera segura a Azure Key Vault, obten-los a través de variables d'entorn i referencia'ls utilitzant la configuració del lloc.

Exemple

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

VariableAmbiental

Utilitza aquest connector per llegir el valor d'una variable d'entorn.

Exemple

Server.EnvironmentVariable.get("SITEPATH");

Lloc web

Utilitza aquest connector per obtenir detalls del registre actual del lloc web a Dataverse.

Exemple

Server.Website.adx_primarydomain;

User

Proporciona detalls de l'usuari que ha iniciat la sessió. Retorna null si és anònim.

Exemple

Server.User.fullname;

Dataverse

Utilitza l'objecte Server.Connector.Dataverse per realitzar operacions CRUD sobre taules Dataverse i invocar APIs personalitzades.

Nota

  • Quan et refereixis a les taules de Dataverse al teu codi, utilitza EntitySetName. Per exemple, per accedir a la account taula, utilitza el EntitySetName accounts.

CreaRegistra

Crea un registre nou.

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\"}");

RecuperaRegistre

Recupera un únic registre per 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)

Exemple

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

RecuperaMúltiplesRegistres

Recupera una col·lecció de registres.

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

Exemple

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

Enregistrament d'actualització

Actualitza un registre existent per ID.

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

Exemple

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

SuprimeixRegistre

Suprimeix un registre per ID.

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

Exemple

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

InvokeCustomApi

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

Invoqueu una funció lligada:

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

Invoqueu una acció lligada:

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

Invoca una acció no vinculada:

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

Exemple: Resposta

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

CloudFlow

Utilitza l'objecte Server.Connector.CloudFlow per activar un flux al núvol de Power Automate des de la lògica del servidor. El flux ja s'ha d'afegir al teu lloc. És l'equivalent al costat del servidor d'invocar un flux utilitzant l'API de flux al núvol des d'una pàgina web. Utilitza la mateixa pipeline subjacent que l'endpoint /_api/cloudflow/v1.0/trigger/<guid> . La configuració, l'autorització i el comportament de la càrrega útil són els mateixos. Només el context de la crida varia.

Nota

TriggerAsync

Activa un flux de núvol i retorna l'envolupant de resposta.

Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
  • flowId: L'identificador de flux. El mateix GUID que apareix a l'URI de l'API del flux al núvol (/_api/cloudflow/v1.0/trigger/<guid>). Pots trobar aquest valor a la pàgina de fluxos al núvol del lloc, a Configurar>integracions.
  • payload: Cadena JSON opcional que conté paràmetres d'entrada del trigger, codificats pels noms dels paràmetres definits al trigger del flux. Passa null o una cadena buida si el flux no rep entrades. Els siteId, siteUrl, i userId s'afegeixen automàticament a la càrrega útil.

Exemple

async function post() {
    let flowId = "00000000-0000-0000-0000-000000000001";
    let payload = JSON.stringify({ Location: "Seattle" });

    let response = await Server.Connector.CloudFlow.TriggerAsync(flowId, payload);
    let result = JSON.parse(response);

    if (!result.IsSuccessStatusCode) {
        Server.Logger.Error("Cloud flow trigger failed: " + result.ReasonPhrase);
        return JSON.stringify({ success: false, error: result.ReasonPhrase });
    }

    return JSON.stringify({ success: true, flowResponse: result.Body });
}

Exemple: Resposta

{
    "StatusCode": 200,
    "Body": "JsonString",
    "IsSuccessStatusCode": true,
    "ReasonPhrase": "OK",
    "ServerError": false,
    "ServerErrorMessage": null
}

Si el flux del núvol no inclou una acció de resposta, retorna 202 Accepted i un buit Body. En la lògica del servidor, aquesta resposta es reporta com IsSuccessStatusCode: truea .

Logger

Utilitza el registrador per escriure missatges de diagnòstic que puguis veure a l'extensió DevTools.

Exemple:

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

Context

L'objecte Server.Context proporciona informació sobre la invocació lògica actual del servidor. Les propietats disponibles depenen de si la lògica del servidor s'ha invocat mitjançant una petició HTTP o des d'una plantilla Liquid.

Propietats

Nom Disponible per a Descripció
ActivityId HTTP i Liquid Identificador únic per a la invocació de lògica del servidor. Utilitza aquest valor per correlacionar registres i resoldre problemes d'una operació.
Body HTTP Cos de la sol·licitud HTTP en brut.
FunctionName HTTP i Liquid Nom de la funció JavaScript que s'està invocant. Per a una invocació líquida, aquest valor correspon al operation paràmetre de l'etiqueta serverlogic .
Headers HTTP Capçaleres de sol·licitud HTTP.
HttpMethod HTTP Mètode de sol·licitud HTTP, com GETara , POST, PUT, PATCH, o DELETE.
Input Liquid Cadena d'entrada subministrada a través del input paràmetre de l'etiqueta serverlogic Líquid. Quan l'entrada conté dades estructurades, analitza-les com a JSON abans d'utilitzar-les.
QueryParameters HTTP Paràmetres de la cadena de consulta de la sol·licitud HTTP.
ServerLogicName HTTP i Liquid Nom del registre lògic del servidor que s'està invocant.
Url HTTP URL completa de la sol·licitud HTTP.

Context de la sol·licitud HTTP d'accés

L'exemple següent llegeix el id paràmetre de consulta quan s'invoca la lògica del servidor mitjançant una petició HTTP:

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

També pots accedir a les metadades de la sol·licitud:

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
    });
}

Context d'invocació d'Access Liquid

Quan s'invoca la lògica del servidor des de Liquid, s'utilitza Server.Context.Input per llegir el valor proporcionat pel paràmetre de input l'etiqueta.

Per exemple, el següent Liquid passa entrada JSON:

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

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

L'operació lògica del servidor pot analitzar la informació d'entrada i accedir a la invocació 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
    });
}

Pas següent

Com interactuar amb les taules del Dataverse mitjançant la lògica del servidor

Informació general de la lògica del servidor
Lògica del servidor d'autor