Бөлісу құралы:


Брондау ережелерін орнатыңыз

Field Service қызметіндегі брондау ережелері пайдаланушылар реттелетін шарттар негізінде ресурсты брондау жазбасын жасау немесе өңдеу кезінде көретін ескерту немесе қате туралы хабарларды жасайды. Мысалы, кесте тақтасында тапсырма үшін қажетті дағдылары жоқ ресурсқа жұмыс тапсырысын тіркеу әрекетін орындаған кезде пайдаланушыны ескертетін тіркеу ережесін жасауға болады.

Тапсырыс беру ережелері - "Тапсырыс беруге болатын ресурс тапсырысы" жазбасы жасалғанға немесе өңделгенге дейін орындалатын реттелетін JavaScript әдістері. JavaScript әдісі жасалатын "Тапсырыс беруге болатын ресурс тапсырысы" жазбасы туралы ақпаратты қамтитын параметрді қабылдай алады және JavaScript нысанын қажетті сипаттармен бірге қайтаруы керек.

Брондау жасалған немесе өзгертілген кезде оны растау үшін брондау ережелерін орнатыңыз.

Ескертпе

  • Тапсырыс беру ережелері кесте тақтасы мен кесте көмекшісінің күнделікті, апта сайынғы немесе айлық көріністерінде емес, тек сағаттық көрінісі үшін қолжетімді. Олар сондай-ақ тапсырыс берудің ресурстық тапсырыс беру формасы арқылы тапсырыс берілген немесе жаңартылған кезде қолжетімді.
  • Тапсырыс беру ережелері тапсырыс беруге болатын ресурстарға тапсырыс беру формасында қолжетімді болмайды (егер ол формада Бизнес процесінің ағыны қосылған болса).
  • Тапсырыс беру ережелері кесте тақтасындағы қайта тағайындау функциясында қолжетімді емес.
  • Әрбір реттелетін брондау ережесі тек бір қатені/ескертуді қайтара алады. Бірнеше хабарды қайтару үшін әрбір тексеру үшін жеке брондау ережелерін орнатыңыз.

Шешім жасау

Тапсырыс беру ережесін орнатудың алғашқы қадамы — реттелетін JavaScript веб-ресурсын жасау. Реттелетін JavaScript веб-ресурсын қосу немесе теңшелімдер үшін бұрыннан бар шешімді пайдалану үшін CRM ішінде шешім жасауды ұсынамыз.

CRM шешімін жасау

  1. Параметрлер>Шешімдер бөлімінен JavaScript веб-ресурстарын брондау ережесі үшін жаңа шешім жасаңыз.

Келесі скриншотта жаңадан жасалған шешім көрсетіледі. Шешіміңіздің әдепкі жариялаушыдан гөрі бірегей жариялаушыны пайдалануын ұсынамыз.

Field Service үшін брондау ережелерінің скриншоты.

  1. Шешімді жасағаннан кейін, "Веб-ресурстар" құрамдасын басып, жаңа веб-ресурсты жасаңыз.
  2. Жаңа веб-ресурс пішінінде келесі мәліметтерді енгізіңіз: a. Атауы b. с атауын көрсетіңіз. Түр ретінде Script (Jscript) таңдаңыз
  3. Тапсырыс беру ережесі үшін JavaScript кодын енгізу үшін мәтін өңдегіші түймешігін басыңыз.
  4. Веб-ресурсты сақтау үшін Сақтау таңдаңыз.
  5. Брондау ережесінің веб-ресурсы жарияланғанына көз жеткізу үшін Жариялау таңдаңыз.

Жаңа веб-ресурстың скриншоты.

Тапсырыс беру ережесін реттеу

  1. Негізгі мәзірден Field Service>Ресурстар тармағына өтіп, Брондау ережелері тармағын таңдаңыз. Брондау параметрлері астында.

    Field Service қызметіндегі белсенді брондау ережелері тізімінің скриншоты.

  2. Жаңа брондау ережесін жасау үшін +Жаңа таңдаңыз.

  3. Тапсырыс беру ережесі пішінінен төмендегі мәліметтерді енгізіңіз: a. Атауы b. Веб-ресурс (Жақын арада жасаған веб-ресурсты таңдаңыз). c. JavaScript тілінде анықталған әдіс атауын енгізіңіз.

    Брондау ережелерінің скриншоты.

  4. Тапсырыс беру ережесін сақтаңыз. Тапсырыс беру ережесін сақтағаннан кейін, ол кесте тақтасы мен кесте көмекшісінің немесе нысан формасының сағаттық көрінісінде пайдаланылады. Кесте тақтасын, кесте көмекшісін немесе тапсырыс беруші нысанын ережені орындамау үшін тапсырыс беру ережесінің жазбасын өшіруге болады.

Ескертпе

Тапсырыс беру ережелеріне қазіргі уақытта кесте тақтасы мен кесте көмекшісінің сағаттық көрінісінде ғана қолдау көрсетіледі. Тапсырыс беру брондау формасы арқылы тапсырыс берілген немесе жаңартылған кезде тапсырыс беру ережелеріне де қолдау көрсетіледі. Брондау ережелері брондау жазбасын жою кезінде орындалмайды . Көп өңдеуді пайдаланған кезде брондау ережелері пішіндерде жұмыс істемейді.

CRM әрекетін жасау

Бұл бөлімде тапсырыс беру ережесінің бөлігі ретінде тексеруді орындау үшін реттелетін CRM әрекетін қалай пайдалануға болатындығы туралы мысалды қарастырамыз.

Брондау ережесін тексеру үшін CRM әрекетін пайдаланған кезде, жоғарыда анықталғандай теңшелетін веб-ресурсты жасауыңыз қажет болады. Пайдаланушы веб-ресурсында анықтайтын JavaScript теңшелетін CRM әрекетін шақырады және реттелетін CRM әрекетінің нәтижелерін бағалайды. Реттелетін CRM әрекетін шақыру үшін пайдалануға болатын үлгі кодын осы құжаттың соңындағы А қосымшасынан қараңыз.

Реттелетін CRM әрекеті CRM ішінде жасалуы қажет. Теңшелетін CRM әрекетін қосу үшін теңшелетін веб-ресурсыңыз үшін анықтаған CRM шешімін пайдалануды ұсынамыз.

Реттелетін CRM әрекеті келесі кіріс және шығыс параметрлерге ие болуы керек. Сценарий талап ететіндей қосымша кіріс және шығыс параметрлерін қосуға болады. Басқа енгізу және шығыс параметрлерін қолдау үшін теңшелетін CRM әрекетіне қоңырау шалу үшін анықтаған JavaScript жаңартылғанына көз жеткізуіңіз керек.

Кіріс параметрлер:

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

Шығыс параметрлер:

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

Төмендегі скриншотта реттелетін CRM әрекетінің мысалы көрсетіледі. Бұл үлгі newBookableResource жұмысқа тапсырыстағы таңдаулы ресурсқа сәйкес келетінін және newScheduleStart ішінде екенін тексереді. Уәде етілген уақыт және Уәде етілген уақыт. Уәде етілген терезенің күндері бір күнге арналған деп есептеледі. Мысалы: Уәделескеннен бергі уақыт: 01.01.2016 сағат 08: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 анықтамасы болады.

Ескертпе

Бұл 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 нысанын келесі анықтамамен қайтаруы керек.

Ескертпе

Бұл 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})