Ayırma kurallarını ayarla
Field Service içinde ayırma kuralları, kullanıcıların bir ayırma kaydı oluştururken veya düzenlerken görüntüleyecekleri, çeşitli durumlara dayanan hata iletilerinin oluşturulmasına izin verir. Örneğin, bir kullanıcı bir iş emrini bir kaynağa, iş için gerekli niteliklere sahip olmayan zamanlama panosu üzerinde ayırmaya çalıştığı zaman kullanıcıyı uyaracak bir ayırma kuralı oluşturulabilir.
Ayırma kuralları, oluşturulmakta veya düzenlenmekte olan kaynak ayırma kaydı öncesinde çalışan özel JavaScript yöntemlerdir. JavaScript yöntemi, yüklenebilir kaynak oluşturulmakta olan ayırma kaydı için bilgi içeren bir parametreyi kabul edebilir ve gerekli özelliklere sahip bir JavaScript nesnesi vermelidir.
Bir kayıt oluşturulduğunda veya değiştirildiğinde, doğrulamak için kayıt kuralları ayarlayın.
Not
- Ayırma kuralları yalnızca saatlik görünümde vardır ve zamanlama panosunun ve Zamanlama Yardımcısının günlük, haftalık veya aylık görünümlerinde kullanılamaz. Bunlar, kullanıma hazır kaynak ayırma formu aracılığıyla bir kayıt oluşturulduğunda veya güncelleştirildiğinde de kullanılabilir.
- Kayıt kuralları, formda etkinleştirilmiş iş süreci akışı etkin kaynak ayırma formunda kullanılamaz.
- Ayırma kuralları, zamanlama panosundaki yeniden atama işlevinde kullanılamaz.
- Her özel ayırma kuralı yalnızca bir hata/uyarı döndürebilir. Birden çok iletiyi döndürmek için her doğrulama için ayrı ayırma kuralları ayarlayın.
Çözüm oluşturma
Ayırma kuralınızı ayarlamanın ilk adımı özel bir JavaScript web kaynağı oluşturmaktır. Özel JavaScript web kaynağınızı eklemek için CRM içinde bir çözüm oluşturmanızı veya özelleştirmeler için sahip olabileceğiniz var olan bir çözümü kullanmanızı öneririz.
CRM çözümü oluştur
- Ayarlar>Çözümler bölümünden, ayırma kuralı JavaScript web kaynaklarınız için yeni bir çözüm oluşturun.
Aşağıdaki ekran görüntüsü yeni oluşturulmuş bir çözümü göstermektedir. Çözümünüzün varsayılan yayıncı kullanmasındansa bir benzersiz yayıncı kullanmasını öneririz.
- Çözümü oluşturduktan sonra, Web Kaynakları bileşenini seçin ve yeni bir web kaynağı oluşturun.
- Yeni Web Kaynağı formunda, aşağıdaki bilgileri girin: a. Ad b. Görünen ad c. Tür olarak Betik (Jscript) seçin
- Ayırma kuralı için JavaScript kodunuzu girmek üzere metin düzenleyici seçeneğini belirleyin.
- Web kaynağınızı kaydetmek için Kaydet'i seçin.
- Ayırma kuralı web kaynağının yayımlandığından emin olmak için Yayımla'yı seçin.
Ayırma kurallarını ayarla
Ana menüden, Field Service>Kaynaklar'a gidin ve ardından Ayırma Ayarları altında Ayırma Kuralları'nı seçin.
Yeni bir ayırma kuralı oluşturmak için +Yeni'yi seçin.
Ayırma kuralı formundan aşağıdaki bilgileri girin: a. Ad b. Web kaynağı (En son oluşturduğunuz web kaynağını seçin). c. JavaScript'inizde tanımladığınız yöntem adını girin.
Ayırma kuralınızı kaydedin. Ayırma kuralını kaydettikten sonra, zamanlama panosunun ve Zamanlama Yardımcısının veya varlık formunun saatlik görünümü tarafından kullanılır. Zamanlama panosunu, zamanlama yardımcısını veya ayırma varlığı formunu etkin durumda tutmak için kural kaydını devre dışı bırakabilirsiniz.
Not
Ayırma kuralları şu anda yalnızca zamanlama panosunun ve Zamanlama Yardımcısının saat görünümünde desteklenmektedir. Ayırma kuralları, kayıtlar oluşturulduğunda veya kullanılabilir kaynak ayırma formu kullanılarak güncelleştirildiği zaman da desteklenmektedir. Ayırma kuralları ayırma kaydını silme işlemi sırasında yürütülmez. Ayırma kuralları, çoklu düzenlemeyi kullanırken formlarda çalışmaz.
CRM eylemi Oluşturma
Bu bölümde, bir ayırma kuralının parçası olarak doğrulamayı gerçekleştirmek üzere özel bir CRM eyleminin kullanımını gösteren bir örneğe bakacağız.
Ayırma kuralı doğrulaması için bir CRM eylemi kullanırken yukarıda tanımlanan özel bir web kaynağını yine de oluşturmanız gerekir. Özel web kaynağınızda tanımlayacağınız JavaScript, özel CRM Eylemini çağıracak ve özel CRM eyleminden sonuçları değerlendirecektir. Özel bir CRM eylemi çağırmak için kullanabileceğiniz örnek kod için bu belgenin sonundaki Ek A'ya bakın.
CRM'de özel bir CRM eylemi oluşturulması gerekir. Özel CRM eyleminizi eklemek üzere özel web kaynağınız için tanımladığınız CRM çözümünü kullanmanızı öneririz.
Özel CRM eylemi aşağıdaki giriş ve çıkış parametrelerine sahip olmalıdır. Senaryonuzla gereksinim duydukça, ek giriş ve çıkış parametreleri ekleyebilirsiniz. Özel CRM eyleminizi çağırmak üzere tanımladığınız JavaScript'in ek giriş ve çıkış parametrelerinizi desteklemek için güncelleştirildiğinden emin olun.
Giriş parametreleri:
- originalScheduleStart – DateTime
- originalScheduleEnd – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource – Picklist
- newScheduleStart – DateTime
- newScheduleEnd – DateTime
- isCreate – Boolean
- isUpdate – Boolean
Çıkış Parametreleri:
- isError – Boolean
- isWarning – Boolean
- errorMessage – Dize
- warningMessage - Dize
Aşağıdaki ekran görüntüsü, örnek bir özel CRM eylemini gösterir. Bu örnek, newBookableResource'un iş emrindeki tercih edilen kaynakla eşleşip eşleşmediğini ve newScheduleStart'ın Söz Verilenden İtibaren Geçen Süre ve Söz Verilene Kadar Geçen Süre içinde olup olmadığını denetler. Taahhüt edilen pencerenin tarihinin tek bir tarih için olduğu varsayılır. Örnek: taahhüt edilen süreden: 01/01/2016 8:00 /taahhüt edilen tarihe: 01/01/2016 12:00.
Örnek kod
Oluşturduğunuz JavaScript işlevi, ayırma bağlamı olarak değerlendirilen tek bir parametreyi kabul edebilir. Ayırma bağlamı parametresinde aktarılan içerik, istemci tarafında komut dosyası yazmada kullanılan tipik bir CRM içeriği değildir.
Ayırma bağlam şeması:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Ayırma bağlam parametresi aşağıdaki JavaScript tanımına sahip olacaktır.
Not
Bu JavaScript kodunu ayırma kuralı için özel web kaynağına eklemek gerekmez.
ResourceScheduleSource için olası değerler, kaynak zamanlaması kaynağı genel seçenek kümesinden alınır. Ayırma kuralının, zamanlama panosundan veya zamanlama yardımcısından tetiklenip tetiklenmediğini öğrenmek için bu özelliği kullanabilirsiniz.
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
};
Doğrulama yönteminiz, aşağıdaki tanıma sahip bir JavaScript nesnesi vermelidir.
Not
Bu JavaScript kodunu ayırma kuralı için özel web kaynağına eklemek gerekmez.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Örnek JavaScript işlev tanımı. Aşağıdaki JavaScript kodu özel web kaynağınıza eklemeniz gereken tek JavaScript kodudur.
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şağıdaki JavaScript, önceki örnekle aynı giriş ve çıkış parametrelerine sahip özel bir CRM eylemini çağırmak için kullanılabilir.
Ayırma kuralı kaydında, Yöntem Adı şöyle olmalıdır: MSFSAENG.ScheduleBoard.Validate. Başvuru için, bu makalenin "Ayırma Kuralı Oluşturma" bölümündeki ekran görüntüsüne bakın.
/// <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 = {}));
Ek notlar
Ayrılabilir kaynak ayırma, kullanıcıların özel koşullara bağlı olarak bir kaynak ayırma kaydı oluştururken veya düzenlerken gördükleri uyarı veya hata iletilerini oluşturmak için ayırma kurallarından yararlanacak şekilde etkinleştirilir. Sistem preventDefault
ayırma kurallarında kullanır. Bu nedenle, iş süreci akışları ve onSave
olayına bağlı başka özel betikler; kaynak ayırma kuralları etkinken ayrılaiblir kaynak ayırma varlığı üzerinde kullanılamaz.
Ancak, kayıt kurallarının işlenmesi, kullanıcıların iş süreci akışlarını kullanmasına izin veren aşağıdaki ayarı etkinleştirerek, ayırma formunun kaydedilmesi durumunda devre dışı bırakılabilir. İstemci tarafı API'leri, bu ayarı bir ortam düzeyinde etkinleştirmek için kullanılabilir.
msdyn_DisableProcessBookingRulesOnSaveBookingForm
ayarın geçerli değerini okuyun.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
msdyn_DisableProcessBookingRulesOnSaveBookingForm
ayarı etkinleştirin.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
**msdyn_DisableProcessBookingRulesOnSaveBookingForm**
ayarı devre dışı bırakın.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})