Broneerimisreeglite seadistamine

Field Service’i broneerimisreeglid loovad hoiatus- või tõrketeated, mida kasutajad näevad ressursi broneerimiskirje loomisel või redigeerimisel kohandatud tingimuste alusel. Näiteks saab reserveeringureegli luua selleks, et hoiatada kasutajat, kui ta püüab reserveerida töökäsu ajakavapaneelil ressursile, kellel pole selle töö jaoks nõutavaid oskusi.

Broneerimisreeglid on kohandatud JavaScripti meetodid, mida käitatakse enne broneeritava ressursi broneeringukirje loomist või redigeerimist. JavaScripti meetod võib aktsepteerida parameetri, mis sisaldab broneeritud ressursi broneeringukirje teavet, ja peab tagastama JavaScripti objekti koos nõutavate atribuutidega.

Seadistage broneerimisreeglid, et kinnitada broneering selle loomisel või muutmisel.

Märkus.

  • Broneerimisreeglid on saadaval ainult tunnivaates, mitte ajakavapaneeli ega ajakavaabilise päeva-, nädala- või kuuvaates. Need on saadaval ka broneeringu loomisel või värskendamisel broneeritatava ressursi broneerimisvormi kaudu.
  • Broneerimisreeglid pole broneeritava ressursi broneerimisvormil saadaval, kui selle äriprotsessi voog on vormil lubatud.
  • Broneerimisreeglid pole ajakavapaneeli ümbermääramise funktsionaalsuses saadaval.
  • Iga kohandatud broneerimisreegel saab tagastada ainult ühe tõrke/hoiatuse. Mitme sõnumi tagastamiseks seadistage iga valideerimise jaoks individuaalsed broneerimisreeglid.

Lahenduse loomine

Esimene samm teie broneeringu reegli seadistamisel on luua kohandatud JavaScripti veebiressurss. Soovitame luua lahenduse CRM-is, et lisada oma kohandatud JavaScripti veebiressurss, või kasutada olemasolevat lahendust, mis on teil kohandamise jaoks olemas.

CRM-i lahenduse loomine

  1. Looge seadete lahendustest> uus lahendus oma broneerimisreegli JavaScripti veebiressurssidele.

Järgmisel kuvatõmmisel on näidatud äsja loodud lahendus. Soovitame kasutada oma lahehendusega kasutada vaikimisi avaldaja asemel ainulaadset avaldajat.

Field Service’i broneerimisreeglite kuvatõmmis.

  1. Pärast lahenduse loomist valige veebiressursside komponent ja looge uus veebiressurss.
  2. Sisestage uuel veebiressursi vormil järgmine teave: a. Nimi b. Kuvatav nimetus c. Valige tüübiks Skript (Jscript)
  3. Valige tekstiredaktori suvand, et sisestada broneeringu reegli jaoks oma JavaScripti kood.
  4. Veebiressursi salvestamiseks valige Salvesta .
  5. Valige Avalda , et veenduda, kas broneerimisreegli veebiressurss on avaldatud.

Uue veebiressursi kuvatõmmis.

Broneerimisreegli seadistamine

  1. Minge põhimenüüs jaotisse Field Service’i>ressursid ja seejärel valige jaotises Booking Settings (Broneerimisseaded) suvand Booking Rules ( Broneerimisreeglid ).

    Field Service’i aktiivsete broneerimisreeglite loendi kuvatõmmis.

  2. Valige +Uus , et luua uus broneerimisreegel.

  3. Sisestage broneeringureegli vormil järgmine teave: a. Nimi b. Veebiressurss (valige veebiressurss, mille hiljuti lõite). c. Sisestage oma JavaScriptis määratletud meetodi nimi.

    Broneerimisreeglite kuvatõmmis.

  4. Salvestage broneerimisreegel. Kui olete broneerimisreegli salvestanud, kasutab seda ajakavapaneeli ja ajakavaabilise või olemi vormi tunnivaade. Kui soovite, et ajakavapaneeli, ajakavaabilise või broneerimisolemi vormi täitmine püsiks, saate broneerimise olemi kirje desaktiveerida.

Märkus.

Broneerimisreeglid on praegu toetatud ainult ajakavapaneeli ja ajakavaabilise tunnivaates. Broneerimisreeglid on toetatud ka juhul, kui broneeringud luuakse või värskendatakse broneeritatava ressursi broneerimisvormi abil. Broneerimisreegleid ei rakendata broneeringukirje kustutamisel. Broneerimisreeglid ei tööta vormidel, kui kasutate mitut redigeerimist.

CRM-i loomise toiming

Selles jaotises vaatleme näidet, mis näitab, kuidas saate kasutada kohandatud CRM-i toiminguid, et teostada valideerimist osana broneeringu reeglist.

