Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Создайте логику сервера в рабочем пространстве "Настройка" в студии разработки. Каждая запись логики сервера представляет отдельную логику на стороне сервера, которую можно вызвать из клиентского скрипта с помощью поддерживаемых HTTP-команд или из шаблона Liquid во время отрисовки страниц на стороне сервера.
Действия по созданию логики сервера
- Войдите в Power Pages.
- Выберите сайт и изменить.
- Перейдите в рабочую область "Настройка " и выберите логику сервера.
- Нажмите кнопку +Создать логику сервера.
- Введите имя логики сервера. API использует это имя в качестве идентификатора ресурса при создании API логики сервера.
- Выберите +Добавить роли , чтобы назначить соответствующую веб-роль.
- Выберите три точки (...) рядом с именем и нажмите кнопку "Изменить код".
- Выберите «Открыть Visual Studio Code», чтобы создать пользовательскую логику.
Вызов логики сервера из клиентского скрипта
Замечание
Каждый запрос к логике сервера должен содержать токен CSRF (подделки межсайтовых запросов). Как правило, метод shell.safeAjax упаковывает токен CSRF. Дополнительные сведения о создании запросов см. в статье о функции AJAX оболочки CSRF.
Пример: вызов HTTP GET
shell.safeAjax({
type: "GET",
url: "/_api/serverlogics/serverlogicname?id=1",
contentType: "application/json",
success: function (res) {
console.log(res);
}
});
Пример: вызов 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");
}
});
Пример: вызов 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");
}
});
Пример: вызов 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");
}
});
Пример: вызов HTTP DELETE
shell.safeAjax({
type: "DELETE",
url: "/_api/serverlogics/serverlogicname?id=1",
contentType: "application/json"
success: function (res) {
console.log("res");
}
});
Пример: ответ
{
"RequestId": "811b363e-36d2-4213-9f44-a73bf7550ce8",
"Success": true,
"Data": "Sample data",
"ExecutionTime": 9256.331,
"ServerLogicName": "serverlogicname",
"Error": null
}
Логика вызова сервера из Liquid
serverlogic Используйте тег Liquid для вызова логики сервера во время отрисовки страницы или веб-шаблона. Для этого вызова на стороне сервера не требуется клиентский HTTP-запрос или токен кросс-сайта forgery (CSRF).
Назначьте запись логики сервера веб-роли, доступ к которому может получить текущий пользователь веб-сайта.
Полный синтаксис, входные параметры и возвращенные атрибуты см. в объектеserverlogic Liquid.
Вызов логики сервера без ввода
Создайте функцию в записи логики сервера.
function getSummary() {
return JSON.stringify({
message: "Server logic invoked successfully",
count: 42
});
}
Вызов функции из страницы или веб-шаблона:
{% 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 %}
В этом примере:
-
customer-summary— имя записи логики сервера. -
getSummary— это функция JavaScript для вызова. -
result— переменная Liquid, содержащая результат операции. -
result.dataсодержит проанализированный JSON, возвращенныйgetSummary.
Передача входных данных в логику сервера
Используйте необязательный input параметр для передачи строки в операцию логики сервера. Используйте JSON, когда необходимо передать структурированные данные.
{% 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 %}
Чтение входных данных в функции логики сервера с помощью Server.Context.Input:
function getSummary() {
var input = JSON.parse(Server.Context.Input || "{}");
return JSON.stringify({
message: "Summary retrieved",
category: input.category,
maximumResults: input.maximumResults
});
}
Проверьте входные данные перед его использованием в операциях Dataverse или перед передачей его во внешнюю службу.
Замечание
Логика сервера, вызываемая из запуска Liquid во время отрисовки страницы. Длительные операции Dataverse или внешние HTTP-запросы увеличивают время отклика страницы.
Limitations
Следующие ограничения применяются при разработке логики сервера:
API для конкретного браузера не поддерживаются
Серверная логика выполняется в серверной среде и не работает с браузерными API или библиотеками.
Примеры включаютfetch,XMLHttpRequestи другие функции, связанные с DOM.Ограниченные ключевые слова и шаблоны
Чтобы поддерживать безопасную среду выполнения, система проверяет скрипты логики сервера и отклоняет те, которые содержат определенные небезопасные или ограниченные ключевые слова. Эти ключевые слова включают те, которые обеспечивают динамическое выполнение кода, управление процессами или манипуляцию прототипом.Следующие шаблоны не допускаются.
__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
Следующий шаг
Связанные сведения
Общие сведения о логике сервера
Взаимодействие с таблицами Dataverse с помощью логики сервера