แชร์ผ่าน


ตั้งค่ากฎการจอง

กฎการจองใน Field Service สร้างข้อความเตือนหรือข้อผิดพลาดที่ผู้ใช้เห็น เมื่อมีการสร้างหรือการแก้ไขเรกคอร์ดการจองทรัพยากร ที่ขึ้นอยู่กับเงื่อนไขที่กำหนดเอง ตัวอย่างเช่น กฎการจองสามารถสร้างขึ้นเพื่อเตือนผู้ใช้เมื่อพวกเขาพยายามจองใบสั่งงานไปยังทรัพยากรบนบอร์ดกําหนดการที่ไม่มีลักษณะที่จําเป็นสําหรับงาน

กฎการจองเป็นวิธี JavaScript ที่กำหนดเองซึ่งดำเนินการก่อนหน้าเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างหรือแก้ไข วิธี JavaScript สามารถยอมรับพารามิเตอร์ที่มีข้อมูลสำหรับเรกคอร์ดการจองทรัพยากรที่สามารถจองได้ที่สร้างขึ้น และจะต้องส่งคืนออบเจ็กต์ JavaScript ที่มีคุณสมบัติที่จำเป็น

ตั้งค่ากฎการจองเพื่อตรวจสอบการจองเมื่อมีสร้างหรือปรับเปลี่ยน

Note

  • กฎการจองจะพร้อมใช้งานสำหรับมุมมองรายชั่วโมงเท่านั้น ไม่ใช่มุมมองรายวัน รายสัปดาห์ หรือรายเดือนของบอร์ดตารางงานและระบบจัดการกำหนดการ สามารถใช้งานเมื่อมีการสร้างหรืออัปเดตการจองในฟอร์มการจองทรัพยากรที่สามารถจองได้
  • กฎการจองไม่มีอยู่ในฟอร์มการจองทรัพยากรที่สามารถจองได้ หากมีการเปิดใช้งานโฟลว์กระบวนการธุรกิจในฟอร์ม
  • กฎการจองไม่มีอยู่ในฟังก์ชันการกำหนดใหม่บนบอร์ดตารางงาน
  • กฎการจองแบบกําหนดเองแต่ละข้อสามารถส่งคืนข้อผิดพลาดหรือคําเตือนเดียวเท่านั้น หากต้องการส่งคืนข้อความหลายรายการ ให้ตั้งค่ากฎการจองแต่ละรายการสำหรับการตรวจสอบความถูกต้องแต่ละครั้ง

สร้างโซลูชัน

สร้างทรัพยากรบนเว็บ JavaScript แบบกําหนดเอง เราขอแนะนำให้คุณสร้างโซลูชันใน Microsoft Power Apps เพื่อเพิ่มทรัพยากรบนเว็บ JavaScript ที่กำหนดเองหรือใช้โซลูชันที่มีอยู่ซึ่งคุณใช้สำหรับการปรับแต่ง

  1. สร้างโซลูชันใหม่ สําหรับทรัพยากรบนเว็บ JavaScript ของกฎการจองของคุณ เราขอแนะนำให้โซลูชันของคุณใช้ผู้เผยแพร่ที่ไม่ซ้ำกันแทนที่จะเป็นผู้เผยแพร่เริ่มต้น

  2. หลังจากสร้างโซลูชัน สร้างทรัพยากรบนเว็บใหม่

  3. เลือก JavaScript (JS) เป็นชนิด

  4. ป้อนโค้ด JavaScript สําหรับกฎการจองของคุณ

  5. เลือก บันทึก และ เผยแพร่

ตั้งค่ากฎการจอง

  1. ไปยัง Field Service และเลือกพื้นที่ ทรัพยากร

  2. ภายใต้ การตั้งค่าการจอง เลือก กฎการจอง แล้วเลือก ใหม่

    ภาพหน้าจอของกฎการจองใหม่

  3. ใส่ข้อมูลต่อไปนี้:

    • ชื่อของกฎการจอง
    • ทรัพยากรบนเว็บที่คุณเพิ่งสร้างขึ้น
    • ชื่อวิธีการที่คุณกำหนดใน JavaScript ของคุณ
  4. เลือก บันทึก & ปิด กฎการจองมีการใช้โดยมุมมองรายชั่วโมงของบอร์ดตารางงานและระบบจัดการกำหนดการหรือฟอร์มเอนทิตี

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 น.

ภาพหน้าจอการดำเนินการ CRM ที่กำหนดเอง

โค้ดตัวอย่าง

ฟังก์ชัน 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})