Menyiapkan aturan pemesanan
Aturan pemesanan di Field Service membuat pesan peringatan atau kesalahan yang dilihat pengguna saat membuat atau mengedit rekaman pemesanan sumber daya, berdasarkan kondisi kustom. Misalnya, aturan pemesanan dapat dibuat untuk memperingatkan pengguna ketika mereka mencoba untuk mengajukan pesanan kerja untuk sumber daya di papan jadwal yang tidak memiliki keterampilan yang dibutuhkan untuk pekerjaan.
Aturan Pemesanan adalah metode JavaScript kustom yang akan dilaksanakan sebelum rekaman Pemesanan sumber daya yang dapat dipesan dibuat atau diedit. Metode JavaScript dapat menerima parameter yang berisi informasi untuk rekaman Pemesanan sumber daya yang dapat dipesan yang sedang dibuat dan harus menghasilkan objek JavaScript dengan properti yang diperlukan.
Siapkan aturan pemesanan untuk memvalidasi pemesanan saat dibuat atau diubah.
Catatan
- Aturan pemesanan hanya tersedia untuk tampilan per jam, dan bukan tampilan harian, mingguan, atau bulanan dari papan jadwal dan asisten jadwal. Mereka juga tersedia ketika pemesanan dibuat atau diperbarui melalui formulir pemesanan sumber daya yang dapat dipesan.
- Aturan pemesanan tidak tersedia pada formulir pemesanan sumber daya yang dapat dipesan, jika alur proses bisnis diaktifkan pada formulir.
- Aturan pemesanan tidak tersedia pada fungsi tetapkan ulang di papan jadwal.
- Setiap aturan pemesanan kustom hanya dapat mengembalikan satu kesalahan/peringatan. Untuk mengembalikan beberapa pesan, siapkan aturan pemesanan individual untuk setiap validasi.
Membuat solusi
Langkah pertama untuk mengkonfigurasi aturan pemesanan Anda adalah membuat sumber daya web JavaScript kustom. Sebaiknya buat solusi di CRM untuk menambahkan sumber daya web JavaScript kustom atau gunakan solusi yang ada yang mungkin Anda miliki untuk penyesuaian.
Buat solusi CRM
- Dari Solusi Pengaturan>, buat solusi baru untuk sumber daya web JavaScript aturan pemesanan Anda.
Screenshot berikut menunjukkan solusi yang baru dibuat. Sebaiknya solusi Anda menggunakan penerbit unik dan bukan penerbit default.
- Setelah membuat solusi, pilih komponen sumber daya web dan buat sumber daya web baru.
- Masukkan informasi berikut dalam formulir sumber daya web baru: a. Nama b. Nama Tampilan c. Pilih Script (Jscript) sebagai tipe
- Pilih pilihan editor teks untuk memasukkan kode JavaScript Anda untuk aturan Pemesanan.
- Pilih Simpan untuk menyimpan sumber daya web Anda.
- Pilih Terbitkan untuk memastikan sumber daya web aturan pemesanan telah diterbitkan.
Konfigurasi aturan pemesanan
Dari menu utama, buka Sumber Daya Field Service>, lalu pilih Aturan Pemesanan di bawah Pengaturan Pemesanan .
Pilih +Baru untuk membuat aturan pemesanan baru.
Dari formulir aturan Pemesanan masukkan informasi berikut ini: a. Nama b. Sumber daya web (pilih sumber daya web yang baru-baru ini Anda buat). c. Masukkan nama metode yang ditentukan di JavaScript.
Simpan aturan pemesanan Anda. Setelah Anda menyimpan aturan pemesanan, aturan tersebut akan digunakan oleh tampilan per jam papan jadwal dan asisten jadwal atau formulir entitas. Anda dapat menonaktifkan rekaman aturan pemesanan untuk menjaga papan jadwal, asisten jadwal, atau formulir entitas pemesanan, agar tidak menjalankan aturan.
Catatan
Aturan pemesanan saat ini hanya didukung pada tampilan per jam papan jadwal dan asisten jadwal. Aturan pemesanan juga didukung saat pemesanan dibuat atau diperbarui menggunakan formulir pemesanan sumber daya yang dapat dipesan. Aturan pemesanan tidak dijalankan pada penghapusan catatan pemesanan. Aturan pemesanan tidak berfungsi pada formulir saat menggunakan multiedit.
Buat Tindakan CRM
Di bagian ini, kita akan melihat contoh yang menunjukkan bagaimana Anda dapat menggunakan tindakan CRM kustom untuk melakukan validasi sebagai bagian dari aturan Pemesanan.
Saat menggunakan tindakan CRM untuk validasi aturan pemesanan, Anda masih perlu membuat sumber daya web kustom seperti yang didefinisikan di atas. JavaScript yang akan Anda tentukan di sumber daya web kustom Anda akan memanggil Tindakan CRM kustom dan mengevaluasi hasil dari tindakan CRM kustom. Lihat Lampiran di akhir dokumen ini untuk kode contoh yang dapat Anda gunakan untuk memanggil tindakan CRM kustom.
Tindakan CRM kustom harus dibuat di CRM. Sebaiknya gunakan solusi CRM yang telah Anda tentukan untuk sumber daya web kustom Anda untuk menambahkan tindakan CRM kustom Anda.
Tindakan CRM kustom harus memiliki parameter input dan output berikut. Anda dapat menambahkan lebih banyak parameter input dan output sesuai kebutuhan skenario Anda. Anda harus memastikan JavaScript yang Anda tentukan untuk memanggil tindakan CRM kustom Anda diperbarui untuk mendukung parameter input dan output Anda yang lain.
Parameter Input:
- originalScheduleStart – DateTime
- originalScheduleEnd – DateTime
- originalBookableResource – EntityReference
- originalScheduleSource – Picklist
- newScheduleStart – DateTime
- newScheduleEnd – DateTime
- isCreate – Boolean
- isUpdate – Boolean
Parameter Output:
- isError – Boolean
- isWarning – Boolean
- errorMessage – String
- warningMessage - String
Tangkapan layar berikut Menampilkan contoh tindakan CRM kustom. Contoh ini memeriksa apakah newBookableResource cocok dengan sumber daya pilihan pada perintah kerja, dan jika newScheduleStart berada di dalam Time From Promised dan Time To Promised. Diasumsikan tanggal jendela yang dijanjikan adalah untuk satu tanggal. Contoh: waktu dari janji: 01/01/2016 8:00/waktu hingga janji: 01/01/2016 12:00.
Kode Sampel
Fungsi JavaScript yang Anda buat dapat menerima satu parameter, yang dianggap sebagai konteks Pemesanan. Parameter konteks pemesanan yang berlalu bukanlah konteks CRM umum yang digunakan dalam pembuatan skrip sisi klien.
Skema konteks pemesanan:
export type BookingRuleContext = {
oldValues: BookingRuleBookingRecord;
newValues: BookingRuleBookingRecord;
isCreate: boolean;
isUpdate: boolean;
};
export type BookingRuleBookingRecord = {
ResourceRequirementId?: string;
ResourceId?: string;
StartTime?: Date;
EndTime?: Date;
ResourceScheduleSource?: string;
};
Parameter konteks Pemesanan akan memiliki definisi JavaScript berikut.
Catatan
Kode JavaScript ini tidak perlu disertakan dalam sumber daya web kustom untuk aturan pemesanan.
Nilai yang mungkin untuk ResourceScheduleSource berasal dari sumber jadwal sumber daya rangkaian pilihan global. Anda dapat menggunakan properti ini untuk mengetahui apakah aturan Pemesanan dipicu dari papan jadwal atau Asisten Penjadwalan.
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
};
Metode validasi Anda harus mengembalikan objek JavaScript dengan definisi berikut.
Catatan
Kode JavaScript ini tidak perlu disertakan dalam sumber daya web kustom untuk aturan pemesanan.
var ruleResult = {
IsValid: false,
Message: "Some Message Here",
Type: "error" // this can be either "error" or "warning"
};
Contoh definisi fungsi JavaScript. Kode JavaScript berikut adalah satu-satunya kode JavaScript yang harus Anda masukkan ke dalam sumber daya web kustom.
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 berikut dapat digunakan untuk memanggil tindakan CRM kustom yang memiliki parameter input dan output yang sama dengan sampel sebelumnya.
Pada catatan aturan pemesanan, Nama Metode harus: MSFSAENG. JadwalBoard.Validasi. Untuk referensi, lihat screenshot di bagian "mengkonfigurasi aturan Pemesanan" di artikel ini.
/// <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 = {}));
Catatan tambahan
Pemesanan sumber daya yang dapat dipesan diaktifkan untuk menggunakan aturan pemesanan guna membuat peringatan atau pesan kesalahan yang dilihat pengguna saat membuat atau mengedit catatan pemesanan sumber daya, berdasarkan kondisi khusus. Sistem ini digunakan preventDefault
dalam aturan pemesanan. Oleh karena itu, alur proses bisnis dan ikatan skrip kustom lainnya ke peristiwa tidak onSave
dapat digunakan pada entitas pemesanan sumber daya yang dapat dipesan dengan aturan pemesanan diaktifkan.
Namun, pemrosesan aturan pemesanan dapat dinonaktifkan saat menyimpan formulir Pemesanan dengan mengaktifkan pengaturan di bawah ini yang akan memungkinkan pengguna menggunakan alur proses bisnis. API sisi klien dapat digunakan untuk mengaktifkan pengaturan ini pada tingkat lingkungan.
Baca nilai pengaturan msdyn_DisableProcessBookingRulesOnSaveBookingForm
saat ini.
Xrm.Utility.getGlobalContext().getCurrentAppSettings()["msdyn_DisableProcessBookingRulesOnSaveBookingForm"]
Aktifkan pengaturan msdyn_DisableProcessBookingRulesOnSaveBookingForm
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",true,).then(() => {a = "success"}, (error) => {a = error})
Nonaktifkan pengaturan **msdyn_DisableProcessBookingRulesOnSaveBookingForm**
.
Xrm.Utility.getGlobalContext().saveSettingValue("msdyn_DisableProcessBookingRulesOnSaveBookingForm",false,).then(() => {a = "success"}, (error) => {a = error})