Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
accountTabelle den EntitySetNameaccounts.
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