CRM 2011 保存后打开一个新的 window
CRM 2011 Open a new window after save
基本上我需要的是在保存记录后运行一些JavaScript。这将从已由插件填充的字段中获取一个 guid。我的代码看起来像;
Xrm.Page.data.entity.save();
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
问题是代码 运行 超过了对 save() 的调用,并在插件填充 "new_copyguid" 字段之前继续执行。有没有办法在继续 javascript 之前等待插件完成?我试过 AddOnSave() 但没有成功。任何 javascript 回调似乎也在插件完成之前执行。插件同步设置为运行
我正在通过表单上的按钮执行此 javascript。该按钮设置一个字段值,然后保存记录,触发插件。该按钮是创建克隆的 "Copy Entity" 按钮。我需要在浏览器中打开这条新记录。
我了解到这也不起作用,因为它发生在保存之前;
Xrm.Page.data.refresh(save).then(successCallback, errorCallback);
任何指点都会很棒!
我认为您必须 运行 在 OnLoad 部分中使用您的逻辑。保存应该强制刷新并且您的加载逻辑将再次 运行。您需要做一些检查以查看修改日期是否在特定时间范围内。
其他选项是您通过 rest 调用或 Soap 调用手动执行更新,然后您可以在另一个调用中从插件中读取值。
您只需等待几秒钟,输入此代码即可。
function YourFunction()
{
Xrm.Page.data.entity.save();
OpenForm();
}
这是一个新功能。
function OpenForm()
{
setTimeout(function () {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
}, 3000);
}
试试这个:
function onPageLoad() {
var formType = Xrm.Page.ui.getFormType();
if (formType == 0 || formType == 1) { // 0 = Undefined, 1 = Create
// If form is in Create Mode then
if (Xrm.Page.data != null && Xrm.Page.data.entity != null) {
Xrm.Page.data.entity.addOnSave(onSaveDoThis);
}
}
}
function onSaveDoThis() {
setTimeout(onFormSaveSuccess, 300);
}
function onFormSaveSuccess() {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
if (newguid == "") {
onSaveDoThis();
} else {
// Don't need to trigger the function onSaveDoThis anymore
Xrm.Page.data.entity.removeOnSave(onSaveDoThis);
Xrm.Utility.openEntityForm("new_myentity", newguid);
}
}
试试这个:
function OpenForm()
{
setTimeout(function () {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
}, 3000);
}
基本上我需要的是在保存记录后运行一些JavaScript。这将从已由插件填充的字段中获取一个 guid。我的代码看起来像;
Xrm.Page.data.entity.save();
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
问题是代码 运行 超过了对 save() 的调用,并在插件填充 "new_copyguid" 字段之前继续执行。有没有办法在继续 javascript 之前等待插件完成?我试过 AddOnSave() 但没有成功。任何 javascript 回调似乎也在插件完成之前执行。插件同步设置为运行
我正在通过表单上的按钮执行此 javascript。该按钮设置一个字段值,然后保存记录,触发插件。该按钮是创建克隆的 "Copy Entity" 按钮。我需要在浏览器中打开这条新记录。
我了解到这也不起作用,因为它发生在保存之前;
Xrm.Page.data.refresh(save).then(successCallback, errorCallback);
任何指点都会很棒!
我认为您必须 运行 在 OnLoad 部分中使用您的逻辑。保存应该强制刷新并且您的加载逻辑将再次 运行。您需要做一些检查以查看修改日期是否在特定时间范围内。
其他选项是您通过 rest 调用或 Soap 调用手动执行更新,然后您可以在另一个调用中从插件中读取值。
您只需等待几秒钟,输入此代码即可。
function YourFunction()
{
Xrm.Page.data.entity.save();
OpenForm();
}
这是一个新功能。
function OpenForm()
{
setTimeout(function () {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
}, 3000);
}
试试这个:
function onPageLoad() {
var formType = Xrm.Page.ui.getFormType();
if (formType == 0 || formType == 1) { // 0 = Undefined, 1 = Create
// If form is in Create Mode then
if (Xrm.Page.data != null && Xrm.Page.data.entity != null) {
Xrm.Page.data.entity.addOnSave(onSaveDoThis);
}
}
}
function onSaveDoThis() {
setTimeout(onFormSaveSuccess, 300);
}
function onFormSaveSuccess() {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
if (newguid == "") {
onSaveDoThis();
} else {
// Don't need to trigger the function onSaveDoThis anymore
Xrm.Page.data.entity.removeOnSave(onSaveDoThis);
Xrm.Utility.openEntityForm("new_myentity", newguid);
}
}
试试这个:
function OpenForm()
{
setTimeout(function () {
var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
Xrm.Utility.openEntityForm("new_myentity", newguid);
}, 3000);
}