หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
กฎการจองใน Field Service สร้างข้อความเตือนหรือข้อผิดพลาดที่ผู้ใช้เห็น เมื่อมีการสร้างหรือการแก้ไขเรกคอร์ดการจองทรัพยากร ที่ขึ้นอยู่กับเงื่อนไขที่กำหนดเอง ตัวอย่างเช่น กฎการจองสามารถสร้างขึ้นเพื่อเตือนผู้ใช้เมื่อพวกเขาพยายามจองใบสั่งงานไปยังทรัพยากรบนบอร์ดกําหนดการที่ไม่มีลักษณะที่จําเป็นสําหรับงาน
กฎการจองเป็นวิธี JavaScript ที่กำหนดเองซึ่งดำเนินการก่อนหน้าเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างหรือแก้ไข วิธี JavaScript สามารถยอมรับพารามิเตอร์ที่มีข้อมูลสำหรับเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างขึ้น และจะต้องส่งคืนออบเจ็กต์ JavaScript ที่มีคุณสมบัติที่จำเป็น
ตั้งค่ากฎการจองเพื่อตรวจสอบการจองเมื่อมีสร้างหรือปรับเปลี่ยน
Note
- กฎการจองจะพร้อมใช้งานสำหรับมุมมองรายชั่วโมงเท่านั้น ไม่ใช่มุมมองรายวัน รายสัปดาห์ หรือรายเดือนของบอร์ดตารางงานและระบบจัดการกำหนดการ สามารถใช้งานเมื่อมีการสร้างหรืออัปเดตการจองในฟอร์มการจองทรัพยากรที่สามารถจองได้
- กฎการจองไม่มีอยู่ในฟอร์มการจองทรัพยากรที่สามารถจองได้ หากมีการเปิดใช้งานโฟลว์กระบวนการธุรกิจในฟอร์ม
- กฎการจองไม่มีอยู่ในฟังก์ชันการกำหนดใหม่บนบอร์ดตารางงาน
- กฎการจองแบบกําหนดเองแต่ละข้อสามารถส่งคืนข้อผิดพลาดหรือคําเตือนเดียวเท่านั้น หากต้องการส่งคืนข้อความหลายรายการ ให้ตั้งค่ากฎการจองแต่ละรายการสำหรับการตรวจสอบความถูกต้องแต่ละครั้ง
สร้างโซลูชัน
สร้างทรัพยากรบนเว็บ JavaScript แบบกําหนดเอง เราขอแนะนำให้คุณสร้างโซลูชันใน Microsoft Power Apps เพื่อเพิ่มทรัพยากรบนเว็บ JavaScript ที่กำหนดเองหรือใช้โซลูชันที่มีอยู่ซึ่งคุณใช้สำหรับการปรับแต่ง
สร้างโซลูชันใหม่ สําหรับทรัพยากรบนเว็บ JavaScript ของกฎการจองของคุณ เราขอแนะนำให้โซลูชันของคุณใช้ผู้เผยแพร่ที่ไม่ซ้ำกันแทนที่จะเป็นผู้เผยแพร่เริ่มต้น
หลังจากสร้างโซลูชัน สร้างทรัพยากรบนเว็บใหม่
เลือก JavaScript (JS) เป็นชนิด
ป้อนโค้ด JavaScript สําหรับกฎการจองของคุณ
เลือก บันทึก และ เผยแพร่
ตั้งค่ากฎการจอง
ไปยัง Field Service และเลือกพื้นที่ ทรัพยากร
ภายใต้ การตั้งค่าการจอง เลือก กฎการจอง แล้วเลือก ใหม่
ใส่ข้อมูลต่อไปนี้:
- ชื่อของกฎการจอง
- ทรัพยากรบนเว็บที่คุณเพิ่งสร้างขึ้น
- ชื่อวิธีการที่คุณกำหนดใน JavaScript ของคุณ
เลือก บันทึก & ปิด กฎการจองมีการใช้โดยมุมมองรายชั่วโมงของบอร์ดตารางงานและระบบจัดการกำหนดการหรือฟอร์มเอนทิตี
Note
กฎการจองได้รับการสนับสนุนเฉพาะในมุมมองรายชั่วโมงของบอร์ดตารางงานและระบบจัดการกำหนดการเท่านั้น กฎการจองยังได้รับการสนับสนุนเมื่อมีการสร้างหรืออัปเดตการจองโดยใช้ฟอร์มการจองทรัพยากรที่สามารถจองได้ กฎการจอง ไม่ ดำเนินการเมื่อลบเรกคอร์ดการจอง กฎการจองไม่ทำงานบนฟอร์มเมื่อใช้การแก้ไขหลายรายการ หากต้องการหยุดการดําเนินการของกฎ ให้ปิดการใช้งานกฎการจอง
สร้างกระบวนการแบบกำหนดเอง
สร้างการดําเนินการของกระบวนการแบบกําหนดเอง เพื่อทําการตรวจสอบความถูกต้องเป็นส่วนหนึ่งของกฎการจอง ใน JavaScript ของทรัพยากรบนเว็บแบบกําหนดเองของคุณ ให้เรียกใช้การดําเนินการของกระบวนการแบบกําหนดเอง และประเมินผลลัพธ์จากการดําเนินการ ไปที่ ตัวอย่างโค้ด เพื่อดูวิธีการเรียกใช้การดําเนินการของกระบวนการแบบกําหนดเอง
เราขอแนะนำให้คุณใช้โซลูชันที่คุณกำหนดไว้สำหรับทรัพยากรบนเว็บแบบกำหนดเองของคุณเพื่อเพิ่มการดำเนินการของกระบวนการแบบกำหนดเองของคุณ
ใช้พารามิเตอร์อินพุตและเอาต์พุตต่อไปนี้ คุณสามารถเพิ่มพารามิเตอร์ข้อมูลป้อนเข้าและผลผลิตเพิ่มเติมได้ตามที่สถานการณ์ต้องการ คุณจะต้องตรวจสอบให้แน่ใจว่า JavaScript ที่คุณกำหนดเพื่อเรียกใช้การดำเนินการของกระบวนการแบบกำหนดเองของคุณได้รับการอัปเดตเพื่อรองรับพารามิเตอร์ข้อมูลป้อนเข้าและผลลัพธ์อื่นๆ ของคุณ
พารามิเตอร์ข้อมูลป้อนเข้า:
- originalScheduleStart - วันที่และเวลา
- เวลาสิ้นสุดตามกำหนดการเดิม – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource - ตัวเลือก
- newScheduleStart - วันที่และเวลา
- newScheduleEnd – วันที่และเวลา
- isCreate - บูลีน
- isUpdate - บูลีน
พารามิเตอร์ผลผลิต:
- isError - บูลีน
- isWarning - บูลีน
- errorMessage – สตริง
- warningMessage - สตริง
ภาพหน้าจอต่อไปนี้แสดงตัวอย่างการดำเนินการของกระบวนการแบบกำหนดเอง ตัวอย่างนี้กำลังตรวจสอบว่า newBookableResource ตรงกับทรัพยากรที่ต้องการในใบสั่งงานหรือไม่ และ newScheduleStart อยู่ภายใน ระยะเวลาจากที่สัญญา และ เวลาสิ้นสุดที่สัญญา หรือไม่ จะถือว่าวันที่ของหน้าต่างที่สัญญาไว้สำหรับวันที่เดียว ตัวอย่าง: เวลาเริ่มต้นที่สัญญา: 01/01/2016 8:00 น. / เวลาสิ้นสุดที่สัญญา: 01/01/2016 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 ต่อไปนี้
Note
ไม่ จำเป็นต้องรวมรหัส 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 พร้อมคำจำกัดความต่อไปนี้
Note
ไม่ จำเป็นต้องรวมรหัส 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})