หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
สร้างตรรกะของเซิร์ฟเวอร์ใน ตั้งค่าพื้นที่ทํางาน ในสตูดิโอออกแบบ แต่ละเรกคอร์ดตรรกะของเซิร์ฟเวอร์แสดงถึงตรรกะฝั่งเซิร์ฟเวอร์เฉพาะที่คุณสามารถเรียกจากสคริปต์ไคลเอ็นต์โดยใช้ HTTP กริยาที่สนับสนุน หรือจากเทมเพลต Liquid ในระหว่างการแสดงหน้าฝั่งเซิร์ฟเวอร์
ขั้นตอนในการสร้างตรรกะเซิร์ฟเวอร์
- ลงชื่อเข้าใช้ Power Pages
- เลือกไซต์ + แก้ไข
- ไปที่ ตั้งค่าพื้นที่ทํางาน แล้วเลือก ตรรกะของเซิร์ฟเวอร์
- เลือก +ตรรกะเซิร์ฟเวอร์ใหม่
- ป้อนชื่อสําหรับตรรกะของเซิร์ฟเวอร์ API ใช้ชื่อนี้เป็นตัวระบุทรัพยากรเมื่อสร้าง API ตรรกะของเซิร์ฟเวอร์
- เลือก +เพิ่มบทบาท เพื่อกําหนดบทบาทของเว็บที่เหมาะสม
- เลือกจุดสามจุด (...) ที่อยู่ถัดจากชื่อ และเลือกแก้ไขโค้ด
- เลือก เปิดรหัส 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 โดยใช้ตรรกะของเซิร์ฟเวอร์