Nastavite pravila rezervacije

Pravila rezervacije v Field Service ustvarijo opozorila ali sporočila o napakah, ki jih uporabniki vidijo pri ustvarjanju ali urejanju zapisa rezervacije vira, na podlagi pogojev po meri. Pravilo rezervacije bi bilo na primer lahko ustvarjeno z namenom, da uporabnika opozori, ko poskuša na plošči na načrtovanje rezervirati delovni nalog za vir, ki nima znanja, potrebnega za posel.

Pravila rezervacije so metode po meri JavaScript, ki bodo izvedene pred ustvarjanjem ali urejanjem zapisa rezervacije vira, ki ga je mogoče rezervirati. Metoda JavaScript lahko sprejme parameter, ki bo vseboval podatke za ustvarjeni zapis rezervacije vira, ki ga je mogoče rezervirati, in mora vrniti predmet JavaScript z zahtevanimi lastnostmi.

Nastavite pravila rezervacije za potrditev rezervacije, ko je ustvarjena ali spremenjena.

opomba,

  • Pravila rezervacije so na voljo samo za urni pogled, ne pa za dnevni, tedenski ali mesečni pogled plošče razporeda in pomočnika za razporejanje. Na voljo so tudi, ko je rezervacija ustvarjena ali posodobljena prek obrazca rezervacije vira, ki ga je mogoče rezervirati.
  • Pravila rezervacije na obrazcu rezervacije vira, ki ga je mogoče rezervirati, niso na voljo, če je na obrazcu omogočen potek poslovnega procesa.
  • Pravila rezervacije niso na voljo za funkcijo ponovne dodelitve na plošči razporeda.
  • Vsako pravilo rezervacije po meri lahko vrne samo eno napako/opozorilo. Če želite vrniti več sporočil, nastavite posamezna pravila rezervacije za vsako potrditev.

Ustvarjanje rešitve

Prvi korak pri nastavitvi pravila rezervacije je ustvarjanje spletnega vira JavaScript po meri. Priporočamo, da v CRM ustvarite rešitev za dodajanje lastnega spletnega vira JavaScript po meri ali uporabite obstoječo rešitev, ki je na voljo za prilagajanje.

Ustvarjanje rešitve CRM

  1. V Nastavitve>Rešitve ustvarite novo rešitev za spletne vire JavaScript pravil rezervacije.

Naslednja slika zaslona prikazuje novo ustvarjeno rešitev. Priporočamo, da vaša rešitev namesto privzetega izdajatelja uporablja enoličnega izdajatelja.

Posnetek zaslona pravil rezervacije za Field Service.

  1. Po ustvarjanju rešitve izberite komponento Spletni viri in ustvarite nov spletni vir.
  2. V obrazec novega spletnega vira vnesite naslednje informacije: a. Ime b. Prikazano ime c. Izberite Skript (Jscript) kot vrsto
  3. Izberite možnost urejevalnika besedila, da vnesete kodo JavaScript za pravilo rezervacije.
  4. Izberite Shrani , da shranite svoj spletni vir.
  5. Izberite Objavi , da zagotovite, da je spletni vir pravil rezervacije objavljen.

Posnetek zaslona novega spletnega vira.

Nastavitev pravila rezervacije

  1. V glavnem meniju pojdite na Field Service>Viri in nato izberite Pravila rezervacije pod Nastavitve rezervacije.

    Posnetek zaslona aktivnega seznama pravil rezervacije v Field Service.

  2. Izberite +Novo , da ustvarite novo pravilo rezervacije.

  3. Na obrazec za pravilo rezervacije vnesite te podatke: a. Ime b. Spletni vir (izberite spletni vir, ki ste ga nedavno ustvarili). c. Vnesite ime metode, ki ste jo določili v svojem JavaScript.

    Posnetek zaslona pravil rezervacije.

  4. Shranite pravilo rezervacije. Ko shranite pravilo rezervacije, ga bo uporabil urni pogled plošče razporeda in pomočnika za razporejanje ali obrazec entitete. Zapis pravila rezervacije lahko deaktivirate, da preprečite izvajanje pravila pri plošči razporeda, pomočniku za razporejanje ali obrazcu entitete rezervacije.

opomba,

Pravila rezervacije so trenutno podprta samo v urnem pogledu plošče razporeda in pomočnika za razporejanje. Pravila rezervacije so podprta tudi, ko so rezervacije ustvarjene ali posodobljene zs pomočjo obrazca rezervacije vira, ki ga je mogoče rezervirati. Pravila rezervacije se ne izvršijo ob izbrisu zapisa rezervacije. Pravila rezervacije ne delujejo na obrazcih, ko uporabljate več urejanj.

Ustvarjanje dejanja CRM

V tem razdelku si bomo ogledali primer, ki prikazuje, kako lahko z dejanjem CRM po meri izvedete preverjanje veljavnosti kot del pravila rezervacije.

