ตั้งค่ากฎการจอง
กฎการจองใน Field Service สร้างข้อความเตือนหรือข้อผิดพลาดที่ผู้ใช้เห็น เมื่อมีการสร้างหรือการแก้ไขเรกคอร์ดการจองทรัพยากร ที่ขึ้นอยู่กับเงื่อนไขที่กำหนดเอง ตัวอย่างเช่น กฎการจองสามารถถูกสร้างเพื่อเตือนผู้ใช้ เมื่อพวกเขาพยายามที่จะจองใบสั่งงานให้กับทรัพยากรบนบอร์ดตารางงานที่ไม่มีทักษะที่จำเป็นสำหรับงาน
กฎการจองเป็นวิธี JavaScript ที่กำหนดเองซึ่งจะดำเนินการก่อนหน้าเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างหรือแก้ไข วิธี JavaScript สามารถยอมรับพารามิเตอร์ที่จะมีข้อมูลสำหรับเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างขึ้น และจะต้องส่งคืนงออบเจ็กต์ JavaScript ที่มีคุณสมบัติที่จำเป็น
ตั้งค่ากฎการจองเพื่อตรวจสอบการจองเมื่อมีสร้างหรือปรับเปลี่ยน
หมายเหตุ
- กฎการจองจะพร้อมใช้งานสำหรับมุมมองรายชั่วโมงเท่านั้น ไม่ใช่มุมมองรายวัน รายสัปดาห์ หรือรายเดือนของตารางกำหนดการและระบบจัดการกำหนดการ นอกจากนี้ยังพร้อมใช้งานเมื่อมีการสร้างหรืออัปเดตการจองผ่านฟอร์มการจองทรัพยากรที่สามารถจองได้
- กฎการจองไม่มีอยู่ในฟอร์มการจองทรัพยากรที่สามารถจองได้ หากมีการเปิดใช้งานโฟลว์กระบวนการธุรกิจในฟอร์ม
- กฎการจองไม่มีอยู่ในฟังก์ชันการกำหนดใหม่บนบอร์ดตารางงาน
- กฎการจองแบบกำหนดเองแต่ละกฎสามารถส่งคืนข้อผิดพลาด/คำเตือนเพียงรายการเดียวเท่านั้น หากต้องการส่งคืนข้อความหลายรายการ ให้ตั้งค่ากฎการจองแต่ละรายการสำหรับการตรวจสอบความถูกต้องแต่ละครั้ง
สร้างโซลูชัน
ขั้นตอนแรกในการตั้งค่ากฎการจองของคุณคือการสร้างทรัพยากรบนเว็บ JavaScript ที่กำหนดเอง เราขอแนะนำให้คุณสร้างโซลูชันใน CRM เพื่อเพิ่มทรัพยากรบนเว็บ JavaScript ที่กำหนดเองหรือใช้โซลูชันที่มีอยู่ซึ่งคุณอาจมีสำหรับการกำหนดเอง
สร้างโซลูชัน CRM
- จาก การตั้งค่า>โซลูชัน สร้างโซลูชันใหม่สำหรับทรัพยากรบนเว็บ JavaScript ของกฎการจองของคุณ
ภาพหน้าจอต่อไปนี้แสดงโซลูชันที่สร้างขึ้นใหม่ เราขอแนะนำให้โซลูชันของคุณใช้ผู้เผยแพร่ที่ไม่ซ้ำกันแทนที่จะเป็นผู้เผยแพร่เริ่มต้น
- หลังจากสร้างโซลูชันแล้วให้เลือกคอมโพเนนต์ทรัพยากรบนเว็บและสร้างทรัพยากรบนเว็บใหม่
- ในฟอร์มทรัพยากรบนเว็บใหม่ ป้อนข้อมูลต่อไปนี้: ก. ชื่อ b ชื่อที่ใช้แสดง ค. เลือก Script (Jscript) เป็นประเภท
- เลือกตัวเลือกแก้ไขข้อความเพื่อป้อนรหัส JavaScript ของคุณสำหรับกฎการจอง
- เลือก บันทึก เพื่อบันทึกทรัพยากรเว็บของคุณ
- เลือก เผยแพร่ เพื่อให้แน่ใจว่าทรัพยากรเว็บของกฎการจองได้รับการเผยแพร่แล้ว
ตั้งค่ากฎการจอง
จากเมนูหลัก ไปที่ Field service>ทรัพยากร แล้วเลือก กฎการจอง ภายใต้ การตั้งค่าการจอง
เลือก สร้าง เพื่อสร้างกฎการจองใหม่
บนฟอร์มกฎการจอง ให้ป้อนข้อมูลต่อไปนี้: ก. ชื่อ b ทรัพยากรบนเว็บ (เลือกทรัพยากรบนเว็บที่คุณเพิ่งสร้างขึ้น) ค. ป้อนชื่อวิธีการที่คุณกำหนดใน JavaScript ของคุณ
บันทึกกฎการจองของคุณ เมื่อคุณบันทึกกฎการจอง กฎนั้นจะถูกใช้โดยมุมมองรายชั่วโมงของตารางกำหนดการและระบบจัดการกำหนดการหรือฟอร์มเอนทิตี คุณสามารถปิดใช้งานเรกคอร์ดกฎการจองของคุณเพื่อไม่ให้ตารางกำหนดการ ระบบจัดการกำหนดการ หรือฟอร์มเอนทิตีการจองดำเนินการกฎ
หมายเหตุ
กฎการจองในปัจจุบันได้รับการสนับสนุนเฉพาะในมุมมองรายชั่วโมงของตารางกำหนดการและระบบจัดการกำหนดการเท่านั้น กฎการจองยังได้รับการสนับสนุนเมื่อมีการสร้างหรืออัปเดตการจองโดยใช้ฟอร์มการจองทรัพยากรที่สามารถจองได้ กฎการจอง ไม่ ดำเนินการเมื่อลบเรกคอร์ดการจอง กฎการจองไม่ทำงานบนฟอร์มเมื่อใช้การแก้ไขหลายรายการ
สร้างการดำเนินการ CRM
ในส่วนนี้เราจะดูตัวอย่างที่แสดงวิธีที่คุณสามารถใช้การดำเนินการ CRM แบบกำหนดเองเพื่อทำการตรวจสอบความถูกต้องโดยเป็นส่วนหนึ่งของกฎการจอง
เมื่อใช้การดำเนินการ CRM สำหรับการตรวจสอบความถูกต้องของกฎการจอง คุณจะยังคงต้องสร้างทรัพยากรเว็บที่กำหนดเองตามที่กำหนดไว้ข้างต้น JavaScript ที่คุณจะกำหนดในทรัพยากรเว็บที่กำหนดเองของคุณจะเรียกการดำเนินการ CRM ที่กำหนดเอง และประเมินผลจากการดำเนินการ CRM ที่กำหนดเอง ดูเอกสารแนบ A ที่ท้ายเอกสารนี้เพื่อดูตัวอย่างรหัสที่คุณสามารถใช้เพื่อเรียกการดำเนินการ CRM ที่กำหนดเอง
การดำเนินการ CRM ที่กำหนดเองจะต้องถูกสร้างขึ้นใน CRM เราขอแนะนำให้คุณใช้โซลูชัน CRM ที่คุณกำหนดไว้สำหรับทรัพยากรบนเว็บแบบกำหนดเองของคุณเพื่อเพิ่มการดำเนินการ CRM แบบกำหนดเองของคุณ
การดำเนินการ CRM แบบกำหนดเองควรมีพารามิเตอร์ข้อมูลป้อนเข้าและผลลัพธ์ต่อไปนี้ คุณสามารถเพิ่มพารามิเตอร์ข้อมูลป้อนเข้าและผลผลิตเพิ่มเติมได้ตามที่สถานการณ์ต้องการ คุณจะต้องตรวจสอบให้แน่ใจว่า JavaScript ที่คุณกำหนดเพื่อเรียกใช้การดำเนินการ CRM ที่กำหนดเองของคุณได้รับการอัปเดตเพื่อรองรับพารามิเตอร์ข้อมูลป้อนเข้าและผลลัพธ์อื่นๆ ของคุณ
พารามิเตอร์ข้อมูลป้อนเข้า:
- originalScheduleStart - วันที่และเวลา
- originalScheduleEnd - วันที่และเวลา
- originalBookableResource - EntityReference
- originalScheduleSource - ตัวเลือก
- newScheduleStart - วันที่และเวลา
- newScheduleStart - วันที่และเวลา
- isCreate - บูลีน
- isUpdate - บูลีน
พารามิเตอร์ผลผลิต:
- isError - บูลีน
- isWarning - บูลีน
- ข้อความแสดงข้อผิดพลาด – สตริง
- warningMessage - สตริง
ภาพหน้าจอต่อไปนี้แสดงตัวอย่างการดำเนินการ CRM แบบกำหนดเอง ตัวอย่างนี้กำลังตรวจสอบว่า 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 ต่อไปนี้
หมายเหตุ
ไม่ จำเป็นต้องรวมรหัส 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})