Serverobjekte

Serverlogik stellt integrierte Objekte unter dem Servernamespace bereit. Diese Objekte vereinfachen die Entwicklung, indem Sie Nachrichten protokollieren, externe Dienste aufrufen, mit Dataverse arbeiten oder auf Anforderungsdetails zugreifen können.

HttpClient

Verwenden Sie den HTTP-Client, um in externe Dienste zu integrieren, indem Sie HTTP-Anforderungen senden.

Note

Derzeit unterstützt serverlogik nur application/json, text/htmlund application/x-www-form-urlencoded Inhaltstypen im Anforderungstext.

Beispiele

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

HTTP LÖSCHEN

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

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

Beispiel: Antwort

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

Ermöglicht das Lesen von Websiteeinstellungswerten für die aktuelle Website.

Note

Speichern Sie geheime Schlüssel, z. B. API-Schlüssel oder Anmeldeinformationen, nicht direkt in der Serverlogik. Speichern Sie sie stattdessen sicher in Azure Key Vault, beziehen Sie sie über Umgebungsvariablen, und verweisen Sie mithilfe von Websiteeinstellungen darauf.

Example

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

EnvironmentVariable

Liest den Wert einer Umgebungsvariablen.

Example

Server.EnvironmentVariable.get("SITEPATH");

Website

Enthält Details zum aktuellen Websitedatensatz in Dataverse.

Example

Server.Website.adx_primarydomain;

Benutzer

Enthält Details des angemeldeten Benutzers. Gibt NULL zurück, wenn anonym.

Example

Server.User.fullname;

Dataverse

Verwenden Sie das Server.Connector.Dataverse Objekt, um CRUD-Vorgänge in Dataverse-Tabellen auszuführen und benutzerdefinierte APIs aufzurufen.

Note

  • Wenn Sie in Ihrem Code auf Dataverse-Tabellen verweisen, verwenden Sie "EntitySetName". Verwenden Sie beispielsweise für den Zugriff auf die account Tabelle den EntitySetName accounts.

CreateRecord

Neuen Datensatz erstellen.

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

Beispiel

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

RetrieveRecord (Abruf)

Ruft einen einzelnen Datensatz nach ID ab.

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

Ruft eine Sammlung von Datensätzen ab.

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 (Aktualisieren)

Aktualisiert einen vorhandenen Datensatz nach 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

Löscht einen Datensatz nach 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) 

Aufrufen einer gebundenen Funktion:

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

Aufrufen einer gebundenen Aktion:

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

Aufrufen einer ungebundenen Aktion:

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

Beispiel: Antwort

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

Verwenden Sie den Logger, um Diagnosemeldungen zu schreiben, die Sie in der DevTools-Erweiterung anzeigen können.

Beispiel:

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

Kontext

Das Server.Context Objekt stellt Informationen über den aktuellen Serverlogikaufruf bereit. Die verfügbaren Eigenschaften hängen davon ab, ob die Serverlogik über eine HTTP-Anforderung oder von einer Liquid-Vorlage aufgerufen wurde.

Eigenschaften

Name Verfügbar für Description
ActivityId HTTP und Flüssigkeit Eindeutiger Bezeichner für den Serverlogikaufruf. Verwenden Sie diesen Wert, um Protokolle zu korrelieren und einen Vorgang zu beheben.
Body HTTP Unformatierter HTTP-Anforderungstext.
FunctionName HTTP und Flüssigkeit Name der aufgerufenen JavaScript-Funktion. Bei einem Liquid-Aufruf entspricht dieser Wert dem operation Parameter des serverlogic Tags.
Headers HTTP HTTP-Anforderungsheader.
HttpMethod HTTP HTTP-Anforderungsmethode, zGET. B. , , POSTPUT, , PATCHoder DELETE.
Input Liquid Eingabezeichenfolge, die über den input Parameter des serverlogic Liquid-Tags bereitgestellt wird. Wenn die Eingabe strukturierte Daten enthält, analysieren Sie sie vor der Verwendung als JSON.
QueryParameters HTTP Abfragezeichenfolgenparameter aus der HTTP-Anforderung.
ServerLogicName HTTP und Flüssigkeit Name des Serverlogikdatensatzes, der aufgerufen wird.
Url HTTP Vollständige URL der HTTP-Anforderung.

Zugriffs-HTTP-Anforderungskontext

Im folgenden Beispiel wird der Abfrageparameter gelesen, wenn die id Serverlogik über eine HTTP-Anforderung aufgerufen wird:

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

Sie können auch auf Anforderungsmetadaten zugreifen:

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

Zugriff auf liquiden Aufrufkontext

Wenn die Serverlogik aus Liquid aufgerufen wird, verwenden Sie diese Methode Server.Context.Input , um den wert zu lesen, der über den Parameter des input Tags bereitgestellt wird.

Beispielsweise übergibt die folgende Liquid JSON-Eingabe:

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

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

Der Serverlogikvorgang kann die Eingabe- und Zugriffsinformationen zum Liquid-Aufruf analysieren:

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

Nächster Schritt

Interaktion mit Dataverse-Tabellen mithilfe der Serverlogik

Übersicht über Die Serverlogik
Autorenserverlogik