Megosztás a következőn keresztül:


Foglalási szabályok beállítása

A Field Service foglalási szabályai figyelmeztető vagy hibaüzeneteket hoznak létre, amelyeket a felhasználók az erőforrás-foglalási rekordok létrehozásakor vagy szerkesztésekor látnak az egyéni feltételek alapján. Például, létrehozható egy foglalási szabály, amely figyelmezteti a felhasználót, ha az ütemezésben olyan munkarendelést akar lefoglalni egy erőforráshoz, ami nem rendelkezik a szükséges képességgel a munkához.

A foglalási szabályok egyéni JavaScript-módszerek, amelyeket a foglalható erőforrás-foglalási rekord létrehozása vagy szerkesztése előtt hajtanak végre. A JavaScript módszer elfogadhat egy paramétert, amely információkat tartalmaz a létrehozandó Bookable Resource Booking rekordról, és vissza kell adnia egy JavaScript objektumot a szükséges tulajdonságokkal.

Állítson be foglalási szabályokat a foglalás érvényesítéséhez annak létrehozásakor vagy módosításakor.

Feljegyzés

  • A foglalási szabályok csak az óránkénti nézethez érhetők el, az ütemezési tábla és az ütemezési segéd napi, heti vagy havi nézeteihez nem. Akkor is elérhetők, ha foglalást hoznak létre vagy frissítnek egy foglalható erőforrás foglalási űrlapja segítségével.
  • A foglalási szabályok nem érhetők el a foglalható erőforrás foglalási űrlapján, ha üzleti folyamat van engedélyezve az űrlapon.
  • A foglalási szabályok nem érhetők el az ütemezési tábla ismételt hozzárendelési funkciójához.
  • Minden egyéni foglalási szabály csak egy hibát/figyelmeztetést adhat vissza. Több üzenet visszaküldéséhez állítson be egyedi foglalási szabályokat minden érvényesítéshez.

Megoldás létrehozása

A foglalási szabály beállításának első lépéseként egyéni JavaScript-alapú weberőforrást kell létrehoznia. Javasoljuk, hogy hozzon létre egy megoldást a CRM-ben, és vegye fel az egyéni JavaScript-weberőforrást, vagy használjon egy meglévő megoldást, amelyet a testreszabásokhoz használhat.

Hozzon létre CRM megoldást

  1. A Beállítások megoldásai> közötthozzon létre egy új megoldást a foglalási szabály JavaScript webes erőforrásaihoz.

A következő képernyőkép mutatja az újonnan létrehozott megoldást. Javasoljuk, hogy a megoldás az alapértelmezett kiadó helyett egyedi kiadót használjon.

Képernyőkép a Field Service foglalási szabályairól.

  1. A megoldás létrehozása után válassza ki a weberőforrás-összetevőt, és hozzon létre egy új weberőforrást.
  2. Az új webes forrás űrlapon adja meg a következő információkat: a. Név b. Megjelenített név c. Válassza a Script (Jscript) típust
  3. Válassza a szövegszerkesztő lehetőséget a JavaScript-kód beírásához a foglalási szabályhoz.
  4. Válassza a Mentés lehetőséget a webes erőforrás mentéséhez.
  5. Válassza a Közzététel lehetőséget annak ellenőrzéséhez, hogy a foglalási szabály webes erőforrása közzé lett-e téve.

Képernyőkép egy új webes erőforrásról.

Állítson be egy foglalási szabályt

  1. A főmenüből lépjen a Field Service-erőforrások elemre, majd válassza a Foglalási szabályok lehetőséget>a Foglalási beállítások alatt .

    Képernyőkép az aktív foglalási szabályok listájáról a Field Service szolgáltatásban.

  2. Válassza az +Új lehetőséget új foglalási szabály létrehozásához.

  3. A Foglalási szabály képernyőn írja be a következő információkat: a. Név b. Weberőforrás (válassza ki a közelmúltban létrehozott weberőforrást). c. Adja meg a JavaScript-ben megadott metódus nevét.

    Képernyőkép a foglalási szabályokról.

  4. Mentse el a foglalási szabályt. A foglalási szabály mentése után azt az ütemezési tábla és az ütemezési segéd óránkénti nézete, illetve az entitás űrlapja használja majd. A foglalási szabály rekord inaktiválható, így az ütemezési tábla, az ütemezési segéd vagy a foglalási entitás űrlapja nem hajthatja végre a szabályt.

Feljegyzés

A foglalási szabályok jelenleg csak az ütemezési tábla és az ütemezési segéd óránkénti nézetében támogatottak. A foglalási szabályok akkor is támogatottak, amikor a foglalásokat a foglalható erőforrás foglalási űrlapja segítségével hozzák létre vagy frissítik. A foglalási szabályok nem lépnek végrehajtásra a foglalási rekord törlésekor. A foglalási szabályok nem működnek űrlapokon többszörös szerkesztés esetén.

Hozzon létre egy CRM műveletet

