OnCreate 事件的确认对话框
Confirmation Dialog Box for OnCreate Event
当我尝试在自定义实体中创建实体记录时,我正在尝试创建一个对话框作为对用户的警告。
我写了一个JS,我试图触发表单的onSave。但是,这个对话框是在循环中弹出的。当我接受或取消活动时都会发生这种情况。
function OnFormSave(executionObj) {
var eventArgs = executionObj.getEventArgs();
var formContext = executionObj.getFormContext();
// eventArgs.preventDefault();
if (eventArgs.getSaveMode() == 70)//AUTOSAVE
{
eventArgs.preventDefault();
return;
}
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed)
{
// formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
有人可以帮我解决这个问题吗?此外,此事件应该仅在创建记录时发生。有什么解决办法吗?
您需要检查表单类型是否处于创建模式,然后执行对话框提示代码。这会起作用。
var formType = formContext.ui.getFormType();
if(formType == 1) { //create form
// move your code here to execute only in create form mode
}
我会把防止自动保存功能和打开对话框功能分开
function preventAutoSave(executionContext?: Xrm.SaveEventContext<any>) {
if (executionContext == null) return;
var eventArgs = executionContext.getEventArgs();
if (eventArgs.getSaveMode() == 70) {
eventArgs.preventDefault();
}
}
请记住,当对话框成功打开和关闭(按下取消或确定按钮)时,将调用 openConfirmDialog
的 successCallback
A function to execute when the confirmation dialog is closed by clicking the confirm, cancel, or X in the top-right corner of the dialog.
如果您希望在表单的 onSave
上使用此对话框,请考虑在表单的 onLoad
上添加:
let form = executionContext.getFormContext();
// Assuming you want to prevent auto save all times
form.data.entity.addOnSave(preventAutoSave);
form.data.entity.addOnSave(openConfirmDialog);
function openConfirmDialog() {
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed)
{
// formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
我试着用不同的方式回答这个问题:
var count = 0;
function OnFormSave(executionObj, para) {
var eventArgs = executionObj.getEventArgs();
var formContext = executionObj.getFormContext();
if (count == 0) {
eventArgs.preventDefault();
}
if (formContext.ui.getFormType() == 1 && para != null && count < 1) {
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed) {
count = count + 1;
formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
}
当我尝试在自定义实体中创建实体记录时,我正在尝试创建一个对话框作为对用户的警告。
我写了一个JS,我试图触发表单的onSave。但是,这个对话框是在循环中弹出的。当我接受或取消活动时都会发生这种情况。
function OnFormSave(executionObj) {
var eventArgs = executionObj.getEventArgs();
var formContext = executionObj.getFormContext();
// eventArgs.preventDefault();
if (eventArgs.getSaveMode() == 70)//AUTOSAVE
{
eventArgs.preventDefault();
return;
}
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed)
{
// formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
有人可以帮我解决这个问题吗?此外,此事件应该仅在创建记录时发生。有什么解决办法吗?
您需要检查表单类型是否处于创建模式,然后执行对话框提示代码。这会起作用。
var formType = formContext.ui.getFormType();
if(formType == 1) { //create form
// move your code here to execute only in create form mode
}
我会把防止自动保存功能和打开对话框功能分开
function preventAutoSave(executionContext?: Xrm.SaveEventContext<any>) {
if (executionContext == null) return;
var eventArgs = executionContext.getEventArgs();
if (eventArgs.getSaveMode() == 70) {
eventArgs.preventDefault();
}
}
请记住,当对话框成功打开和关闭(按下取消或确定按钮)时,将调用 openConfirmDialog
的 successCallback
A function to execute when the confirmation dialog is closed by clicking the confirm, cancel, or X in the top-right corner of the dialog.
如果您希望在表单的 onSave
上使用此对话框,请考虑在表单的 onLoad
上添加:
let form = executionContext.getFormContext();
// Assuming you want to prevent auto save all times
form.data.entity.addOnSave(preventAutoSave);
form.data.entity.addOnSave(openConfirmDialog);
function openConfirmDialog() {
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed)
{
// formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
我试着用不同的方式回答这个问题:
var count = 0;
function OnFormSave(executionObj, para) {
var eventArgs = executionObj.getEventArgs();
var formContext = executionObj.getFormContext();
if (count == 0) {
eventArgs.preventDefault();
}
if (formContext.ui.getFormType() == 1 && para != null && count < 1) {
var confirmStrings = { text: "Are you sure you want to continue to save the record?", title: "Warning" };
var confirmOptions = { height: 250, width: 500 };
Xrm.Navigation.openConfirmDialog(confirmStrings, confirmOptions).then(
function (success) {
if (success.confirmed) {
count = count + 1;
formContext.data.save();
}
else {
eventArgs.preventDefault();
}
});
}
}