Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Logika serwera udostępnia wbudowane obiekty w przestrzeni nazw serwera. Te obiekty upraszczają programowanie, umożliwiając rejestrowanie komunikatów, wywoływanie usług zewnętrznych, pracę z usługą Dataverse lub szczegóły żądania dostępu.
HttpClient
Użyj klienta HTTP do integracji z usługami zewnętrznymi, wysyłając żądania HTTP.
Note
Obecnie logika serwera obsługuje tylko application/jsontypy zawartości , text/htmli w application/x-www-form-urlencoded treści żądania.
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);
POPRAWKA 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);
USUWANIE HTTP
let url = "https://contoso.com/objects/6";
let header = { contentType: "application/json" };
let response = await Server.Connector.HttpClient.DeleteAsync(url, header);
Przykład: Odpowiedź
{
"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
Użyj tego łącznika, aby odczytać wartości ustawień witryny dla bieżącej witryny internetowej.
Note
Nie przechowuj wpisów tajnych, takich jak klucze interfejsu API lub poświadczenia, bezpośrednio w logice serwera. Zamiast tego przechowuj je bezpiecznie w Azure Key Vault, źródło ich za pomocą zmiennych środowiskowych i odwoływania się do nich przy użyciu ustawień witryny.
Example
Server.SiteSetting.Get("Search/Enabled");
EnvironmentVariable
Użyj tego łącznika, aby odczytać wartość zmiennej środowiskowej.
Example
Server.EnvironmentVariable.get("SITEPATH");
Witryna internetowa
Użyj tego łącznika, aby uzyskać szczegółowe informacje o bieżącym rekordzie witryny internetowej w usłudze Dataverse.
Example
Server.Website.adx_primarydomain;
User
Zawiera szczegółowe informacje o zalogowanym użytkowniku. Zwraca wartość null, jeśli jest anonimowa.
Example
Server.User.fullname;
Dataverse
Obiekt umożliwia Server.Connector.Dataverse wykonywanie operacji CRUD w tabelach usługi Dataverse i wywoływanie niestandardowych interfejsów API.
Note
- W przypadku odwoływania się do tabel Usługi Dataverse w kodzie użyj nazwy EntitySetName. Aby na przykład uzyskać dostęp do
accounttabeli, użyj klasy EntitySetNameaccounts.
CreateRecord (UtwórzRekord)
Utwórz nowy rekord.
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\"}");
Pobieranie rekordu
Pobiera pojedynczy rekord według identyfikatora.
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
Pobiera kolekcję rekordów.
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");
Rekord aktualizacji
Aktualizuje istniejący rekord według identyfikatora.
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 (UsuńRekord)
Usuwa rekord według identyfikatora.
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)
Wywoływanie funkcji powiązanej:
Server.Connector.Dataverse.InvokeCustomApi("get", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundFunction");
Wywołaj akcję powiązaną:
Server.Connector.Dataverse.InvokeCustomApi("post", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundAction", "{ \"parameter1\": \"value1\" }");
Wywołaj niezwiązaną akcję:
Server.Connector.Dataverse.InvokeCustomApi("post", "new_Action", "{ \"parameter1\": \"value1\" }");
Przykład: Odpowiedź
{
"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
Server.Connector.CloudFlow Użyj obiektu , aby wyzwolić przepływ chmury Power Automate z logiki serwera. Przepływ należy już dodać do witryny. Jest to odpowiednik wywoływania przepływu po stronie serwera przy użyciu interfejsu API przepływu w chmurze ze strony internetowej. Używa on tego samego bazowego potoku /_api/cloudflow/v1.0/trigger/<guid> co punkt końcowy. Zachowanie instalacji, autoryzacji i ładunku jest takie samo. Tylko kontekst wywołujący różni się.
Note
-
Server.Connector.CloudFlow.TriggerAsyncjest asynchroniczna. Użyjawaiti oznacz funkcjęasyncwywołującą . - Przed wyzwoleniem przepływu z poziomu logiki serwera utwórz przepływ i dodaj go do witryny z autoryzowaną rolą sieci Web. Zalogowany użytkownik musi posiadać jedną z tych ról.
- Jeśli przeniesiesz lokację do innego środowiska, zarejestruj przepływ chmury w środowisku docelowym przed jego wywołaniem.
TriggerAsync
Wyzwala przepływ chmury i zwraca kopertę odpowiedzi.
Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
-
flowId: identyfikator przepływu. Ten sam identyfikator GUID, który jest wyświetlany w identyfikatorze URI interfejsu API przepływu w chmurze (/_api/cloudflow/v1.0/trigger/<guid>). Tę wartość można znaleźć na stronie Przepływy chmury witryny w obszarze Konfigurowanie>integracji. -
payload: Opcjonalny ciąg JSON zawierający parametry wejściowe wyzwalacza, kluczem nazw parametrów zdefiniowanych w wyzwalaczu przepływu. Przekażnulllub pusty ciąg, jeśli przepływ nie przyjmuje żadnych danych wejściowych. ElementsiteId,siteUrliuserIdsą automatycznie dodawane do ładunku.
Example
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 });
}
Przykład: Odpowiedź
{
"StatusCode": 200,
"Body": "JsonString",
"IsSuccessStatusCode": true,
"ReasonPhrase": "OK",
"ServerError": false,
"ServerErrorMessage": null
}
Jeśli przepływ chmury nie zawiera akcji odpowiedzi, zwraca 202 Accepted wartość i jest pusta Body. W logice serwera ta odpowiedź jest zgłaszana jako IsSuccessStatusCode: true.
Logger
Użyj rejestratora, aby napisać komunikaty diagnostyczne, które można wyświetlić w rozszerzeniu DevTools.
Przykład:
Server.Logger.Log("Information message");
Server.Logger.Warn("Warning message");
Server.Logger.Error("Error message");
Context
Obiekt Server.Context zawiera informacje o wywołaniu logiki bieżącego serwera. Dostępne właściwości zależą od tego, czy logika serwera została wywołana za pośrednictwem żądania HTTP, czy szablonu Liquid.
Properties
| Nazwa | Dostępne dla | Description |
|---|---|---|
ActivityId |
HTTP i Liquid | Unikatowy identyfikator wywołania logiki serwera. Ta wartość służy do korelowania dzienników i rozwiązywania problemów z operacją. |
Body |
HTTP | Nieprzetworzona treść żądania HTTP. |
FunctionName |
HTTP i Liquid | Nazwa wywoływanej funkcji Języka JavaScript. W przypadku wywołania Liquid ta wartość odpowiada operation parametrowi tagu serverlogic . |
Headers |
HTTP | Nagłówki żądań HTTP. |
HttpMethod |
HTTP | Metoda żądania HTTP, taka jak GET, , POSTPUT, PATCHlub DELETE. |
Input |
Ciecz | Ciąg wejściowy dostarczony za pomocą input parametru tagu serverlogic Liquid. Gdy dane wejściowe zawierają dane ustrukturyzowane, przeanalizuj je jako dane JSON przed jego użyciem. |
QueryParameters |
HTTP | Parametry ciągu zapytania z żądania HTTP. |
ServerLogicName |
HTTP i Liquid | Nazwa wywoływanego rekordu logiki serwera. |
Url |
HTTP | Pełny adres URL żądania HTTP. |
Uzyskiwanie dostępu do kontekstu żądania HTTP
Poniższy przykład odczytuje id parametr zapytania, gdy logika serwera jest wywoływana za pośrednictwem żądania HTTP:
var id = Server.Context.QueryParameters["id"];
Możesz również uzyskać dostęp do metadanych żądania:
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
});
}
Uzyskiwanie dostępu do kontekstu wywołania Liquid
Gdy logika serwera jest wywoływana z liquid, użyj polecenia Server.Context.Input , aby odczytać wartość podaną za pomocą parametru tagu input .
Na przykład następujący kod Liquid przekazuje dane wejściowe JSON:
{% assign inputData = '{"category":"active","maximumResults":5}' %}
{% serverlogic output: result, name: 'customer-summary', operation: 'getSummary', input: inputData %}
Operacja logiki serwera może analizować dane wejściowe i uzyskać dostęp do informacji o wywołaniu 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
});
}
Następny krok
Jak wchodzić w interakcje z tabelami Usługi Dataverse przy użyciu logiki serwera