Ebben a szakaszban megtekintjük azt a példát, amely bemutatja, hogyan használható egyéni CRM-művelet az érvényesítésre a foglalási szabály részeként.

Ha CRM-műveletet használ a foglalási szabály érvényesítéséhez, akkor is létre kell hoznia egy egyéni webes erőforrást a fent meghatározottak szerint. Az egyéni webes erőforrásban definiált JavaScript meghívja az egyéni CRM-műveletet, és kiértékeli az egyéni CRM-művelet eredményeit. Az egyéni CRM művelet meghívásához felhasználható példakódokról a dokumentum végén található A melléklet található.

Egyéni CRM műveletet kell létrehozni a CRM-ben. Javasoljuk, hogy az egyéni webes erőforráshoz definiált CRM-megoldást használja az egyéni CRM-művelet hozzáadásához.

Az egyéni CRM műveletnek a következő bemeneti és kimeneti paraméterekkel kell rendelkeznie. A forgatókönyv szerint további bemeneti és kimeneti paramétereket is hozzáadhat. Gondoskodnia kell arról, hogy az egyéni CRM-művelet meghívásához definiált JavaScript frissüljön a többi bemeneti és kimeneti paraméter támogatásához.

Bemeneti paraméterek:

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

Kimeneti paraméterek:

  • isError - logikai
  • isWarning - logikai
  • errorMessage - karakterlánc
  • warningMessage - karakterlánc

A következő képernyőkép egy példát mutat be egy egyéni CRM-műveletre. Ez a minta ellenőrzi, hogy a newBookableResource megfelel-e a munkarendelés előnyben részesített erőforrásának, és hogy a newScheduleStart az ígért időtől az ígéretig és az ígért időig tart-e. Feltételezzük, hogy az ígért ablak dátumai egyetlen dátumra vonatkoznak. Példa: Idő az ígérettől: 2016.01.01. 8:00 AM / Idő az ígéretig: 2016.01.01. 12:00.

Képernyőkép egy egyéni CRM-műveletről.

Mintakód

A létrehozott JavaScript-függvény egyetlen paramétert fogadhat el, amely a foglalási környezetnek számít. Az átadott foglalási környezet paraméter nem egy tipikus CRM-környezet, amelyet az ügyféloldali parancsfájlok futtatásakor használnak.

Foglalási környezet sémája:

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

A foglalási kontextus paraméter a következő JavaScript-meghatározással rendelkezik.

Feljegyzés

Ezt a JavaScript-kódot nem szükséges belefoglalni a foglalási szabály egyéni webes erőforrásába.

A ResourceScheduleSource lehetséges értékei az erőforrásütemezési forrás globális értékkészlet származnak. Ezt a tulajdonságot felhasználva megtudhatja, hogy a foglalási szabály aktiválódik-e az Ütemezési táblán vagy az Ütemezési segédnél.

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

Az érvényesítési módszernek vissza kell adnia egy JavaScript objektumot a következő meghatározással.

Feljegyzés

Ezt a JavaScript-kódot nem szükséges belefoglalni a foglalási szabály egyéni webes erőforrásába.

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

Példa a JavaScript funkció meghatározására. A következő JavaScript-kód az egyetlen olyan JavaScript-kód, amelyet fel kell vennie az egyéni weberőforrásba.


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

A következő JavaScript használható olyan egyéni CRM-művelet hívására, amely ugyanolyan bemeneti és kimeneti paraméterekkel rendelkezik, mint az előző minta.

A foglalási szabály rekordjában a metódus nevének a következőnek kell lennie: MSFSAENG. ScheduleBoard.Érvényesítés. A cikk a "foglalási szabály beállítása" című részében található képernyőképet további információkat közöl.


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

További megjegyzések

A foglalható erőforrás-foglalás lehetővé teszi a foglalási szabályok használatát figyelmeztetések vagy hibaüzenetek létrehozására, amelyeket a felhasználók az erőforrás-foglalási rekord létrehozásakor vagy szerkesztésekor látnak az egyéni feltételek alapján. A rendszer a foglalási szabályokban preventDefault használja. Ezért az üzleti folyamatok és az onSaveeseményhez kötődő egyéb egyéni parancsfájlok nem használhatók a foglalható erőforrás-foglalási entitáson, ha a foglalási szabályok engedélyezve vannak.

A foglalási szabályok feldolgozása azonban a Foglalás űrlap mentésekor letiltható az alábbi beállítás engedélyezésével, amely lehetővé teszi a felhasználók számára az üzleti folyamatok használatát. Az ügyféloldali API-k a beállítás környezetszintű engedélyezésére használhatók.

Olvassa el a beállítás msdyn_DisableProcessBookingRulesOnSaveBookingForm aktuális értékét.

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

Engedélyezze a beállítást msdyn_DisableProcessBookingRulesOnSaveBookingForm.

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

Tiltsa le a beállítást **msdyn_DisableProcessBookingRulesOnSaveBookingForm**.

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