Jaa


Varaussääntöjen määrittäminen

Field Servicen varaussäännöt luovat varoitus- tai virhesanomat, jotka käyttäjät näkevät resurssin varauksen tietueen luomisen tai muokkaamisen yhteydessä mukautettujen ehtojen perusteella. Esimerkiksi varaussääntö voidaan luoda varoittamaan käyttäjää, kun he yrittävät kirjata työtilauksen aikataulutaulukon resurssille, jolla ei ole haluttuja työn edellyttämiä taitoja.

Varaussäännöt ovat mukautettuja JavaScript-menetelmiä, jotka suoritetaan ennen varattavissa olevan resurssin varaustietueen luomista tai muokkausta. JavaScript-menetelmä voi hyväksyä parametrin, joka sisältää tiedot luotavaa Varattavan resurssin varaus -tietuetta varten, ja sen on palautettava JavaScript-kohde vaadituilla ominaisuuksilla.

Määritä varaussäännöt vahvistamaan varaus, kun se luodaan tai sitä muokataan.

Muistiinpano

  • Varaussäännöt ovat käytettävissä vain tuntinäkymässä, eivät aikataulutaulukon ja ajoitusavustajan päivä-, viikko ja kuukausinäkymissä. Ne ovat käytettävissä myös silloin, kun varaus luodaan tai päivitetään varattavissa olevan resurssin varauslomakkeen kautta.
  • Varaussäännöt eivät ole käytettävissä varattavissa olevan resurssin varauslomakkeessa, jos liiketoimintaprosessi otettu käyttöön lomakkeessa.
  • Varaussäännöt eivät ole käytettävissä aikataulutaulukossa uudelleensijaustoiminnosta.
  • Jokainen mukautettu varaussääntö voi palauttaa vain yhden virheen/varoituksen. Jos haluat palauttaa useita viestejä, määritä yksittäiset varaussäännöt kullekin vahvistukselle.

Ratkaisun luominen

Varaussäännön ensimmäinen vaihe on mukautetun JavaScript-verkkoresurssin luominen. Ratkaisu kannattaa luoda CRM:ssä siten, että mukautettu JavaScript-verkkoresurssi lisätään tai että käytetään mahdollisia mukautuksia varten aiemmin luotua ratkaisua.

CRM-ratkaisun luominen

  1. Luo uusi varaussäännön JavaScript-verkkoresurssien ratkaisu valitsemalla Asetukset>Ratkaisut.

Seuraavassa näyttökuvassa on juuri luotu ratkaisu. Ratkaisun kannattaa käyttää yksilöivää julkaisijaa eikä oletusjulkaisijaa.

Näyttökuva Field Servicen varaussäännöistä

  1. Kun ratkaisu on luotu, valitse Verkkoresurssit-komponentti ja luo uusi verkkoresurssi.
  2. Anna uuden verkkoresurssin lomakkeessa seuraavat tiedot: a. Nimi b. Näyttönimi c. Valitse tyypiksi Komentosarja (JScript).
  3. Valitse tekstieditorivaihtoehto varaussäännön JavaScript-koodin antamista varten.
  4. Tallenna verkkoresurssi valitsemalla Tallenna.
  5. Varmista varaussäännön verkkoresurssin julkaisu valitsemalla Julkaise.

Näyttökuva uudesta verkkoresurssista

Varaussäännön määrittäminen

  1. Valitse päävalikossa ensin Field Service>Resurssit ja sitten VaraussäännötVarausasetukset-kohdassa.

    Näyttökuva Field Servicen aktiivisten varaussääntöjen luettelosta

  2. Luo uusi varaussääntö valitsemalla +Uusi.

  3. Anna seuraavat tiedot varaussääntölomakkeessa: a. Nimi b. Verkkoresurssi (valitse äskettäin luotu verkkoresurssi). c. Anna JavaScript-koodissa määritetty menetelmän nimi.

    Näyttökuva varaussäännöistä.

  4. Tallenna varaussääntö. Kun tallennat varaussäännön, sitä käytetään aikataulutaulukon ja ajoitusavustajan tai entiteettilomakkeen tuntinäkymässä. Voit poistaa varaussääntötietueen aktivoinnin, jos haluat, että aikataulutaulukossa, ajoitusavustajassa tai varausentiteettilomakkeessa ei käytetä sääntöä.

Muistiinpano

Varaussääntöjä tuetaan tällä hetkellä vain aikataulutaulukon ja ajoitusavustajan tuntinäkymässä. Varaussääntöjä tuetaan myös silloin, kun varaukset luodaan tai päivitetään varattavissa olevassa resurssin varauslomakkeessa. Varaussääntöjä ei suoriteta, kun varaustietue poistetaan. Varaussäännöt eivät toimi lomakkeissa käytettäessä monimuokkausta.

Luo CRM-toiminto

Tässä osalla käsitellään esimerkkiä, jossa mukautettu CRM-toiminto suorittaa tarkistuksen varaussäännön osana.

