Kopīgot, izmantojot


Rezervācijas noteikumu iestatīšana

Rezervēšanas kārtulas pakalpojumā Field Service izveido brīdinājumus vai kļūdu ziņojumus, ko lietotāji redz, izveidojot vai rediģējot resursu rezervācijas ierakstu, pamatojoties uz pielāgotiem nosacījumiem. Piemēram, rezervēšanas noteikumu var izvaidot, lai brīdinātu lietotāju, kad tas mēģina rezervēt darba pasūtījumu plānošanas panelī resursam, kam nav darbam vajadzīgās prasmes.

Rezervāciju kārtulas ir pielāgotas JavaScript metodes, kas tiks izpildītas, pirms tiek izveidots vai rediģēts rezervējamā resursa rezervācijas ieraksts. JavaScript metode var pieņemt parametru, kurā ir informācija par izveidojamo Rezervējamā resursa rezervācijas ierakstu, un tai jānosūta atpakaļ JavaScript objekts ar nepieciešamajiem rekvizītiem.

Iestatiet rezervējuma noteikumus, lai apstiprinātu rezervāciju, kad tā tiek izveidota vai modificēta.

Piezīmes

  • Rezervācijas kārtulas ir pieejamas tikai plānošanas paneļa un plānošanas asistenta stundas skatam, bet ne ikdienas, iknedēļas vai ikmēneša skatiem. Tās ir pieejamas arī tad, ja tiek izveidota vai atjaunināta rezervācija, izmantojot rezervējamu resursu rezervācijas veidlapu.
  • Rezervācijas kārtulas nav pieejamas rezervējamā resursa rezervācijas veidlapā, ja tām veidlapā ir iespējota biznesa procesu plūsma.
  • Rezervācijas kārtulas nav pieejamas plānošanas paneļa atkārtotas piešķires funkcionalitātē.
  • Katrs pielāgotais rezervēšanas noteikums var atgriezt tikai vienu kļūdu/brīdinājumu. Lai atgrieztu vairākus ziņojumus, iestatiet individuālus rezervēšanas noteikumus katrai validācijai.

Risinājuma izveide

Pirmā darbība, kas jāveic, lai iestatītu rezervācijas kārtulu, ir izveidot pielāgotu JavaScript tīmekļa resursu. Ieteicams sistēmā CRM izveidot risinājumu, ko pievienot jūsu pielāgotajam JavaScript tīmekļa resursam, vai pielāgojumiem izmantot jau esošu risinājumu.

CRM risinājuma izveide

  1. Izmantojot iestatījumu>risinājumus, izveidojiet jaunu risinājumu savam rezervēšanas kārtulam JavaScript tīmekļa resursi.

Nākamajā ekrānuzņēmumā ir parādīts tikko izveidots risinājums. Ieteicams risinājumā izmantot unikālu izstrādātāju, nevis noklusējuma izstrādātāju.

Ekrānuzņēmums, kurā redzami Field Service rezervēšanas noteikumi.

  1. Pēc risinājuma izveides atlasiet komponentu Tīmekļa resursi un izveidojiet jaunu tīmekļa resursu.
  2. Jaunā tīmekļa resursa veidlapā ievadiet tālāk norādīto informāciju: a. Nosaukums b. Parādāmais vārds c. Atlasiet Skripts (Jscript) kā tipu
  3. Atlasiet teksta redaktora opciju, lai rezervācijas kārtulai ievadītu JavaScript kodu.
  4. Atlasiet Saglabāt , lai saglabātu tīmekļa resursu.
  5. Atlasiet Publicēt , lai pārliecinātos, vai rezervācijas kārtulas tīmekļa resurss ir publicēts.

Jauna tīmekļa resursa ekrānuzņēmums.

Rezervācijas noteikuma iestatīšana

  1. Galvenajā izvēlnē dodieties uz Field Service>Resources un pēc tam rezervācijas iestatījumu sadaļā izvēlieties Rezervācijas noteikumi.

    Ekrānuzņēmums, kurā redzams aktīvo rezervēšanas noteikumu saraksts programmā Field Service.

  2. Atlasiet + jauns , lai izveidotu jaunu rezervācijas kārtulu.

  3. No veidlapas Rezervāciju kārtula ievadiet šādu informāciju: a. Nosaukums b. Tīmekļa resurss (atlasiet nesen izveidoto tīmekļa resursu). c. Ievadiet metodes nosaukumu, ko definējāt savā JavaScript.

    Rezervācijas noteikumu ekrānuzņēmums.

  4. Saglabājiet savu rezervācijas kārtulu. Pēc rezervācijas kārtulas saglabāšanas tā tiks izmantota plānošanas paneļa un plānošanas palīga stundas skatā vai entītijas veidlapā. Varat deaktivizēt rezervācijas kārtulas ierakstu, lai plānošanas panelis, plānošanas palīgs vai rezervācijas entītijas veidlapa neizpildītu kārtulu.

Piezīmes

Pašlaik rezervācijas kārtulas tiek atbalstītas tikai plānošanas paneļa un plānošanas palīga stundas skatā. Rezervācijas kārtulas tiek atbalstītas arī tad, ja rezervācijas tiek izveidotas vai atjauninātas, izmantojot rezervējamo resursu rezervācijas veidlapu. Rezervācijas noteikumi netiek izpildīti, dzēšot rezervācijas ierakstu. Rezervēšanas noteikumi nedarbojas veidlapās, izmantojot vairākrediģēšanu.

