Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Логика сервера предоставляет встроенные объекты в пространстве имен сервера. Эти объекты упрощают разработку, позволяя записывать сообщения, вызывать внешние службы, работать с Dataverse или получать сведения о запросе доступа.
HttpClient
Используйте HTTP-клиент для интеграции с внешними службами, отправляя HTTP-запросы.
Замечание
В настоящее время логика сервера поддерживает только application/jsontext/htmlapplication/x-www-form-urlencoded типы контента в тексте запроса.
Examples
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
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 DELETE
let url = "https://contoso.com/objects/6";
let header = { contentType: "application/json" };
let response = await Server.Connector.HttpClient.DeleteAsync(url, header);
Пример: ответ
{
"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
Позволяет считывать значения параметров сайта для текущего веб-сайта.
Замечание
Не сохраняйте секреты, такие как ключи API или учетные данные, непосредственно в логике сервера. Вместо этого сохраните их в Azure Key Vault, создайте их с помощью переменных среды и сослаться на них с помощью параметров сайта.
Example
Server.SiteSetting.Get("Search/Enabled");
EnvironmentVariable
Считывает значение переменной среды.
Example
Server.EnvironmentVariable.get("SITEPATH");
Веб-сайт
Содержит сведения о текущей записи веб-сайта в Dataverse.
Example
Server.Website.adx_primarydomain;
User
Предоставляет сведения о входе пользователя. Возвращает значение NULL, если анонимный.
Example
Server.User.fullname;
Dataverse
Server.Connector.Dataverse Используйте объект для выполнения операций CRUD в таблицах Dataverse и вызова пользовательских API.
Замечание
- При ссылке на таблицы Dataverse в коде используйте EntitySetName. Например, чтобы получить доступ к
accountтаблице, используйте EntitySetNameaccounts.
CreateRecord
Создайте новую запись.
Server.Connector.Dataverse.CreateRecord(string entitySetName, string payload)
Example
Server.Connector.Dataverse.CreateRecord("accounts", "{\"name\": \"Contoso Ltd.\", \"telephone1\": \"555-555-0100\", \"websiteurl\": \"https://contoso.com\"}");
RetrieveRecord (ВосстановитьRecord)
Извлекает одну запись по идентификатору.
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");
ПолучениеMultipleRecords
Извлекает коллекцию записей.
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 (ОбновитьЗапись)
Обновляет существующую запись по идентификатору.
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
Удаляет запись по идентификатору.
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)
Вызов связанной функции:
Server.Connector.Dataverse.InvokeCustomApi("get", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundFunction");
Вызов связанного действия:
Server.Connector.Dataverse.InvokeCustomApi("post", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundAction", "{ \"parameter1\": \"value1\" }");
Вызов несвязанного действия:
Server.Connector.Dataverse.InvokeCustomApi("post", "new_Action", "{ \"parameter1\": \"value1\" }");
Пример: ответ
{
"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
Используйте средство ведения журнала для записи диагностических сообщений, которые можно просмотреть в расширении DevTools.
Пример:
Server.Logger.Log("Information message");
Server.Logger.Warn("Warning message");
Server.Logger.Error("Error message");
Контекст
Объект Server.Context предоставляет сведения о вызове текущей логики сервера. Доступные свойства зависят от того, была ли вызвана логика сервера через HTTP-запрос или из шаблона Liquid.
Свойства
| Имя | Доступно для | Description |
|---|---|---|
ActivityId |
HTTP и Liquid | Уникальный идентификатор вызова логики сервера. Используйте это значение для сопоставления журналов и устранения неполадок с операцией. |
Body |
HTTP | Необработанный текст HTTP-запроса. |
FunctionName |
HTTP и Liquid | Имя вызываемой функции JavaScript. Для вызова Liquid это значение соответствует operation параметру тега serverlogic . |
Headers |
HTTP | Заголовки HTTP-запроса. |
HttpMethod |
HTTP | Метод HTTP-запроса, например GET, POST, PUTPATCHили DELETE. |
Input |
Жидкость | Входная строка, предоставляемая с помощью input параметра тега serverlogic Liquid. Когда входные данные содержат структурированные данные, анализируйте его как JSON перед его использованием. |
QueryParameters |
HTTP | Параметры строки запроса из HTTP-запроса. |
ServerLogicName |
HTTP и Liquid | Имя вызываемой записи логики сервера. |
Url |
HTTP | Полный URL-адрес HTTP-запроса. |
Доступ к контексту HTTP-запроса
В следующем примере считывается id параметр запроса при вызове логики сервера с помощью HTTP-запроса:
var id = Server.Context.QueryParameters["id"];
Вы также можете получить доступ к метаданным запроса:
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
});
}
Доступ к контексту вызова Liquid
При вызове логики сервера из Liquid используйте Server.Context.Input для чтения значения, предоставленного с помощью параметра тега input .
Например, следующая жидкость передает входные данные JSON:
{% assign inputData = '{"category":"active","maximumResults":5}' %}
{% serverlogic output: result, name: 'customer-summary', operation: 'getSummary', input: inputData %}
Операция логики сервера может анализировать входные и доступные сведения о вызове Liquid:
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
});
}
Следующий шаг
Взаимодействие с таблицами Dataverse с помощью логики сервера