Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
Use este conector para ler os valores das definições do 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
Use este conector para ler o valor de uma variável de ambiente.
Example
Server.EnvironmentVariable.get("SITEPATH");
Sítio Web
Use este conector para obter detalhes do registo 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 à
accounttabela, use o EntitySetNameaccounts.
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"
}
}
CloudFlow
Use o Server.Connector.CloudFlow objeto para desencadear um fluxo cloud do Power Automate a partir da lógica do servidor. O fluxo já deve ter sido adicionado ao seu site. É o equivalente do lado do servidor a invocar um fluxo usando a API cloud de fluxo a partir de uma página web. Utiliza o mesmo pipeline subjacente que o /_api/cloudflow/v1.0/trigger/<guid> endpoint. Configuração, autorização e comportamento da carga útil são os mesmos. Apenas o contexto da chamada difere.
Observação
-
Server.Connector.CloudFlow.TriggerAsyncé assíncrono. Useawaite marque a funçãoasyncde chamada . - Antes de poderes ativar um fluxo a partir da lógica do servidor, cria o fluxo e adiciona-o ao teu site com uma função web autorizada. O utilizador iniciado deve ocupar uma dessas funções.
- Se moveres um site para outro ambiente, regista o fluxo de cloud no ambiente de destino antes de o invocares.
TriggerAsync
Desencadeia um fluxo de nuvem e devolve 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 do fluxo na nuvem (/_api/cloudflow/v1.0/trigger/<guid>). Pode encontrar este valor na página Cloud Flows do site, em Configurar>Integrações. -
payload: String JSON opcional que contém parâmetros de entrada do trigger, indexados pelos nomes dos parâmetros definidos no trigger do fluxo. Passenullou uma corda vazia se o fluxo não aceitar entradas. OssiteId,siteUrl, euserIdsão adicionados automaticamente à carga útil.
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 da nuvem não incluir uma ação de resposta, ele retorna 202 Accepted e um vazio Body. Na lógica do servidor, esta resposta é reportada como IsSuccessStatusCode: true.
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
Informações relacionadas
Visão geral da lógica do servidor
Lógica do servidor de autor