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
Verwenden Sie diesen Connector, um Websiteeinstellungswerte für die aktuelle Website zu lesen.
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
Verwenden Sie diesen Connector, um den Wert einer Umgebungsvariablen zu lesen.
Example
Server.EnvironmentVariable.get("SITEPATH");
Website
Verwenden Sie diesen Connector, um Details zum aktuellen Websitedatensatz in Dataverse abzurufen.
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"
}
}
CloudFlow
Verwenden Sie das Server.Connector.CloudFlow Objekt, um einen Power Automate Cloudfluss aus der Serverlogik auszulösen. Der Fluss muss ihrer Website bereits hinzugefügt werden. Dies ist das serverseitige Äquivalent zum Aufrufen eines Flusses mithilfe der Cloudfluss-API von einer Webseite. Es verwendet dieselbe zugrunde liegende Pipeline wie der /_api/cloudflow/v1.0/trigger/<guid> Endpunkt. Setup-, Autorisierungs- und Nutzlastverhalten sind identisch. Nur der aufrufende Kontext unterscheidet sich.
Note
-
Server.Connector.CloudFlow.TriggerAsyncist asynchron. Verwenden und markieren Sieawaitdie aufrufende Funktionasync. - Bevor Sie einen Fluss aus der Serverlogik auslösen können, erstellen Sie den Fluss , und fügen Sie ihn ihrer Website mit einer autorisierten Webrolle hinzu. Der angemeldete Benutzer muss eine dieser Rollen enthalten.
- Wenn Sie eine Website in eine andere Umgebung verschieben, registrieren Sie den Cloudfluss in der Zielumgebung , bevor Sie sie aufrufen.
TriggerAsync
Löst einen Cloudfluss aus und gibt den Antwortumschlag zurück.
Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
-
flowId: Der Flussbezeichner. Die gleiche GUID, die im Cloudfluss-API-URI (/_api/cloudflow/v1.0/trigger/<guid>) angezeigt wird. Sie finden diesen Wert auf der Seite "Cloud flows" der Website unter "Integration einrichten>". -
payload: Optionale JSON-Zeichenfolge, die Triggereingabeparameter enthält, durch die Parameternamen, die für den Trigger des Flusses definiert sind. ÜbergebennullOder eine leere Zeichenfolge, wenn der Fluss keine Eingaben akzeptiert. DiesiteId,siteUrlunduserIdwerden automatisch zur Nutzlast hinzugefügt.
Beispiel
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 });
}
Beispiel: Antwort
{
"StatusCode": 200,
"Body": "JsonString",
"IsSuccessStatusCode": true,
"ReasonPhrase": "OK",
"ServerError": false,
"ServerErrorMessage": null
}
Wenn der Cloudfluss keine Antwortaktion enthält, wird sie zurückgegeben 202 Accepted und leer Body. In der Serverlogik wird diese Antwort als IsSuccessStatusCode: truegemeldet.
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