Erstellungsserverlogik

Erstellen Sie Serverlogik im Arbeitsbereich "Einrichten" im Entwurfsstudio. Jeder Serverlogikeintrag stellt unterschiedliche serverseitige Logik dar, die Sie über ein Clientskript aufrufen können, indem Sie unterstützte HTTP-Verben oder eine Liquid-Vorlage während des serverseitigen Seitenrenderings verwenden.

Schritte zum Erstellen der Serverlogik

  1. Melden Sie sich bei Power Pages an.
  2. Wählen Sie "Website + Bearbeiten" aus.
  3. Wechseln Sie zum Arbeitsbereich einrichten , und wählen Sie dann die Serverlogik aus.
  4. Wählen Sie +Neue Serverlogik aus.
  5. Geben Sie einen Namen für die Serverlogik ein. Die API verwendet diesen Namen als Ressourcenbezeichner beim Erstellen der Serverlogik-API.
  6. Wählen Sie +Rollen hinzufügen , um die entsprechende Webrolle zuzuweisen.
  7. Wählen Sie die drei Punkte (...) neben dem Namen aus, und wählen Sie "Code bearbeiten" aus.
  8. Wählen Sie "Visual Studio Code öffnen " aus, um die benutzerdefinierte Logik zu erstellen.

Aufrufen der Serverlogik über das Clientskript

Hinweis

Jede Anfrage an die Serverlogik sollte ein Cross-Site Request Forgery (CSRF)-Token enthalten. Im Allgemeinen umschließt die shell.safeAjax-Methode das CSRF-Token. Weitere Informationen zum Erstellen von Anforderungen finden Sie unter CSRF wrapper AJAX function.

Beispiel: Aufrufen von HTTP GET

shell.safeAjax({
  type: "GET",
  url: "/_api/serverlogics/serverlogicname?id=1",
  contentType: "application/json",
  success: function (res) {
    console.log(res);
  }
});

Beispiel: Aufrufen von HTTP POST

shell.safeAjax({
  type: "POST",
  url: "/_api/serverlogics/serverlogicname",
  contentType: "application/json",
  data: JSON.stringify({
    "name": "Sample name"
  }),
  success: function (res) {
    console.log("res");
  }
});

Beispiel: Aufrufen von HTTP PUT

shell.safeAjax({
  type: "PUT",
  url: "/_api/serverlogics/serverlogicname",
  contentType: "application/json",
  data: JSON.stringify({
    "name": "Sample name"
  }),
  success: function (res) {
    console.log("res");
  }
});

Beispiel: Aufrufen von HTTP PATCH

shell.safeAjax({
  type: "PATCH",
  url: "/_api/serverlogics/serverlogicname",
  contentType: "application/json",
  data: JSON.stringify({
    "name": "Sample name"
  }),
  success: function (res) {
    console.log("res");
  }
});

Beispiel: Aufrufen von HTTP DELETE

shell.safeAjax({
  type: "DELETE",
  url: "/_api/serverlogics/serverlogicname?id=1",
  contentType: "application/json"
  success: function (res) {
    console.log("res");
  }
});

Beispiel: Antwort

{
  "RequestId": "811b363e-36d2-4213-9f44-a73bf7550ce8",
  "Success": true,
  "Data": "Sample data",
  "ExecutionTime": 9256.331,
  "ServerLogicName": "serverlogicname",
  "Error": null
}

Aufrufen der Serverlogik von Liquid

Verwenden Sie das serverlogic Liquid-Tag, um die Serverlogik aufzurufen, während eine Seite oder Webvorlage gerendert wird. Für diesen serverseitigen Aufruf ist kein clientseitiges HTTP-Anforderungs- oder CSRF-Token (Cross-Site Request Forgery) erforderlich.

Weisen Sie dem Serverlogikdatensatz eine Webrolle zu, auf die der aktuelle Websitebenutzer zugreifen kann.

Die vollständige Syntax, Eingabeparameter und zurückgegebenen Attribute finden Sie im serverlogic Liquid-Objekt.

Aufrufen der Serverlogik ohne Eingabe

Erstellen Sie eine Funktion im Serverlogikdatensatz.

function getSummary() {
    return JSON.stringify({
        message: "Server logic invoked successfully",
        count: 42
    });
}

Rufen Sie die Funktion von einer Seite oder Webvorlage auf:

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

{% if result.success %}
  <p>{{ result.data.message | escape }}</p>
  <p>Count: {{ result.data.count }}</p>
{% else %}
  <p>The customer summary couldn't be retrieved.</p>
{% endif %}

In diesem Beispiel:

  • customer-summary ist der Name des Serverlogikdatensatzes.
  • getSummary ist die JavaScript-Funktion, die aufgerufen werden soll.
  • result ist die Liquid-Variable, die das Vorgangsergebnis enthält.
  • result.data enthält den analysierten JSON-Code, der von getSummary.

Übergeben von Eingaben an Die Serverlogik

Verwenden Sie den optionalen input Parameter, um eine Zeichenfolge an den Serverlogikvorgang zu übergeben. Verwenden Sie JSON, wenn Sie strukturierte Daten übergeben müssen.

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

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

{% if result.success %}
  <p>Category: {{ result.data.category | escape }}</p>
  <p>Maximum results: {{ result.data.maximumResults }}</p>
{% endif %}

Lesen Sie die Eingabe in der Serverlogikfunktion durch Server.Context.Input:

function getSummary() {
    var input = JSON.parse(Server.Context.Input || "{}");

    return JSON.stringify({
        message: "Summary retrieved",
        category: input.category,
        maximumResults: input.maximumResults
    });
}

Überprüfen Sie die Eingabe, bevor Sie sie in Dataverse-Vorgängen verwenden oder an einen externen Dienst übergeben.

Hinweis

Serverlogik, die von Liquid aufgerufen wird, während die Seite gerendert wird. Lange ausgeführte Dataverse-Vorgänge oder externe HTTP-Anforderungen erhöhen die Seitenantwortzeit.

Limitations

Die folgenden Einschränkungen gelten beim Erstellen der Serverlogik:

  • Browserspezifische APIs werden nicht unterstützt.
    Die Serverlogik wird in einer Serverumgebung ausgeführt und unterstützt keine browserbasierten APIs oder Bibliotheken.
    Zu den Beispielen gehören fetch, XMLHttpRequestund andere DOM-bezogene Features.

  • Eingeschränkte Schlüsselwörter und Muster
    Um eine sichere Ausführungsumgebung aufrechtzuerhalten, überprüft das System Serverlogikskripts und lehnt diejenigen ab, die bestimmte unsichere oder eingeschränkte Schlüsselwörter enthalten. Zu diesen Schlüsselwörtern gehören solche, die dynamische Codeausführung, Prozesssteuerung oder Prototypmanipulation ermöglichen.

    Die folgenden Muster sind nicht zulässig:

    __dirname
    __filename
    import(, import from
    eval(, Function(
    setTimeout(, setInterval(, setImmediate(
    process.exit, process.kill, child_process
    fs., require(
    constructor.constructor, this.constructor, arguments.callee
    with(, delete
    Object.getPrototypeOf, Object.setPrototypeOf
    Proxy(, Reflect.
    Symbol.for
    __proto__, prototype
    debugger
    

Nächster Schritt

Serverobjekte

Übersicht über Die Serverlogik
Interaktion mit Dataverse-Tabellen mithilfe der Serverlogik