ตรรกะเซิร์ฟเวอร์สำหรับผู้เขียน

สร้างตรรกะของเซิร์ฟเวอร์ใน ตั้งค่าพื้นที่ทํางาน ในสตูดิโอออกแบบ แต่ละเรกคอร์ดตรรกะของเซิร์ฟเวอร์แสดงถึงตรรกะฝั่งเซิร์ฟเวอร์เฉพาะที่คุณสามารถเรียกจากสคริปต์ไคลเอ็นต์โดยใช้ HTTP กริยาที่สนับสนุน หรือจากเทมเพลต Liquid ในระหว่างการแสดงหน้าฝั่งเซิร์ฟเวอร์

ขั้นตอนในการสร้างตรรกะเซิร์ฟเวอร์

  1. ลงชื่อเข้าใช้ Power Pages
  2. เลือกไซต์ + แก้ไข
  3. ไปที่ ตั้งค่าพื้นที่ทํางาน แล้วเลือก ตรรกะของเซิร์ฟเวอร์
  4. เลือก +ตรรกะเซิร์ฟเวอร์ใหม่
  5. ป้อนชื่อสําหรับตรรกะของเซิร์ฟเวอร์ API ใช้ชื่อนี้เป็นตัวระบุทรัพยากรเมื่อสร้าง API ตรรกะของเซิร์ฟเวอร์
  6. เลือก +เพิ่มบทบาท เพื่อกําหนดบทบาทของเว็บที่เหมาะสม
  7. เลือกจุดสามจุด (...) ที่อยู่ถัดจากชื่อ และเลือกแก้ไขโค้ด
  8. เลือก เปิดรหัส Visual Studio เพื่อเขียนตรรกะแบบกําหนดเอง

เรียกตรรกะของเซิร์ฟเวอร์จากไคลเอนต์สคริปต์

Note

คำขอแต่ละรายการที่ส่งไปยังตรรกะฝั่งเซิร์ฟเวอร์ควรมีโทเค็น Cross-Site Request Forgery (CSRF) โดยทั่วไป เมธอด shell.safeAjax จะห่อหุ้มโทเค็น CSRF สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างคําขอ โปรดดู ฟังก์ชัน CSRF wrapper AJAX

ตัวอย่าง: การเรียก 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 จากฝั่งไคลเอ็นต์หรือโทเค็น Cross-Site Request 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
    });
}

ตรวจสอบอินพุตก่อนที่จะใช้ในการดําเนินการผกผันหรือส่งผ่านไปยังบริการภายนอก

Note

ตรรกะของเซิร์ฟเวอร์ที่เรียกใช้จากการเรียกใช้ 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 โดยใช้ตรรกะของเซิร์ฟเวอร์