Jos käytät CRM-toimintoa varaussäännön vahvistuksessa, sinun täytyy silti luoda mukautettu verkkoresurssi edellä kuvatulla tavalla. Mukautetussa verkkoresurssissa määrittämäsi JavaScript kutsuu mukautettua CRM-toimintoa ja arvioi mukautetun CRM-toiminnon tulokset. Tämän asiakirjan lopun Liitteessä A on mallikoodi, jolla voi kutsua mukautettua CRM-toimintoa.

Mukautettu CRM-toiminto on luotava CRM:ssä. Suosittelemme, että käytät mukautetun CRM-toimintosi lisäämiseen mukautetulle verkkoresurssillesi määrittämääsi CRM-ratkaisua.

Mukautetulla CRM-toiminnolla on oltava seuraavat syöte-ja tulosparametrit. Voit lisätä muita syöte- ja tulosparametreja skenaariosi tarpeiden mukaan. Sinun täytyy varmistaa, että JavaScript, jonka määritit kutsumaan mukautettua CRM-toimintoasi, on päivitetty tukemaan muita syöte- ja -tulosparametrejasi.

Syöteparametrit:

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

Tulosparametrit:

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

Seuraavassa näyttökuvassa on esimerkki mukautetusta CRM-toiminnosta. Tämä esimerkki tarkistaa, vastaako newBookableResource työtilauksessa olevaa ensisijaista resurssia ja onko newScheduleStart parametrien Aika luvatusta ja Aika luvattuun arvojen mukainen. Luvatun ajanjakson päivämäärät oletetaan olevan yhdelle päivämäärälle. Esimerkki: Aika luvatusta: 1.1.2016 klo 8.00 / Aika luvattuun: 1.1.2016 klo 12.00

Näyttökuva mukautetusta CRM-toiminnosta

Näytekoodi

Luotu JavaScript-funktio hyväksyy yhden parametrin, joka katsotaan varauskontekstiksi. Lähetetty varauskontekstin parametri ei ole tyypillinen asiakaspuolen komentosarjoissa käytettävä CRM-konteksti.

Varauksen kontekstirakenne:

export type BookingRuleContext = {
    oldValues: BookingRuleBookingRecord;
    newValues: BookingRuleBookingRecord;
    isCreate: boolean;
    isUpdate: boolean;
};
 
export type BookingRuleBookingRecord = {
    ResourceRequirementId?: string;
    ResourceId?: string;
    StartTime?: Date;
    EndTime?: Date;
    ResourceScheduleSource?: string;
};

Varauksen kontekstiparametrissa on seuraava JavaScript-määritys.

Muistiinpano

Tätä JavaScript-koodia ei ole välttämätöntä sisällyttää varaussäännön mukautettuun verkkoresurssiin.

ResourceScheduleSource-parametrin mahdolliset arvot ovat peräisin yleisestä resurssin aikataulun lähteen asetusjoukosta. Voit käyttää tätä ominaisuutta, jos haluat tietää, käynnistetäänkö varaussääntö aikataulutaulukosta vai ajoitusavustajasta.

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

Vahvistusmenetelmän on palautettava JavaScript-objekti, jolla on seuraava määritys.

Muistiinpano

Tätä JavaScript-koodia ei ole välttämätöntä sisällyttää varaussäännön mukautettuun verkkoresurssiin.

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

Esimerkki JavaScript-toiminnon määrityksestä. Seuraava JavaScript-koodi on ainoa JavaScript-koodi joka on sisällytettävä mukautettuun verkkoresurssiin.


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

Seuraavalla JavaScript-koodilla voidaan kutsua mukautettu CRM-toiminto, jolla on samat syöte- ja tulosparametrit kuin edellisellä esimerkillä.

Varaussäännöntietueen Menetelmän nimi -arvona on oltava MSFSAENG.ScheduleBoard.Validate. Lisätietoja on tämän artikkelin näyttökuvassa Varaussäännön määrittäminen -osassa.


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

Muuta huomioitavaa

Varattavissa olevan resurssin varaus voi käyttää varaussääntöjä luodakseen varoitus- tai virhesanomia, jotka käyttäjät näkevät resurssin varauksen tietueen luomisen tai muokkaamisen yhteydessä mukautettujen ehtojen perusteella. Järjestelmä käyttää preventDefault-tapahtumaa varaussäännöissä. Tämän vuoksi liiketoimintaprosessia tai muita onSave-tapahtumaan sidottuja mukautettuja komentosarjoja ei voi käyttää varattavissa olevan resurssin varausentiteetissä, kun varaussäännöt ovat käytössä.

Varaussääntöjen käsittelyn voi kuitenkin poistaa käytöstä varauslomakkeen tallentamisen yhteydessä ottamalla käyttöön alla olevan asetuksen, jolloin käyttäjät voivat käyttää liiketoimintaprosessia. Asiakaspuolen ohjelmointirajapintojen avulla tämä asetus voidaan ottaa käyttöön ympäristötasolla.

Lue asetuksen msdyn_DisableProcessBookingRulesOnSaveBookingForm nykyinen arvo.

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

Ota asetus msdyn_DisableProcessBookingRulesOnSaveBookingForm käyttöön.

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

Poista asetus **msdyn_DisableProcessBookingRulesOnSaveBookingForm** käytöstä.

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