Objetos de servidor

A lógica do servidor fornece objetos internos no 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.

Cliente HTTP

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

Note

Atualmente, a lógica do servidor dá suporte apenas application/jsona tipos de conteúdo e application/x-www-form-urlencoded de text/htmlconteúdo no corpo da solicitação.

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

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

SiteSetting

Permite ler valores de configuração de site para o site atual.

Note

Não armazene segredos, como chaves de API ou credenciais, diretamente na lógica do servidor. Em vez disso, armazene-os com segurança em Azure Key Vault, origem-los por meio de variáveis de ambiente e referenciá-los usando configurações de site.

Example

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

EnvironmentVariable

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

Example

Server.EnvironmentVariable.get("SITEPATH");

Site

Fornece detalhes do registro atual do site no Dataverse.

Example

Server.Website.adx_primarydomain;

Usuário

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

Example

Server.User.fullname;

Dataverse

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

Note

  • Quando você se referir a tabelas do Dataverse em seu código, use o EntitySetName. Por exemplo, para acessar a account tabela, use o EntitySetName accounts.

CriarRegistro

Crie um novo registro.

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

Recuperar Registro

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

RetrieveMultipleRecords

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

Registro de atualização

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

ExcluirRegistro

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) 

Invocar uma função associada:

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

Invocar uma ação associada:

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

Invoque uma ação desvinculada:

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 agente para gravar mensagens de diagnóstico que você pode exibir na extensão DevTools.

Exemplo:

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

Contexto

O Server.Context objeto fornece informações sobre a invocação da lógica do servidor atual. As propriedades disponíveis dependem se a lógica do servidor foi invocada por meio de uma solicitação HTTP ou de um modelo Liquid.

Properties

Name Disponível para Description
ActivityId HTTP e Líquido Identificador exclusivo para a invocação da lógica do servidor. Use esse valor para correlacionar logs e solucionar problemas de uma operação.
Body HTTP Corpo bruto da solicitação HTTP.
FunctionName HTTP e Líquido Nome da função JavaScript que está sendo invocada. Para uma invocação Liquid, esse valor corresponde ao operation parâmetro da serverlogic marca.
Headers HTTP Cabeçalhos de solicitação HTTP.
HttpMethod HTTP Método de solicitação HTTP, como GET, POST, PUT, PATCHou DELETE.
Input Liquid Cadeia de caracteres de entrada fornecida por meio do input parâmetro da serverlogic marca Liquid. Quando a entrada contiver dados estruturados, analise-os como JSON antes de usá-los.
QueryParameters HTTP Parâmetros de cadeia de caracteres de consulta da solicitação HTTP.
ServerLogicName HTTP e Líquido Nome do registro lógico do servidor que está sendo invocado.
Url HTTP URL completa da solicitação HTTP.

Acessar o contexto de solicitação HTTP

O exemplo a seguir lê o id parâmetro de consulta quando a lógica do servidor é invocada por meio de uma solicitação HTTP:

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

Você também pode acessar metadados de solicitação:

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 for invocada do Liquid, use Server.Context.Input para ler o valor fornecido por meio do parâmetro da input marca.

Por exemplo, o liquid a seguir passa a 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 as informações de entrada e acesso sobre a invocação 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
    });
}

Próxima etapa

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

Visão geral da lógica do servidor
Lógica do servidor Author