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 text/html de application/x-www-form-urlencodedconteú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

Use esse conector para ler os valores de configuração do 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

Use esse conector para ler o valor de uma variável de ambiente.

Example

Server.EnvironmentVariable.get("SITEPATH");

Site

Use esse conector para obter 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"
    }
}

CloudFlow

Use o Server.Connector.CloudFlow objeto para disparar um fluxo de nuvem Power Automate da lógica do servidor. O fluxo já deve ser adicionado ao seu site. É o equivalente do lado do servidor de invocar um fluxo usando a API de fluxo de nuvem de uma página da Web. Ele usa o mesmo pipeline subjacente que o /_api/cloudflow/v1.0/trigger/<guid> ponto de extremidade. O comportamento de instalação, autorização e conteúdo é o mesmo. Somente o contexto de chamada é diferente.

Note

TriggerAsync

Dispara um fluxo de nuvem e retorna o envelope de resposta.

Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
  • flowId: o identificador de fluxo. O mesmo GUID que aparece no URI da API de fluxo de nuvem (/_api/cloudflow/v1.0/trigger/<guid>). Você pode encontrar esse valor na página fluxos de nuvem do site em Configurar>Integrações.
  • payload: cadeia de caracteres JSON opcional que contém parâmetros de entrada de gatilho, chaveado pelos nomes de parâmetro definidos no gatilho do fluxo. Passe null ou uma cadeia de caracteres vazia se o fluxo não tiver entradas. O siteId, siteUrle userId são adicionados ao conteúdo automaticamente.

Example

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

Exemplo: Resposta

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

Se o fluxo de nuvem não incluir uma ação de resposta, ele retornará 202 Accepted e um vazio Body. Na lógica do servidor, essa resposta é relatada como IsSuccessStatusCode: true.

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