Obiekty serwera

Logika serwera udostępnia wbudowane obiekty w przestrzeni nazw serwera. Te obiekty upraszczają programowanie, umożliwiając rejestrowanie komunikatów, wywoływanie usług zewnętrznych, pracę z usługą Dataverse lub szczegóły żądania dostępu.

HttpClient

Użyj klienta HTTP do integracji z usługami zewnętrznymi, wysyłając żądania HTTP.

Note

Obecnie logika serwera obsługuje tylko application/jsontypy zawartości , text/htmli w application/x-www-form-urlencoded treści żądania.

Examples

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

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

USUWANIE HTTP

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

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

Przykład: Odpowiedź

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

Użyj tego łącznika, aby odczytać wartości ustawień witryny dla bieżącej witryny internetowej.

Note

Nie przechowuj wpisów tajnych, takich jak klucze interfejsu API lub poświadczenia, bezpośrednio w logice serwera. Zamiast tego przechowuj je bezpiecznie w Azure Key Vault, źródło ich za pomocą zmiennych środowiskowych i odwoływania się do nich przy użyciu ustawień witryny.

Example

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

EnvironmentVariable

Użyj tego łącznika, aby odczytać wartość zmiennej środowiskowej.

Example

Server.EnvironmentVariable.get("SITEPATH");

Witryna internetowa

Użyj tego łącznika, aby uzyskać szczegółowe informacje o bieżącym rekordzie witryny internetowej w usłudze Dataverse.

Example

Server.Website.adx_primarydomain;

User

Zawiera szczegółowe informacje o zalogowanym użytkowniku. Zwraca wartość null, jeśli jest anonimowa.

Example

Server.User.fullname;

Dataverse

Obiekt umożliwia Server.Connector.Dataverse wykonywanie operacji CRUD w tabelach usługi Dataverse i wywoływanie niestandardowych interfejsów API.

Note

  • W przypadku odwoływania się do tabel Usługi Dataverse w kodzie użyj nazwy EntitySetName. Aby na przykład uzyskać dostęp do account tabeli, użyj klasy EntitySetName accounts.

CreateRecord (UtwórzRekord)

Utwórz nowy rekord.

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

Pobieranie rekordu

Pobiera pojedynczy rekord według identyfikatora.

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

Pobiera kolekcję rekordów.

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

Rekord aktualizacji

Aktualizuje istniejący rekord według identyfikatora.

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 (UsuńRekord)

Usuwa rekord według identyfikatora.

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) 

Wywoływanie funkcji powiązanej:

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

Wywołaj akcję powiązaną:

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

Wywołaj niezwiązaną akcję:

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

Przykład: Odpowiedź

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

Server.Connector.CloudFlow Użyj obiektu , aby wyzwolić przepływ chmury Power Automate z logiki serwera. Przepływ należy już dodać do witryny. Jest to odpowiednik wywoływania przepływu po stronie serwera przy użyciu interfejsu API przepływu w chmurze ze strony internetowej. Używa on tego samego bazowego potoku /_api/cloudflow/v1.0/trigger/<guid> co punkt końcowy. Zachowanie instalacji, autoryzacji i ładunku jest takie samo. Tylko kontekst wywołujący różni się.

Note

TriggerAsync

Wyzwala przepływ chmury i zwraca kopertę odpowiedzi.

Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
  • flowId: identyfikator przepływu. Ten sam identyfikator GUID, który jest wyświetlany w identyfikatorze URI interfejsu API przepływu w chmurze (/_api/cloudflow/v1.0/trigger/<guid>). Tę wartość można znaleźć na stronie Przepływy chmury witryny w obszarze Konfigurowanie>integracji.
  • payload: Opcjonalny ciąg JSON zawierający parametry wejściowe wyzwalacza, kluczem nazw parametrów zdefiniowanych w wyzwalaczu przepływu. Przekaż null lub pusty ciąg, jeśli przepływ nie przyjmuje żadnych danych wejściowych. Element siteId, siteUrli userId są automatycznie dodawane do ładunku.

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

Przykład: Odpowiedź

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

Jeśli przepływ chmury nie zawiera akcji odpowiedzi, zwraca 202 Accepted wartość i jest pusta Body. W logice serwera ta odpowiedź jest zgłaszana jako IsSuccessStatusCode: true.

Logger

Użyj rejestratora, aby napisać komunikaty diagnostyczne, które można wyświetlić w rozszerzeniu DevTools.

Przykład:

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

Context

Obiekt Server.Context zawiera informacje o wywołaniu logiki bieżącego serwera. Dostępne właściwości zależą od tego, czy logika serwera została wywołana za pośrednictwem żądania HTTP, czy szablonu Liquid.

Properties

Nazwa Dostępne dla Description
ActivityId HTTP i Liquid Unikatowy identyfikator wywołania logiki serwera. Ta wartość służy do korelowania dzienników i rozwiązywania problemów z operacją.
Body HTTP Nieprzetworzona treść żądania HTTP.
FunctionName HTTP i Liquid Nazwa wywoływanej funkcji Języka JavaScript. W przypadku wywołania Liquid ta wartość odpowiada operation parametrowi tagu serverlogic .
Headers HTTP Nagłówki żądań HTTP.
HttpMethod HTTP Metoda żądania HTTP, taka jak GET, , POSTPUT, PATCHlub DELETE.
Input Ciecz Ciąg wejściowy dostarczony za pomocą input parametru tagu serverlogic Liquid. Gdy dane wejściowe zawierają dane ustrukturyzowane, przeanalizuj je jako dane JSON przed jego użyciem.
QueryParameters HTTP Parametry ciągu zapytania z żądania HTTP.
ServerLogicName HTTP i Liquid Nazwa wywoływanego rekordu logiki serwera.
Url HTTP Pełny adres URL żądania HTTP.

Uzyskiwanie dostępu do kontekstu żądania HTTP

Poniższy przykład odczytuje id parametr zapytania, gdy logika serwera jest wywoływana za pośrednictwem żądania HTTP:

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

Możesz również uzyskać dostęp do metadanych żądania:

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

Uzyskiwanie dostępu do kontekstu wywołania Liquid

Gdy logika serwera jest wywoływana z liquid, użyj polecenia Server.Context.Input , aby odczytać wartość podaną za pomocą parametru tagu input .

Na przykład następujący kod Liquid przekazuje dane wejściowe JSON:

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

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

Operacja logiki serwera może analizować dane wejściowe i uzyskać dostęp do informacji o wywołaniu 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
    });
}

Następny krok

Jak wchodzić w interakcje z tabelami Usługi Dataverse przy użyciu logiki serwera

Omówienie logiki serwera
Tworzenie logiki serwera