Kui kasutate CRM-i toimingut broneerimisreegli valideerimiseks, peate siiski looma kohandatud veebiressursi, nagu eespool määratletud. JavaScript, mille oma kohandatud veebiressursis määratlete, kutsub kohandatud CRM-i toimingut ja hindab kohandatud CRM-i toimingu tulemusi. Vaadake selle dokumendi lõpus olevast manusest A näidiskoodi, mille abil saate kutsuda kohandatud CRM-i toimingu.

Kohandatud CRM-i toiming tuleb luua CRM-is. Soovitame kohandatud CRM-i toimingu lisamiseks kasutada kohandatud veebiressursi jaoks määratletud CRM-i lahendust.

Kohandatud CRM-i toimingul peaksid olema järgmised sisend- ja väljundparameetrid. Saate lisada rohkem sisend- ja väljundparameetreid, kui teie stsenaarium seda nõuab. Peate tagama, et JavaScripti, mille määratlete kohandatud CRM-i toimingu kutsumiseks, värskendatakse, et see toetaks teie teisi sisend- ja väljundparameetreid.

Sisendparameetrid:

  • originalScheduleStart – DateTime
  • originalScheduleEnd – DateTime
  • originalBookableResource – EntityReference
  • originalScheduleSource – märkeloend
  • newScheduleStart – DateTime
  • newScheduleEnd – DateTime
  • isCreate – loogika
  • isUpdate – loogika

Väljundparameetrid

  • isError – loogika
  • isWarning – loogika
  • errorMessage – string
  • warningMessage - string

Järgmisel kuvatõmmisel on kujutatud kohandatud CRM-i toimingu näide. See näidis kontrollib, kas uusBookableResource vastab töökäsu eelistatud ressursile ja kas newScheduleStart on lubatud ja lubatud aja sees. Eeldatakse, et lubatud akna kuupäevad on ühe kuupäeva kohta. Näide: aeg alates lubatust: 01.01.2016 8.00 / aeg kuni lubatuni: 01.01.2016 12.00.

Kohandatud CRM-i toimingu kuvatõmmis.

Näidiskood

Teie loodud JavaScripti funktsioon võib aktsepteerida ühe parameetri, mida loetakse broneeringu kontekstiks. Broneeringu konteksti parameeter läbitud ei ole* tüüpiline CRM-i kontekst, mida kasutatakse kliendipoolses skriptimises.

Broneeringukonteksti parameetril on järgmine JavaScripti määratlus.

Märkus.

Seda JavaScripti koodi pole vaja broneerimisreegli kohandatud veebiressurssi lisada.

Atribuudi ResourceScheduleSource võimalikud väärtused pärinevad ressursigraafiku allika globaalsest suvandikomplekt. Seda atribuuti saate kasutada selleks, et teada saada, kas broneerimisreegel käivitatakse ajakavapaneelilt või ajakavaabilisest.

    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
    };

Teie valideerimismeetod peab tagastama järgmise määratlusega JavaScripti objekti.

Märkus.

Seda JavaScripti koodi pole vaja broneerimisreegli kohandatud veebiressurssi lisada.

    var ruleResult = {
    IsValid: false,
    Message: "Some Message Here",
    Type: "error" // this can be either "error" or "warning"
};

JavaScripti funktsiooni määratluse näide. Järgmine JavaScripti kood on ainus JavaScripti kood, mille peate oma kohandatud veebiressurssi lisama.


    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;
    }

Järgmist JavaScripti saab kasutada selleks, et kutsuda kohandatud CRM-i toimingut, millel on eelmise prooviga samad sisend- ja väljundparameetrid.

Broneerimisreegli kirjel peab meetodi nimi olema: MSFSAENG. ScheduleBoard.Validate. Viitamiseks vaadake kuvatõmmist käesoleva artikli jaotises „Broneeringu reegli häälestamine”.


    /// <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 = {}));

Lisamärkused

Broneeritava ressursi broneerimisel on lubatud kasutada broneerimisreegleid, et luua hoiatusi või tõrketeateid, mida kasutajad näevad kohandatud tingimustel ressursi broneerimiskirje loomisel või redigeerimisel. Süsteem kasutab preventDefault broneerimisreeglites. Seetõttu ei saa sündmusega onSaveseotud äriprotsessi voogusid ja muid kohandatud skripte kasutada broneeritava ressursi broneerimisolemis, kui broneerimisreeglid on lubatud.

Broneerimisreeglite töötlemise saab aga reserveerimisvormi salvestamisel keelata, lubades alloleva sätte, mis võimaldab kasutajatel äriprotsessi voogusid kasutada. Kliendipoolseid API-sid saab kasutada selle sätte lubamiseks keskkonna tasemel.

Lugege sätte msdyn_DisableProcessBookingRulesOnSaveBookingForm praegust väärtust.

Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]

Lubage säte msdyn_DisableProcessBookingRulesOnSaveBookingForm.

Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})

Keela säte **msdyn_DisableProcessBookingRulesOnSaveBookingForm**.

Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})