Objetos de servidor

La lógica del servidor proporciona objetos integrados en el espacio de nombres del servidor. Estos objetos simplifican el desarrollo al permitirle registrar mensajes, llamar a servicios externos, trabajar con Dataverse o acceder a los detalles de la solicitud.

Cliente HTTP

Use el cliente HTTP para integrarse con servicios externos mediante el envío de solicitudes HTTP.

Nota:

Actualmente, la lógica del servidor solo application/jsonadmite tipos de contenido , text/htmly application/x-www-form-urlencoded en el cuerpo de la solicitud.

Ejemplos

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

REVISIÓN 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);

Ejemplo: respuesta

{
    "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

Permite leer los valores de configuración del sitio para el sitio web actual.

Nota:

No almacene secretos, como claves de API o credenciales, directamente en la lógica del servidor. En su lugar, almacénelos de forma segura en Azure Key Vault, consíguelos a través de variables de entorno y haga referencia a ellos mediante la configuración del sitio.

Example

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

EnvironmentVariable

Lee el valor de una variable de entorno.

Example

Server.EnvironmentVariable.get("SITEPATH");

Sitio web

Proporciona detalles del registro del sitio web actual en Dataverse.

Example

Server.Website.adx_primarydomain;

Usuario

Proporciona detalles del usuario que ha iniciado sesión. Devuelve null si es anónimo.

Example

Server.User.fullname;

Dataverse

Use el Server.Connector.Dataverse objeto para realizar operaciones CRUD en tablas de Dataverse e invocar API personalizadas.

Nota:

  • Al hacer referencia a tablas de Dataverse en el código, use EntitySetName. Por ejemplo, para acceder a la account tabla, use EntitySetName accounts.

CreateRecord

Cree un nuevo registro.

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

Ejemplo

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

RecuperarRecord

Recupera un único registro por identificador.

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

Recupera una colección de registros.

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

UpdateRecord (Registro de actualización)

Actualiza un registro existente por identificador.

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

Elimina un registro por identificador.

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) 

Invoque una función enlazada:

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

Invoque una acción enlazada:

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

Invoque una acción sin enlazar:

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

Ejemplo: respuesta

{
    "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

Use el registrador para escribir mensajes de diagnóstico que puede ver en la extensión DevTools.

Ejemplo:

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

Context

El Server.Context objeto proporciona información sobre la invocación de lógica del servidor actual. Las propiedades disponibles dependen de si la lógica del servidor se invocó a través de una solicitud HTTP o de una plantilla liquid.

Propiedades

Nombre Disponible para Descripción
ActivityId HTTP y Liquid Identificador único de la invocación de lógica del servidor. Use este valor para correlacionar los registros y solucionar problemas de una operación.
Body HTTP Cuerpo de la solicitud HTTP sin formato.
FunctionName HTTP y Liquid Nombre de la función de JavaScript que se va a invocar. Para una invocación liquid, este valor corresponde al operation parámetro de la serverlogic etiqueta .
Headers HTTP Encabezados de solicitud HTTP.
HttpMethod HTTP Método de solicitud HTTP, como GET, POST, PUT, o PATCHDELETE.
Input Liquid Cadena de entrada proporcionada a través del input parámetro de la serverlogic etiqueta Liquid. Cuando la entrada contiene datos estructurados, anótelo como JSON antes de usarlo.
QueryParameters HTTP Parámetros de cadena de consulta de la solicitud HTTP.
ServerLogicName HTTP y Liquid Nombre del registro lógico de servidor que se invoca.
Url HTTP Dirección URL completa de la solicitud HTTP.

Contexto de solicitud HTTP de acceso

En el ejemplo siguiente se lee el id parámetro de consulta cuando se invoca la lógica del servidor a través de una solicitud HTTP:

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

También puede acceder a los metadatos de solicitud:

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

Contexto de invocación de Liquid de Access

Cuando se invoca la lógica del servidor desde Liquid, use Server.Context.Input para leer el valor proporcionado a través del parámetro de input la etiqueta.

Por ejemplo, el siguiente liquid pasa la entrada JSON:

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

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

La operación lógica del servidor puede analizar la entrada y acceder a la información sobre la invocación 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
    });
}

Paso siguiente

Interacción con tablas de Dataverse mediante la lógica del servidor

Introducción a la lógica del servidor
Lógica del servidor de autor