crm 2013 javascript save and refresh crashes

时间:2014-04-24 15:39:26

标签: javascript refresh dynamics-crm-2013 business-process

我目前拥有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());
};

我正在尝试做什么:

  • 更改选项设置值时更改业务流程

切换选项集后我的代码正在做什么:

  • 启动自定义工作流程以进行实际切换(工作正常,我需要刷新以实际向用户显示所选工作流程)
  • 不需要某些字段(如果未填写则阻止刷新)
  • 保存表单(刷新后显示正确的业务流程,从未保存值,因此从未设置选项设置值)
  • 防止发生“你还没有保存”弹出窗口。 (很可能我不再需要这个)
  • 我将表单设置为不保存后不脏(

为什么我将大部分步骤推送到请求变量?

  • 我希望在刷新表单之前肯定会出现这些值。很可能我这样做不正确或效率不高。

什么有效:

  • 我的CRM 2013内部部署测试环境中的所有内容均符合预期。
  • 保存
  • 刷新
  • 正确的业务流程&阶段

CRM 2013在线问题:

  • 保存和刷新不起作用
  • IE 9,10,11和FireFox完全崩溃。 Chrome很好。
  • 关闭自动保存没有什么区别

我尝试过保存:

  • 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);

当我调试时,一步一步地通过顶部发布的代码,它获得当时的.when,.apply和.always但SKIPS内部的一切。我认为这总意味着它总是运行......

当我尝试:

Xrm.Page.data.save().then(
    function () {
        alert('Save worked, refresh');
        Xrm.Page.data.refresh();
    },
    function () {
        alert('Save failed!');
    }
);

单步执行代码会点击保存。但是在击中之后,它将SKIPS内部的所有内容然后IE(我主要测试的是因为Chrome似乎工作......),完全崩溃了。错误没有完全弹出,更多的是警告“IE已经停止工作”。

我在StackOverflow中看到过1个类似的问题,没有接受的答案或答案根本不适用于我。前两个段落之前的Xrm.Page.data.save()函数是其中一个答案的样本。超级简单的样本,易于遵循和逐步进行测试,结果没有变化。

我也用谷歌搜索(我最好的朋友)甚至是我的问题。另一个网站上的另一个帖子,我相信在微软网站上,根本没有回复。根据所写的内容,我认为它与StackOverflow帖子的人员相同。

非常感谢对问题的任何洞察,无论是我的代码还是其他问题。

tl; dr保存并刷新JavaScript不适用于CRM 2013 Online

2 个答案:

答案 0 :(得分:5)

我最终做的是在Xrm.Page.data.save之前有一个setTimeout。似乎在字段更改之后和我的JavaScript之前直接发生了某些事情。这可能是业务规则(但我最初已将它们停用,因此有可能不是这样)。

无论哪种方式,我为解决我的问题所做的是在短暂的超时内包含save函数,然后使用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。超出超时或保存之前会导致打开一条新记录(本质上是Save + New)。

如果有更有效的方法可以解决这个问题,请告知我,我会选择你的答案(如果有效)作为正确答案。

修改:
以下代码实际上是一个更好的版本。之前的代码我做了Save and Save& Close,导致Save发生两次,这搞砸了我的一些不同项目的逻辑

setTimeout(function () {
    var id = Xrm.Page.data.entity.getId();
    var entityLogicalName = Xrm.Page.data.entity.getEntityName();
    Xrm.Utility.openEntityForm(entityLogicalName, id);
}, 500);

这里,openEntityForm是在关闭之前保存记录并再次打开自己,最近的我可以到达Save&刷新。

答案 1 :(得分:0)

以下代码应与' onchange'相关联。修改过的事件'领域。修改过的'保存表单后,字段始终更新。因此,点击“保存'使用以下函数重新加载表单。

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);
}
}

有关' modifiedon'

的说明,请参阅http://dynamicscrmtouch.wordpress.com/2014/07/05/onload-event-not-triggered-after-save-on-crm-2013/

我忘了提到你需要添加' modifiedon'作为表单上的隐藏字段。

干杯!