CRM darbības izveide

Šajā sadaļā tiks parādīts piemērs tam, kā var izmantot pielāgotu CRM darbību, lai veiktu validēšanu rezervācijas kārtulas ietvaros.

Izmantojot CRM darbību rezervācijas nosacījumu validācijai, jums joprojām būs jāizveido pielāgots tīmekļa resurss, kā definēts iepriekš. JavaScript, ko definēsit savā pielāgotajā tīmekļa resursā, izsauks pielāgoto CRM darbību un novērtēs pielāgotās CRM darbības rezultātus. Šī dokumenta beigās, pielikumā A skatiet parauga kodu, ko var izmantot, lai izsauktu pielāgotu CRM darbību.

CRM sistēmā būs jāizveido pielāgota CRM darbība. Mēs iesakām izmantot CRM risinājumu, ko esat definējis savam pielāgotajam tīmekļa resursam, lai pievienotu savu pielāgoto CRM darbību.

Pielāgotajai CRM darbībai ir jābūt šādiem ievades un izvades parametriem. Varat pievienot papildu ievades un izvades parametrus atbilstoši scenārija prasībām. Jums būs jānodrošina, ka JavaScript, ko definējat, lai izsauktu savu pielāgoto CRM darbību, tiek atjaunināts, lai atbalstītu citus ievades un izvades parametrus.

Ievades parametri:

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

Izvades parametri:

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

Šajā ekrānuzņēmumā ir redzams pielāgotas CRM darbības piemērs. Šajā paraugā tiek pārbaudīts , vai jaunaisBookableResource atbilst vēlamajam resursam darba pasūtījums un vai jaunaisScheduleStart atrodas laikā no solītā un laika līdz solītajam. Tiek pieņemts, ka solītā loga datumi ir paredzēti vienam datumam. Piemērs: Laiks no solītā: 01.01.2016., 8.00 / Laiks līdz solītajam: 01.01.2016., 12.00.

Pielāgotas CRM darbības ekrānuzņēmums.

Koda paraugs

Jūsu izveidotā JavaScript funkcija var akceptēt vienu parametru, kas tiek uzskatīts par rezervācijas kontekstu. Nokārtotais rezervācijas konteksta parametrs nav tipisks CRM konteksts, kas tiek izmantots klienta puses skriptēšanā.

Rezervācijas konteksta shēma:

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

Rezervācijas konteksta parametram būs šāda JavaScript definīcija.

Piezīmes

Šis JavaScript kods nav jāiekļauj rezervācijas kārtulas pielāgotajā tīmekļa resursā.

ResourceScheduleSource iespējamās vērtības ir no resursu grafika avota globālās opciju kopa. Varat izmantot šo rekvizītu, lai zinātu, vai rezervācijas kārtula tiek aktivizēta no plānošanas paneļa vai plānošanas palīga.

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

Validācijas metodei ir jāatgriež JavaScript objekts ar šādu definīciju.

Piezīmes

Šis JavaScript kods nav jāiekļauj rezervācijas kārtulas pielāgotajā tīmekļa resursā.

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

JavaScript funkcijas definīcijas piemērs. Tālāk norādītais JavaScript kods ir vienīgais JavaScript kods, kas jāiekļauj jūsu pielāgotajā tīmekļa resursā.


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

Šo JavaScript var izmantot, lai izsauktu pielāgotu CRM darbību, kam ir tādi paši ievades un izvades parametri kā iepriekš iepriekšējam paraugam.

Rezervācijas noteikuma ierakstā metodes nosaukumam jābūt: MSFSAENG. ScheduleBoard.Validate. Norādes skatiet ekrānuzņēmumā šī raksta sadaļā “Rezervācijas kārtulas iestatīšana”.


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

Papildu piezīmes

Rezervējamā resursa rezervēšanai ir iespējota rezervēšanas kārtulu izmantošana, lai izveidotu brīdinājumus vai kļūdu ziņojumus, ko lietotāji redz, izveidojot vai rediģējot resursu rezervācijas ierakstu, pamatojoties uz pielāgotiem nosacījumiem. Sistēma tiek izmantota preventDefault rezervēšanas noteikumos. Tāpēc biznesa procesa plūsmas un citus pielāgotus skriptus, kas saistīti ar notikumu, onSavenevar izmantot rezervējamo resursu rezervēšanas entītijā, kurā ir iespējotas rezervēšanas kārtulas.

Tomēr rezervācijas kārtulu apstrāde var tikt atspējota, saglabājot rezervācijas veidlapu, ja tiek iespējots tālāk esošais iestatījums, kas lietotājiem ļautu izmantot biznesa procesa plūsmas. Var izmantot klienta puses API, lai šo iestatījumu iespējotu vides līmenī.

Nolasiet pašreizējo iestatījuma msdyn_DisableProcessBookingRulesOnSaveBookingForm vērtību.

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

Iespējojiet iestatījumu msdyn_DisableProcessBookingRulesOnSaveBookingForm.

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

Atspējojiet iestatījumu **msdyn_DisableProcessBookingRulesOnSaveBookingForm**.

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