Objetos do servidor

A lógica do servidor fornece objetos internos sob o namespace do servidor. Esses objetos simplificam o desenvolvimento, permitindo que você registre mensagens, chame serviços externos, trabalhe com o Dataverse ou acesse detalhes da solicitação.

HttpClient

Use o cliente HTTP para integrar com serviços externos enviando solicitações HTTP.

Observação

Atualmente, a lógica do servidor suporta apenas application/json, text/html, e application/x-www-form-urlencoded tipos de conteúdo no corpo do pedido.

Exemplos

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 COLOCAR

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

HTTP PATCH

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

EXCLUIR HTTP

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

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

Exemplo: 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"
    }
}

Configuração do Site

Permite que você leia os valores de configuração do site para o site atual.

Observação

Não armazene segredos, como chaves de API ou credenciais, diretamente na lógica do servidor. Em vez disso, armazene-as de forma segura no Azure Key Vault, obtenha-as através de variáveis de ambiente e referencia-as usando as definições do site.

Example

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

EnvironmentVariable

Lê o valor de uma variável de ambiente.

Example

Server.EnvironmentVariable.get("SITEPATH");

Sítio Web

Fornece detalhes do registro atual do site no Dataverse.

Example

Server.Website.adx_primarydomain;

User

Fornece detalhes do usuário conectado. Retorna null se anônimo.

Example

Server.User.fullname;

Dataverse

Use o Server.Connector.Dataverse objeto para realizar operações CRUD em tabelas Dataverse e invocar APIs personalizadas.

Observação

  • Quando te referes às tabelas do Dataverse no teu código, usa o EntitySetName. Por exemplo, para aceder à account tabela, use o EntitySetName accounts.

CreateRecord

Crie um novo registo.

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

Example

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

RetrieveRecord

Recupera um único registro por 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");

RecuperarMultipleRecords

Recupera uma coleção 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

Atualiza um registro existente por 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

Exclui um registro por 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) 

Invoque uma função acoplada:

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

Invoque uma ação vinculada:

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

Invocar uma ação não vinculada:

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

Exemplo: 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"
    }
}

Logger

Use o logger para escrever mensagens de diagnóstico que possa visualizar na extensão DevTools.

Exemplo:

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

Context

O Server.Context objeto fornece informação sobre a invocação lógica atual do servidor. As propriedades disponíveis dependem de a lógica do servidor ter sido invocada através de um pedido HTTP ou de um template Liquid.

Properties

Nome Disponível para Description
ActivityId HTTP e Liquid Identificador único para a invocação lógica do servidor. Use este valor para correlacionar registos e resolver problemas numa operação.
Body HTTP Corpo bruto do pedido HTTP.
FunctionName HTTP e Liquid Nome da função JavaScript que está a ser invocada. Para uma invocação líquida, este valor corresponde ao operation parâmetro da serverlogic etiqueta.
Headers HTTP Cabeçalhos de solicitação HTTP.
HttpMethod HTTP Método de pedido HTTP, como GET, POST, PUT, PATCH, ou DELETE.
Input Líquido Cadeia de entrada fornecida através do input parâmetro da serverlogic etiqueta Líquido. Quando a entrada contiver dados estruturados, analise-os como JSON antes de os usar.
QueryParameters HTTP Parâmetros de sequência de consulta a partir do pedido HTTP.
ServerLogicName HTTP e Liquid Nome do registo lógico do servidor que está a ser invocado.
Url HTTP URL completo do pedido HTTP.

Contexto do pedido de acesso HTTP

O exemplo seguinte lê o id parâmetro de consulta quando a lógica do servidor é invocada através de um pedido HTTP:

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

Também pode aceder a metadados de pedidos:

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 invocação do Access Liquid

Quando a lógica do servidor é invocada a partir do Liquid, use Server.Context.Input para ler o valor fornecido pelo parâmetro da input etiqueta.

Por exemplo, o seguinte Liquid passa entrada JSON:

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

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

A operação lógica do servidor pode analisar a informação de entrada e aceder sobre a invocação líquida:

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

Próximo passo

Como interagir com tabelas Dataverse usando a lógica do servidor

Visão geral da lógica do servidor
Lógica do servidor de autor