วัตถุเซิร์ฟเวอร์

ตรรกะของเซิร์ฟเวอร์มีวัตถุที่มีอยู่ภายในภายใต้เนมสเปซของเซิร์ฟเวอร์ วัตถุเหล่านี้ทําให้การพัฒนาง่ายขึ้นโดยช่วยให้คุณบันทึกข้อความ เรียกบริการภายนอก ทํางานกับ Dataverse หรือรายละเอียดคําขอการเข้าถึง

HttpClient

ใช้ไคลเอ็นต์ HTTP เพื่อรวมกับบริการภายนอกโดยการส่งคําขอ HTTP

โน้ต

ในปัจจุบัน ตรรกะเซิร์ฟเวอร์สนับสนุนเฉพาะ application/json, text/html, และ application/x-www-form-urlencoded ชนิดเนื้อหาในเนื้อความคําขอ

ตัวอย่าง

รับ HTTP

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

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 สร้างแหล่งข้อมูลผ่านตัวแปรสภาพแวดล้อม และอ้างอิงโดยใช้การตั้งค่าไซต์

ตัวอย่าง

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

สภาพแวดล้อมที่สามารถใช้ได้

อ่านค่าของตัวแปรสภาพแวดล้อม

ตัวอย่าง

Server.EnvironmentVariable.get("SITEPATH");

เว็บไซต์

มีรายละเอียดของบันทึกเว็บไซต์ปัจจุบันใน Dataverse

ตัวอย่าง

Server.Website.adx_primarydomain;

ผู้ใช้

แสดงรายละเอียดของผู้ใช้ที่ลงชื่อเข้าใช้ แสดงค่า null ถ้าไม่ระบุชื่อ

ตัวอย่าง

Server.User.fullname;

Dataverse

Server.Connector.Dataverseใช้วัตถุเพื่อดําเนินการ CRUD ในตาราง Dataverse และเรียกใช้ API แบบกําหนดเอง

โน้ต

  • เมื่อคุณอ้างอิงไปยังตาราง Dataverse ในโค้ดของคุณ ให้ใช้ EntitySetName ตัวอย่างเช่น เมื่อต้องการเข้าถึงaccountตาราง ให้ใช้ EntitySetName accounts

สร้างบันทึก

สร้างเรกคอร์ดใหม่

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

ตัวอย่าง

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

ดึงบันทึก

ดึงข้อมูลเรกคอร์ดเดียวตามรหัส

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)

ตัวอย่าง

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

RetrieveMultipleRecords

เรียกใช้คอลเลกชันของระเบียน

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

ตัวอย่าง

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

อัปเดตเรคคอร์ด

อัปเดตระเบียนที่มีอยู่โดย ID

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

ตัวอย่าง

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

ลบเรคคอร์ด

ลบเรกคอร์ดตามรหัส

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

ตัวอย่าง

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

เรียก CustomApi

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

ตัวบันทึก

ใช้ตัวบันทึกเพื่อเขียนข้อความการวินิจฉัยที่คุณสามารถดูในส่วนขยาย DevTools

ให้ใส่คำหรือวลีที่คุณกำลังค้นหาไว้ในเครื่องหมายคำพูด

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

บริบท

วัตถุ Server.Context ให้ข้อมูลเกี่ยวกับการเรียกใช้ตรรกะของเซิร์ฟเวอร์ปัจจุบัน คุณสมบัติที่พร้อมใช้งานขึ้นอยู่กับว่าตรรกะเซิร์ฟเวอร์ถูกเรียกใช้ผ่านการร้องขอ HTTP หรือจากแม่แบบ Liquid

คุณสมบัติ

ชื่อ พร้อมใช้งานสําหรับ รายละเอียด
ActivityId HTTP และ Liquid ตัวระบุที่ไม่ซ้ําสําหรับการเรียกใช้ตรรกะของเซิร์ฟเวอร์ ใช้ค่านี้เพื่อเชื่อมโยงแฟ้มบันทึกและแก้ไขปัญหาการดําเนินการ
Body HTTP เนื้อความคําขอ HTTP ดิบ
FunctionName HTTP และ Liquid ชื่อของฟังก์ชัน JavaScript ที่กําลังเรียกใช้ สําหรับการเรียกใช้ Liquid ค่านี้สอดคล้องกับ operation พารามิเตอร์ของ serverlogic แท็ก
Headers HTTP ส่วนหัวของคําขอ HTTP
HttpMethod HTTP วิธีการคําขอ HTTP เช่น GET, POST, PUT, PATCHหรือDELETE
Input Liquid สตริงอินพุตที่ให้มาผ่านพารามิเตอร์ของinputserverlogicแท็ก 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 โดยใช้ตรรกะของเซิร์ฟเวอร์

ภาพรวมตรรกะของเซิร์ฟเวอร์
ตรรกะของเซิร์ฟเวอร์ผู้เขียน