Ko uporabljate dejanje CRM za preverjanje pravil rezervacije, boste še vedno morali ustvariti spletni vir po meri, kot je definirano zgoraj. JavaScript, ki ga boste definirali v svojem spletnem viru po meri, bo poklical dejanje CRM po meri in ovrednotil rezultate dejanja CRM po meri. Glejte prilogo A na koncu tega dokumenta za vzorčno kodo, ki jo lahko uporabite za priklic dejanja CRM po meri.

V programu CRM boste morali ustvariti dejanje CRM po meri. Priporočamo, da uporabite rešitev CRM, ki ste jo definirali za svoj spletni vir po meri, da dodate svoje dejanje CRM po meri.

Dejanje CRM po meri mora imeti naslednje parametre vnosa in in izhoda. Dodate lahko več vhodnih in izhodnih parametrov, kot zahteva vaš scenarij. Zagotoviti boste morali, da je JavaScript, ki ga definirate za klic dejanja CRM po meri, posodobljen, da podpira vaše druge vhodne in izhodne parametre.

Parametri vnosa:

  • originalScheduleStart – DateTime
  • originalScheduleEnd – DateTime
  • originalBookableResource – EntityReference
  • originalScheduleSource – Picklist
  • newScheduleStart – DateTime
  • newScheduleEnd – DateTime
  • isCreate – Boolean
  • isUpdate – Boolean

Izhodni parametri:

  • isError – Boolean
  • isWarning – Boolean
  • errorMessage – String
  • warningMessage – String

Naslednja slika zaslona prikazuje primer dejanja CRM po meri. Ta vzorec preverja, ali se newBookableResource ujema s prednostnim virom na delovnem nalogu in ali je newScheduleStart notranji časa od obljubljenega in časa do obljubljenega. Predpostavlja se, da so datumi obljubljenega okna za en sam datum. Primer: Čas od zagotovitve: 1. 1. 2016 8:00/Čas do zagotovitve: 1. 1. 2016 12:00.

Posnetek zaslona dejanja CRM po meri.

Vzorčna koda

Funkcija JavaScript, ki ste jo ustvarili, lahko sprejme en parameter, ki velja za kontekst rezervacije. Posredovan parameter konteksta rezervacije ni* tipičen kontekst CRM, ki se uporablja pri skriptnem izvajanju na strani odjemalca.

Parameter konteksta rezervacije bo imel naslednjo definicijo JavaScript.

opomba,

Te ni potrebno vključiti to kodo JavaScript v spletni vir po meri za pravilo rezervacije.

Možne vrednosti za ResourceScheduleSource so iz globalnega vira razporeda virov nabor možnosti. To lastnost lahko uporabite, če želite vedeti, ali pravilo rezervacije sproži plošča razporeda ali pomočnik za razporejanje.

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

Vaša metoda potrjevanja mora vrniti predmet JavaScript z naslednjo definicijo.

opomba,

Te ni potrebno vključiti to kodo JavaScript v spletni vir po meri za pravilo rezervacije.

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

Primer definicije funkcije JavaScript. Naslednja koda JavaScript je edina koda JavaScript, ki jo boste morali vključiti v svoj spletni vir po meri.


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

Naslednji JavaScript lahko uporabite za klic dejanja CRM po meri, ki ima enake parametre vnosa in izhoda kot prejšnji vzorec.

V zapisu pravila rezervacije Ime metode mora biti: MSFSAENG.ScheduleBoard.Validate. Za referenco si oglejte posnetek zaslona v razdelku »Nastavitev pravila rezervacije« tega članka.


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

Dodatne opombe

Rezervacija vira, ki ga je mogoče rezervirati, je omogočena za uporabo pravil rezervacije za ustvarjanje opozoril ali sporočil o napakah, ki jih uporabniki vidijo pri ustvarjanju ali urejanju zapisa rezervacije vira, na podlagi pogojev po meri. Sistem uporablja preventDefault pravila rezervacije. Zato tokov poslovnih procesov in drugih skriptov po meri, povezanih z dogodkom onSave, ni mogoče uporabiti v entiteti rezervacije vira, ki ga je mogoče rezervirati, z omogočenimi pravili rezervacije.

Vendar pa lahko obdelavo pravil rezervacije onemogočite ob shranjevanju obrazca rezervacije tako, da omogočite spodnjo nastavitev, ki uporabnikom omogoča uporabo potekov poslovnega procesa. Z uporabo API-jev na strani odjemalca lahko to nastavitev omogočite na ravni okolja.

Preberite trenutno vrednost nastavitve msdyn_DisableProcessBookingRulesOnSaveBookingForm.

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

Omogoči nastavitev msdyn_DisableProcessBookingRulesOnSaveBookingForm.

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

Onemogoči nastavitev **msdyn_DisableProcessBookingRulesOnSaveBookingForm**.

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