Serverobjekter

Serverlogik leverer indbyggede objekter under servernavneområdet. Disse objekter forenkler udviklingen ved at lade dig logge meddelelser, ringe til eksterne tjenester, arbejde med Dataverse eller få adgang til oplysninger om anmodninger.

HttpClient

Brug HTTP-klienten til at integrere med eksterne tjenester ved at sende HTTP-anmodninger.

Bemærkning

I øjeblikket understøtter serverlogik kun application/json, text/htmlog application/x-www-form-urlencoded indholdstyper i anmodningens brødtekst.

Eksempler

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-PROGRAMRETTELSE

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);

Eksempel: Svar

{
    "StatusCode": 200,
    "Body": "JsonString",
    "IsSuccessStatusCode": true,
    "ReasonPhrase": "OK",
    "ServerError": false,
    "ServerErrorMessage": null,
    "Headers": {
        "Transfer-Encoding": "chunked",
        "Connection": "keep-alive",
        "Server": "",
        "Content-Type": "application/json"
    }
}

Indstillinger for websted

Brug denne connector til at læse værdier for webstedsindstilling for det aktuelle websted.

Bemærkning

Gem ikke hemmeligheder, f.eks. API-nøgler eller legitimationsoplysninger, direkte i serverlogik. I stedet skal du gemme dem sikkert i Azure Key Vault, kilde dem via miljøvariabler og referere til dem ved hjælp af webstedsindstillinger.

Eksempel

Server.SiteSetting.Get("Search/Enabled");

Miljøvariabel

Brug denne connector til at læse værdien af en miljøvariabel.

Eksempel

Server.EnvironmentVariable.get("SITEPATH");

Hjemmeside

Brug denne connector til at få oplysninger om den aktuelle webstedspost i Dataverse.

Eksempel

Server.Website.adx_primarydomain;

Bruger

Indeholder oplysninger om den bruger, der er logget på. Returnerer null, hvis det er anonymt.

Eksempel

Server.User.fullname;

Dataverse

Brug objektet Server.Connector.Dataverse til at udføre CRUD-handlinger på Dataverse-tabeller og aktivere brugerdefinerede API'er.

Bemærkning

  • Når du refererer til Dataverse-tabeller i din kode, skal du bruge EntitySetName. Hvis du f.eks. vil have adgang til account tabellen, skal du bruge EntitySetName accounts.

Opret post

Opret ny post.

Server.Connector.Dataverse.CreateRecord(string entitySetName, string payload)   

Eksempel

Server.Connector.Dataverse.CreateRecord("accounts", "{\"name\": \"Contoso Ltd.\", \"telephone1\": \"555-555-0100\", \"websiteurl\": \"https://contoso.com\"}");

Hent post

Henter en enkelt post efter id.

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)

Eksempel

Server.Connector.Dataverse.RetrieveRecord("accounts", "00000000-0000-0000-0000-000000000001", "$select=name,telephone1");

RetrieveMultipleRecords

Henter en samling poster.

Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName)
Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName, string options)
Server.Connector.Dataverse.RetrieveMultipleRecords(string entitySetName, string options, bool skipCache) 

Eksempel

Server.Connector.Dataverse.RetrieveMultipleRecords("accounts", "$select=name,emailaddress1&$top=3");

Opdater Optag

Opdaterer en eksisterende post efter id.

Server.Connector.Dataverse.UpdateRecord(string entitySetName, string id, string payload)   

Eksempel

Server.Connector.Dataverse.UpdateRecord("accounts", "00000000-0000-0000-0000-000000000001", "{ \"telephone1\": \"555-555-0100\" }");

Slet post

Sletter en post efter id.

Server.Connector.Dataverse.DeleteRecord(string entitySetName, string id) 

Eksempel

Server.Connector.Dataverse.DeleteRecord("accounts", "00000000-0000-0000-0000-000000000001");

InvokeCustomApi

Server.Connector.Dataverse.InvokeCustomApi(string httpMethod, string url, string payload = null) 

Aktivér en bundet funktion:

Server.Connector.Dataverse.InvokeCustomApi("get", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundFunction");

Aktivér en bundet handling:

Server.Connector.Dataverse.InvokeCustomApi("post", "accounts(00000000-0000-0000-0000-000000000001)/Microsoft.Dynamics.CRM.new_CustomBoundAction", "{ \"parameter1\": \"value1\" }");

Aktivér en ubundet handling:

Server.Connector.Dataverse.InvokeCustomApi("post", "new_Action", "{ \"parameter1\": \"value1\" }");

Eksempel: Svar

{
    "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

Brug objektet Server.Connector.CloudFlow til at udløse et Power Automate cloudflow fra serverlogik. Flowet skal allerede føjes til dit websted. Det svarer til at aktivere et flow på serversiden ved hjælp af API'en for cloudflowet fra en webside. Den bruger den samme underliggende pipeline som slutpunktet /_api/cloudflow/v1.0/trigger/<guid> . Funktionsmåden for konfiguration, godkendelse og nyttedata er den samme. Det er kun den kaldende kontekst, der adskiller sig.

Bemærkning

TriggerAsync

Udløser et cloudflow og returnerer svarkonvolutten.

Server.Connector.CloudFlow.TriggerAsync(string flowId, string payload = null)
  • flowId: Flow-id'et. Det samme GUID, der vises i API-URI'en for cloudflowet (/_api/cloudflow/v1.0/trigger/<guid>). Du kan finde denne værdi på webstedets cloudflowside under Konfigurer>integrationer.
  • payload: Valgfri JSON-streng, der indeholder udløserinputparametre, og som er angivet med de parameternavne, der er defineret i flowets udløser. Pass null eller en tom streng, hvis flowet ikke tager nogen input. , siteIdsiteUrlog userId føjes automatisk til nyttedataene.

Eksempel

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 });
}

Eksempel: Svar

{
    "StatusCode": 200,
    "Body": "JsonString",
    "IsSuccessStatusCode": true,
    "ReasonPhrase": "OK",
    "ServerError": false,
    "ServerErrorMessage": null
}

Hvis cloudflowet ikke indeholder en svarhandling, returneres 202 Accepted det og en tom Body. I serverlogik rapporteres dette svar som IsSuccessStatusCode: true.

Logger

Brug logføringen til at skrive diagnosticeringsmeddelelser, som du kan få vist i udvidelsen DevTools.

Eksempel:

Server.Logger.Log("Information message");
Server.Logger.Warn("Warning message");
Server.Logger.Error("Error message");

Kontekst

Objektet Server.Context indeholder oplysninger om den aktuelle aktivering af serverlogik. De tilgængelige egenskaber afhænger af, om serverlogikken blev aktiveret via en HTTP-anmodning eller fra en Liquid-skabelon.

Egenskaber

Name Tilgængelig for Beskrivelse
ActivityId HTTP og flydende Entydigt id for aktivering af serverlogik. Brug denne værdi til at korrelere logge og foretage fejlfinding af en handling.
Body HTTP Rå http-anmodningsbrødtekst.
FunctionName HTTP og flydende Navnet på den JavaScript-funktion, der aktiveres. For en Liquid-aktivering svarer denne værdi til operation parameteren for serverlogic koden.
Headers HTTP HTTP-anmodningsheadere.
HttpMethod HTTP HTTP-anmodningsmetode, f.eks GET. , POST, PUT, PATCHeller DELETE.
Input Liquid Inputstrengen input , der leveres via parameteren for serverlogic liquid-koden. Når inputtet indeholder strukturerede data, skal du fortolke det som JSON, før du bruger det.
QueryParameters HTTP Forespørgselsstrengparametre fra HTTP-anmodningen.
ServerLogicName HTTP og flydende Navnet på den serverlogikpost, der aktiveres.
Url HTTP Fuldstændig URL-adresse til HTTP-anmodningen.

Få adgang til HTTP-anmodningskontekst

I følgende eksempel læses forespørgselsparameteren id , når serverlogik aktiveres via en HTTP-anmodning:

var id = Server.Context.QueryParameters["id"];

Du kan også få adgang til anmodningsmetadata:

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
    });
}

Kontekst for adgang til flydende aktivering

Når serverlogik aktiveres fra Liquid, skal du bruge Server.Context.Input til at læse den værdi, der leveres via kodens input parameter.

Følgende Liquid overfører f.eks. JSON-input:

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

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

Handlingen serverlogik kan fortolke input- og adgangsoplysningerne om aktiveringen af 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
    });
}

Næste trin

Sådan interagerer du med Dataverse-tabeller ved hjælp af serverlogik

Oversigt over serverlogik
Forfatterserverlogik