Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Crea la logica del server nell'area di lavoro Configura in studio di progettazione. Ogni record di logica del server rappresenta una logica lato server distinta che è possibile richiamare da uno script client usando verbi HTTP supportati o da un modello Liquid durante il rendering della pagina sul lato server.
Passaggi per creare la logica del server
- Accedere a Power Pages.
- Selezionare sito e modifica.
- Passare all'area di lavoro Configura e quindi selezionare Logica server.
- Selezionare +Nuova logica del server.
- Immettere un nome per la logica del server. L'API usa questo nome come identificatore di risorsa quando si costruisce l'API per la logica del server.
- Selezionare +Aggiungi ruoli per assegnare il ruolo Web appropriato.
- Selezionare i tre puntini (...) accanto al nome e selezionare Modifica codice.
- Selezionare Apri Visual Studio Code per creare la logica personalizzata.
Chiamare logica su server dallo script cliente
Annotazioni
Ogni richiesta alla logica del server deve includere un token CSRF (Cross-Site Request Forgery). In generale, il metodo shell.safeAjax esegue il wrapping del token CSRF. Per altre informazioni su come costruire le richieste, vedere Funzione AJAX wrapper CSRF.
Esempio: invocazione del metodo HTTP GET
shell.safeAjax({
type: "GET",
url: "/_api/serverlogics/serverlogicname?id=1",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Esempio: la chiamata a 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");
}
});
Esempio: utilizzo di 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");
}
});
Esempio: chiamare 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");
}
});
Esempio: chiamata HTTP DELETE
shell.safeAjax({
type: "DELETE",
url: "/_api/serverlogics/serverlogicname?id=1",
contentType: "application/json"
success: function (res) {
console.log("res");
}
});
Esempio: risposta
{
"RequestId": "811b363e-36d2-4213-9f44-a73bf7550ce8",
"Success": true,
"Data": "Sample data",
"ExecutionTime": 9256.331,
"ServerLogicName": "serverlogicname",
"Error": null
}
Chiamare la logica del server da Liquid
Usare il tag Liquid per richiamare la logica del server mentre viene eseguito il serverlogic rendering di una pagina o di un modello Web. Questa chiamata lato server non richiede una richiesta HTTP sul lato client o un token CSRF (Cross-Site Request Forgery).
Assegnare il record della logica del server a un ruolo Web a cui l'utente del sito Web corrente può accedere.
Per la sintassi completa, i parametri di input e gli attributi restituiti, vedere l'oggettoserverlogic Liquid.
Richiamare la logica del server senza input
Creare una funzione nel record della logica del server.
function getSummary() {
return JSON.stringify({
message: "Server logic invoked successfully",
count: 42
});
}
Richiamare la funzione da una pagina o da un modello Web:
{% 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 questo esempio:
-
customer-summaryè il nome del record della logica del server. -
getSummaryè la funzione JavaScript da richiamare. -
resultè la variabile Liquid contenente il risultato dell'operazione. -
result.datacontiene il codice JSON analizzato restituito dagetSummary.
Passare l'input alla logica del server
Usare il parametro facoltativo input per passare una stringa all'operazione di logica del server. Usare JSON quando è necessario passare dati strutturati.
{% 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 %}
Leggere l'input nella funzione logica del server tramite Server.Context.Input:
function getSummary() {
var input = JSON.parse(Server.Context.Input || "{}");
return JSON.stringify({
message: "Summary retrieved",
category: input.category,
maximumResults: input.maximumResults
});
}
Convalidare l'input prima di usarlo nelle operazioni di Dataverse o passarlo a un servizio esterno.
Annotazioni
La logica del server richiamata da Liquid viene eseguita mentre viene eseguito il rendering della pagina. Le operazioni dataverse a esecuzione prolungata o le richieste HTTP esterne aumentano il tempo di risposta della pagina.
Limitations
Quando si crea la logica del server, si applicano le limitazioni seguenti:
Le API specifiche del browser non sono supportate
La logica del server viene eseguita in un ambiente server e non supporta API o librerie basate su browser.
Gli esempi includonofetch,XMLHttpRequeste altre funzionalità correlate a DOM.Parole chiave e modelli con restrizioni
Per mantenere un ambiente di esecuzione sicuro, il sistema convalida gli script della logica del server e rifiuta quelli che contengono determinate parole chiave non sicure o con restrizioni. Queste parole chiave includono quelle che abilitano l'esecuzione dinamica del codice, il controllo del processo o la manipolazione del prototipo.I modelli seguenti non sono consentiti:
__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
Passo successivo
Informazioni pertinenti
Panoramica della logica del server
Come interagire con le tabelle di Dataverse usando la logica del server