javascript - crm 2013 javascript 保存和刷新崩溃

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

我目前有一个 CRM 2013 On-Premise 的开发环境。 在我的自定义实体中,运行以下 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 Online 问题:

  • 保存和刷新不起作用
  • 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);

当我调试时,通过顶部发布的代码逐步执行,它会获取 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() 函数是其中一个答案的示例。 super 简单的示例,易于遵循和逐步完成以进行测试,而不会改变结果。

我还用 Google 搜索过(我最好的 friend ),甚至还用 Binging 解决了我的问题。另一个网站上的另一篇帖子,我相信是在微软网站上,根本没有回应。根据所写的内容,我假设与 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。超出超时时间或保存之前会导致打开新记录(本质上是保存 + 新建)。

如果有更有效的方法来解决这个问题,请随时告诉我,我会选择您的答案(如果可行)作为正确答案。

编辑:
下面的代码实际上是一个更好的版本。之前的代码我做过Save和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 是在关闭并再次打开之前保存记录,这是我能得到的最接近保存和刷新的记录。

关于javascript - crm 2013 javascript 保存和刷新崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23273585/

相关文章:

c# - 在 Microsoft Dynamics CRM 2013 上以编程方式生成邮件合并文档

dynamics-crm-2011 - MS CRM 2011 - 新的 Polaris UI - 我如何获得它?

javascript - svg文本元素内的不可见文本

javascript - 如何在java servlet中通过javascript刷新图像

javascript - 获取 div 的所有内容,包括新输入

php - 如何在更新数据库时刷新页面?

ios - 出列的 UICollectionViewCell 未刷新

dynamics-crm - 需要 Microsoft Dynamics CRM 中的操作的实时示例

javascript - 使用 Rxjs 的 `takeUntil` 自动取消订阅 - 无需等待发射?

javascript - 如何使用 jquery 点击时清空()