crm 2013 javascript保存和刷新崩溃
crm 2013 javascript save and refresh crashes
我目前有一个CRM 2013内部部署的开发环境。在我的自定义实体中,运行以下JavaScript代码:
function UpdateBPF() {
var requests = [];
requests.push(Xrm.Page.getAttribute('description').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('categoryid').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('priority').setRequiredLevel('none'));
requests.push(Xrm.Page.getAttribute('initialtype').setValue(1));
requests.push(Xrm.Page.data.save());
requests.push(event.returnValue = false);
$.when.apply(undefined, requests).always(function () {
Xrm.Page.data.setFormDirty(false);
RefreshForm();
});
};
function RefreshForm() {
Mscrm.ReadFormUtilities.openInSameFrame(window._etc, Xrm.Page.data.entity.getId());
};
我想做的事:
- 更改选项集值时更改业务流程
切换选项集后我的代码在做什么:
- 启动自定义工作流以进行实际切换(工作正常,我需要刷新才能向用户实际显示选定的工作流)
- 不需要某些字段(如果未填充,则阻止刷新)
- 保存表单(刷新以显示正确的业务流程后,从未保存值,因此从未设置选项集值)
- 防止出现"您尚未保存"弹出窗口。(很有可能我不再需要这个了)
- 未保存后,我将表单设置为不脏
为什么我要将大部分步骤推到requests变量中?
- 我希望在刷新表单之前,这些值一定会出现。很可能我做得不正确或效率不高
工作原理:
- 一切都在我的CRM 2013内部部署测试环境中如预期的那样工作
- 保存
- 刷新
- 正确的业务流程&阶段
CRM 2013在线问题:
- 保存和刷新不起作用
- IE 9、10、11和FireFox完全崩溃。铬很好
- 关闭"自动保存"没有什么区别
我尝试保存的内容:
Xrm.Page.data.save()
Xrm.Page.data.entity.save()
我尝试刷新的内容:
Xrm.Page.data.refresh()
Mscrm.ReadFormUtilities.openInSameFrame(window._etc, Xrm.Page.data.entity.getId())
Xrm.Utility.openEntityForm("service_ticket", Xrm.Page.data.entity.getId(), null)
var url = Xrm.Page.context.getClientUrl(); window.open(url + "/main.aspx?etn=ticket&pagetype=entityrecord&id=" + Xrm.Page.data.entity.getId() + "&newWindow=false", "_blank", null, false);
当我一步一步地调试顶部发布的代码时,它会得到then.When、.apply和.always,但会跳过里面的所有内容。我认为这总是意味着它总是运行。。。
当我尝试时:
Xrm.Page.data.save().then(
function () {
alert('Save worked, refresh');
Xrm.Page.data.refresh();
},
function () {
alert('Save failed!');
}
);
逐步执行代码会使其达到保存。但在点击后,它跳过了里面的所有东西,然后IE(我一直在测试它,因为Chrome似乎可以工作…),完全崩溃了。错误并不会完全弹出,它更像是一个警告,上面写着"IE已停止工作"。
我在StackOverflow中看到过1个类似的问题,但没有一个公认的答案,或者一个根本不适合我的答案。前面两段之前的Xrm.Page.data.save()函数是其中一个答案的示例。超级简单的样本,易于跟踪和逐步通过测试,结果不变。
我也在谷歌上搜索过(我最好的朋友),甚至把我的问题发了疯。另一个网站上的另一个帖子,我相信是在微软网站上,根本没有回应。根据所写的内容,我认为这是StackOverflow帖子中的同一个人。
对这个问题的任何见解,无论是我的代码还是其他什么,都将不胜感激。
tl;dr保存和刷新JavaScript不适用于CRM 2013 Online
我最终做的是在Xrm.Page.data.save之前有一个setTimeout。似乎在字段更改之后和JavaScript之前直接发生了一些事情。这可能是商业规则(但我最初停用了它们,所以可能不是这样)。
不管怎样,我解决问题的方法是在短时间内将保存函数括起来,然后使用Xrm.Utility.openEntityForm"刷新"整个页面,因为我宁愿不使用不支持的
Mscrm.ReadFormUtilities.openInSameFrame(window._etc, Xrm.Page.data.entity.getId())
下面是我使用的代码片段:
setTimeout(function () {
Xrm.Page.data.save().then(
function () {
var id = Xrm.Page.data.entity.getId();
var entityLogicalName = Xrm.Page.data.entity.getEntityName();
Xrm.Utility.openEntityForm(entityLogicalName, id);
},
function () {
alert('Save failed! Please refresh the form.');
});
}, 500);
保存新创建的记录后,我会得到记录的id。将其置于超时之外或保存之前会导致打开一条新记录(本质上是"保存+新建")。
如果有更有效的方法,请告诉我费用,我会选择你的答案(如果有效的话)作为正确的答案。
编辑:
下面的代码实际上是一个更好的版本。之前的代码我做了保存和保存&关闭,导致保存发生两次,这打乱了我对不同项目的一些逻辑
setTimeout(function () {
var id = Xrm.Page.data.entity.getId();
var entityLogicalName = Xrm.Page.data.entity.getEntityName();
Xrm.Utility.openEntityForm(entityLogicalName, id);
}, 500);
在这里,openEntityForm是在关闭并再次打开它之前保存记录,这是我能得到的最接近Save&刷新
以下代码应与"modifiedon"字段的"onchange"事件关联。保存表单后,"modifiedon"字段始终更新。因此,单击"保存"后,将使用以下函数重新加载表单。
function ReloadFormAfterSave(eventArgs) {
var formId = Xrm.Page.ui.getFormType();
alert(formId);
if (formId == "2") { // in my case, I only want the reload to occur when updating
setTimeout(function () {
var id = Xrm.Page.data.entity.getId();
var entityLogicalName = Xrm.Page.data.entity.getEntityName();
Xrm.Utility.openEntityForm(entityLogicalName, id);
}, 500);
}
}
请参阅http://dynamicscrmtouch.wordpress.com/2014/07/05/onload-event-not-triggered-after-save-on-crm-2013/关于"modifiedon"的解释。
我忘了提到你需要在表单上添加"modifiedon"作为隐藏字段。
干杯!
- 强制模板刷新ember.js
- 如何通过ajax刷新JSF填充的javascript变量
- 如何解决Yii中的页面刷新问题
- Jquery提交表单而不刷新
- 刷新页面后会出现警报
- 刷新后保留对网页的更改
- 如何在不刷新页面的情况下更新显示框
- 重定向时角度刷新浏览器
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- Javascript,输出结果后页面不断刷新
- $(document).height()在刷新时随机化值(Safari 5.1.10)
- 刷新父窗口后无法关闭窗口
- 刷新页面时hasClass不起作用
- X秒后刷新select元素
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- location.reload(true)崩溃浏览器选项卡
- ui路由器刷新在点击6次后崩溃
- 如果我刷新几次,为什么我的应用程序会在Chrome中崩溃
- AJAX刷新、setInterval计时和localhost崩溃
- crm 2013 javascript保存和刷新崩溃