หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
กฎการจองใน Field Service สร้างข้อความเตือนหรือข้อผิดพลาดที่ผู้ใช้เห็น เมื่อมีการสร้างหรือการแก้ไขเรกคอร์ดการจองทรัพยากร ที่ขึ้นอยู่กับเงื่อนไขที่กำหนดเอง ตัวอย่างเช่น สร้างกฎการจองเพื่อเตือนผู้ใช้เมื่อพวกเขาพยายามจองใบสั่งงานไปยังทรัพยากรบนบอร์ดกําหนดการที่ไม่มีลักษณะที่จําเป็นสําหรับงาน
กฎการจองเป็นวิธีการ JavaScript แบบกําหนดเองที่ดําเนินการก่อนที่จะสร้างหรือแก้ไขเรกคอร์ด การจองทรัพยากรที่สามารถจอง ได้ เมธอด JavaScript สามารถยอมรับพารามิเตอร์ที่ประกอบด้วยข้อมูลสําหรับระเบียน การจองทรัพยากรที่สามารถจองได้ ที่สร้างขึ้นและต้องส่งกลับออบเจ็กต์ JavaScript ที่มีคุณสมบัติที่ต้องการ
ตั้งค่ากฎการจองเพื่อตรวจสอบการจองเมื่อมีสร้างหรือปรับเปลี่ยน
หมายเหตุ
- กฎการจองจะพร้อมใช้งานสำหรับมุมมองรายชั่วโมงเท่านั้น ไม่ใช่มุมมองรายวัน รายสัปดาห์ หรือรายเดือนของบอร์ดตารางงานและระบบจัดการกำหนดการ จะพร้อมใช้งานเมื่อมีการสร้างหรืออัปเดตการจองในฟอร์ม การจองทรัพยากรที่สามารถจอง ได้
- กฎการจองไม่พร้อมใช้งานในฟอร์ม การจองทรัพยากรที่สามารถจองได้ ถ้ามีการเปิดใช้งานโฟลว์กระบวนการธุรกิจบนฟอร์ม
- กฎการจองไม่มีอยู่ในฟังก์ชันการกำหนดใหม่บนบอร์ดตารางงาน
- กฎการจองแบบกําหนดเองแต่ละข้อสามารถส่งคืนข้อผิดพลาดหรือคําเตือนเดียวเท่านั้น หากต้องการส่งคืนข้อความหลายรายการ ให้ตั้งค่ากฎการจองแต่ละรายการสำหรับการตรวจสอบความถูกต้องแต่ละครั้ง
สร้างโซลูชัน
สร้างทรัพยากรบนเว็บ JavaScript แบบกําหนดเอง สร้างโซลูชันใน Microsoft Power Apps เพื่อเพิ่มทรัพยากรบนเว็บ JavaScript แบบกําหนดเองของคุณ หรือใช้โซลูชันที่มีอยู่ที่คุณใช้สําหรับการกําหนดเอง
สร้างโซลูชันใหม่ สําหรับทรัพยากรบนเว็บ JavaScript ของกฎการจองของคุณ ใช้ผู้เผยแพร่ที่ไม่ซ้ํากันแทนที่จะเป็นผู้เผยแพร่เริ่มต้น
หลังจากสร้างโซลูชัน สร้างทรัพยากรบนเว็บใหม่
เลือก JavaScript (JS) เป็นชนิด
ป้อนโค้ด JavaScript สําหรับกฎการจองของคุณ
เลือก บันทึก และ เผยแพร่
ตั้งค่ากฎการจอง
ไปยัง Field Service และเลือกพื้นที่ ทรัพยากร
ภายใต้ การตั้งค่าการจอง เลือก กฎการจอง แล้วเลือก ใหม่
ป้อนข้อมูลต่อไปนี้
- ชื่อของกฎการจอง
- ทรัพยากรบนเว็บที่คุณเพิ่งสร้างขึ้น
- ชื่อวิธีการที่คุณกำหนดใน JavaScript ของคุณ
เลือก บันทึกและปิด มุมมองรายชั่วโมงของบอร์ดกำหนดการ ตัวช่วยจัดกำหนดการ และฟอร์มเอนทิตี ใช้กฎการจอง
หมายเหตุ
มุมมองรายชั่วโมงของกระดานกำหนดการและตัวช่วยจัดกำหนดการเป็นเพียงสองส่วนที่รองรับกฎการจอง กฎการจองยังนําไปใช้เมื่อผู้ใช้สร้างหรืออัปเดตการจองผ่านแบบฟอร์ม การจองทรัพยากรที่สามารถจอง ได้ กฎการจองจะไม่ดําเนินการเมื่อลบเรกคอร์ดการจอง กฎการจองไม่ทำงานในฟอร์มเมื่อใช้โหมดแก้ไขหลายรายการ หากต้องการหยุดการดําเนินการของกฎ ให้ปิดการใช้งานกฎการจอง
สร้างกระบวนการแบบกำหนดเอง
เมื่อต้องการดําเนินการตรวจสอบความถูกต้องเป็นส่วนหนึ่งของกฎการจอง ให้ใช้ สร้างการดําเนินการกระบวนการแบบกําหนดเอง ใน JavaScript ของทรัพยากรบนเว็บแบบกําหนดเองของคุณ ให้เรียกใช้การดําเนินการของกระบวนการแบบกําหนดเอง และประเมินผลลัพธ์จากการดําเนินการ เมื่อต้องการดูวิธีการเรียกใช้การดําเนินการของกระบวนการแบบกําหนดเอง ให้ไปที่โค้ดตัวอย่าง
ใช้โซลูชันที่คุณกําหนดไว้สําหรับทรัพยากรบนเว็บแบบกําหนดเองของคุณเพื่อเพิ่มการดําเนินการของกระบวนการแบบกําหนดเองของคุณ
ใช้พารามิเตอร์อินพุตและเอาต์พุตต่อไปนี้ คุณสามารถเพิ่มพารามิเตอร์ข้อมูลป้อนเข้าและผลผลิตเพิ่มเติมได้ตามที่สถานการณ์ต้องการ ตรวจสอบให้แน่ใจว่า JavaScript ที่คุณกําหนดให้เรียกใช้การดําเนินการของกระบวนการแบบกําหนดเองได้รับการอัปเดตเพื่อรองรับพารามิเตอร์อินพุตและเอาต์พุตอื่นๆ ของคุณ
พารามิเตอร์ข้อมูลป้อนเข้า:
- originalScheduleStart - วันที่และเวลา
- เวลาสิ้นสุดตามกำหนดการเดิม – DateTime
- originalBookableResource – การอ้างอิงเอนทิตี
- originalScheduleSource - ตัวเลือก
- newScheduleStart - วันที่และเวลา
- newScheduleEnd – วันที่และเวลา
- isCreate - บูลีน
- isUpdate - บูลีน
พารามิเตอร์เอาต์พุต:
- isError - บูลีน
- isWarning - บูลีน
- errorMessage – สตริง
- warningMessage - สตริง
ภาพหน้าจอต่อไปนี้แสดงตัวอย่างการดำเนินการของกระบวนการแบบกำหนดเอง ตัวอย่างนี้จะตรวจสอบว่า newBookableResource ตรงกับทรัพยากรที่ต้องการในใบสั่งงานหรือไม่ และ newScheduleStart อยู่ภายใน เวลาจากสัญญา และ เวลาที่สัญญา จะถือว่าวันที่ของหน้าต่างที่สัญญาไว้สำหรับวันที่เดียว ตัวอย่าง: เวลาจากสัญญา: 01/01/2026 8:00 น. / เวลาถึงสัญญา: 01/01/2026 12:00 น.
โค้ดตัวอย่าง
ฟังก์ชัน JavaScript ที่คุณสร้างสามารถยอมรับพารามิเตอร์เดียว ซึ่งเป็นบริบทการจอง พารามิเตอร์บริบทการจองไม่ใช่บริบท CRM ทั่วไปที่ใช้ในการเขียนสคริปต์ฝั่งไคลเอ็นต์
สคีมาบริบทการจอง:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
พารามิเตอร์บริบทการจองมีข้อกําหนด JavaScript ต่อไปนี้
หมายเหตุ
คุณไม่จําเป็นต้องใส่โค้ด JavaScript นี้ในแหล่งข้อมูลบนเว็บที่กําหนดเองสําหรับกฎการจอง
ค่าที่เป็นไปได้สําหรับ ResourceScheduleSource มาจากชุดตัวเลือกส่วนกลางของแหล่งที่มาของกําหนดการทรัพยากร ใช้พร็อพเพอร์ตีนี้เพื่อตรวจสอบว่ากฎการจองถูกเรียกใช้จากกระดานกำหนดการหรือตัวช่วยจัดกำหนดการหรือไม่
var sbContext = {
oldValues: {
StartTime: "01/01/2016 08:00AM",
EndTime: "01/01/2016 05:00PM",
ResourceId: "00000000-0000-0000-0000-00000000",
ResourceScheduleSource: 690970001
},
newValues: {
StartTime: "01/01/2016 08:00AM",
EndTime: "01/01/2016 05:00PM",
ResourceId: "00000000-0000-0000-0000-00000000",
ResourceScheduleSource: 690970001
},
isCreate: true,
isUpdate: false
};
วิธีการตรวจสอบของคุณจะต้องส่งคืนออบเจ็กต์ JavaScript พร้อมคำจำกัดความต่อไปนี้
หมายเหตุ
คุณไม่จําเป็นต้องใส่โค้ด JavaScript นี้ในแหล่งข้อมูลบนเว็บที่กําหนดเองสําหรับกฎการจอง
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
ตัวอย่างนิยามฟังก์ชัน JavaScript โค้ด JavaScript ต่อไปนี้เป็นโค้ด JavaScript เดียวที่คุณต้องรวมไว้ในทรัพยากรบนเว็บแบบกําหนดเองของคุณ
function Validate(ctx) {
var url = Xrm.Page.context.getClientUrl();
var ruleResult = {
IsValid: false,
Message: '',
Type: 'error'
};
//
// perform some lookups or other validation logic here.
//
ruleResult.IsValid = false;
ruleResult.Message = 'Some Error Message Here.';
ruleResult.Type = 'error';
return ruleResult;
}
สามารถใช้ JavaScript ต่อไปนี้เพื่อเรียกการดำเนินการ CRM แบบกำหนดเองที่มีพารามิเตอร์ข้อมูลป้อนเข้าและผลลัพธ์เดียวกันกับตัวอย่างก่อนหน้า
ในเรกคอร์ดกฎการจอง ชื่อวิธีการ จะต้องเป็น: MSFSAENG.ScheduleBoard.Validate สำหรับข้อมูลอ้างอิง โปรดดูภาพหน้าจอในส่วน "การตั้งค่ากฎการจอง" ของบทความนี้
/// <reference path="xrm.d.ts" />
function brErrorCallback(sb) {
// Add custom error handeling here if desired.
return;
}
function brWarningCallback(sb) {
// Add custom warning handeling here if desired.
return;
}
function brSuccessCallback(sb) {
// add custom sucess handeling here if desired.
return;
}
var MSFSAENG;
(function (MSFSAENG) {
MSFSAENG.ScheduleBoard = {
url: Xrm.Page.context.getClientUrl() + "/api/data/v8.1/",
actionName: "msfsaeng_MSFSAScheduleBoardRuleActionSample",
actionInputParameters: function (ctx) {
var inputParameters = {};
if (ctx.isUpdate) {
inputParameters = {
"originalScheduleStart": ctx.oldValues.StartTime,
"originalScheduleEnd": ctx.oldValues.EndTime,
"originalBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.oldValues.ResourceId,
"name": ""
},
"originalScheduleSource": ctx.oldValues.ResourceScheduleSource,
"newScheduleStart": ctx.newValues.StartTime,
"newScheduleEnd": ctx.newValues.EndTime,
"newBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.newValues.ResourceId,
"name": ""
},
"newScheduleSource": ctx.newValues.ResourceScheduleSource,
"isCreate": ctx.isCreate,
"isUpdate": ctx.isUpdate
};
}
else {
inputParameters = {
"newScheduleStart": ctx.newValues.StartTime,
"newScheduleEnd": ctx.newValues.EndTime,
"newBookableResource": {
"@odata.type": "Microsoft.Dynamics.CRM.bookableresource",
"bookableresourceid": ctx.newValues.ResourceId,
"name": ""
},
"newScheduleSource": ctx.newValues.ResourceScheduleSource,
"isCreate": ctx.isCreate,
"isUpdate": ctx.isUpdate
};
}
return JSON.stringify(inputParameters);
},
ctx: null,
ruleResult: {
IsValid: true,
Message: "",
Type: ""
},
outputParameters: {
isError: false,
isWarning: false,
errorMessage: "",
warningMessage: ""
},
Validate: function (context) {
this.ctx = context;
ScheduleBoardHelper.callActionWebApi(this);
return this.ruleResult;
},
errorCallback: brErrorCallback,
warningCallback: brWarningCallback,
successCallback: brSuccessCallback
};
var ScheduleBoardHelper = (function () {
function ScheduleBoardHelper() {
}
ScheduleBoardHelper.callActionWebApi = function (sb) {
var oDataEndpoint = sb.url + sb.actionName;
var req = new XMLHttpRequest();
req.open("POST", oDataEndpoint, false);
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.onreadystatechange = function () {
if (req.readyState == 4) {
req.onreadystatechange = null;
if (req.status == 200) {
sb.outputParameters = JSON.parse(req.response);
if (sb.outputParameters.isError) {
sb.ruleResult.IsValid = false;
sb.ruleResult.Message = sb.outputParameters.errorMessage;
sb.ruleResult.Type = 'error';
if (sb.errorCallback)
sb.errorCallback(sb);
return;
}
else if (sb.outputParameters.isWarning) {
sb.ruleResult.IsValid = false;
sb.ruleResult.Message = sb.outputParameters.warningMessage;
sb.ruleResult.Type = 'warning';
if (sb.warningCallback)
sb.warningCallback(sb);
return;
}
else {
sb.ruleResult.IsValid = true;
sb.ruleResult.Message = '';
sb.ruleResult.Type = '';
if (sb.successCallback)
sb.successCallback(sb);
return;
}
}
else {
alert('Error calling Rule Action. Response = ' + req.response + ', Status = ' + req.statusText);
}
}
};
req.send(sb.actionInputParameters(sb.ctx));
};
return ScheduleBoardHelper;
}());
})(MSFSAENG || (MSFSAENG = {}));
ใช้โฟลว์กระบวนการธุรกิจและสคริปต์แบบกําหนดเองอื่นๆ
เมื่อคุณเปิดการจองทรัพยากรที่สามารถจองได้ ให้ใช้กฎการจองเพื่อสร้างคําเตือนหรือข้อความแสดงข้อผิดพลาดที่ผู้ใช้เห็นเมื่อสร้างหรือแก้ไขเรกคอร์ดการจองทรัพยากร ตามเงื่อนไขที่กําหนดเอง ระบบใช้ preventDefault ในกฎการจอง ดังนั้น คุณจึงไม่สามารถใช้โฟลว์กระบวนการธุรกิจและสคริปต์แบบกําหนดเองอื่นๆ ที่ผูกกับ onSave เหตุการณ์ในเอนทิตี การจองทรัพยากรที่สามารถจองได้ เมื่อเปิดใช้งานกฎการจอง
อย่างไรก็ตาม คุณสามารถปิดใช้งานการประมวลผลกฎการจองในการบันทึกแบบฟอร์มการจองได้โดยเปิดใช้งานการตั้งค่าต่อไปนี้ การเปลี่ยนแปลงนี้ช่วยให้ผู้ใช้ใช้โฟลว์กระบวนการธุรกิจ ใช้ API ไคลเอ็นต์เพื่อเปิดใช้งานการตั้งค่านี้ในระดับสภาพแวดล้อม
- อ่านค่าปัจจุบันของการตั้งค่า
msdyn_DisableProcessBookingRulesOnSaveBookingForm
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
- เปิดใช้งานการตั้งค่า
msdyn_DisableProcessBookingRulesOnSaveBookingForm
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
- ปิดใช้งานการตั้งค่า
msdyn_DisableProcessBookingRulesOnSaveBookingForm
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})