【问题标题】:Create New Form not reload after save保存后创建新表单不重新加载
【发布时间】:2014-03-04 05:41:51
【问题描述】:

crm 2011 中运行良好,但在 crm 2013 在线中运行不佳

在机会实体创建新记录表单时,我只显示:

1.一些属性(所有其他字段/部分/选项卡都隐藏在表单上)
2.还有一个Html按钮喜欢

function OnFormLoad(){   
  if(Xrm.Page.ui.getFormType() == 1 ) {

     SetRequiredLevelToNone();

     createHtmlButton("Save");

     HideTabsAndSections()    

  }
  else {    

  }
}

点击Html按钮会触发以下功能。

function showWholeForm() {
  Xrm.Page.data.entity.save();
}

我想在保存后显示表单的所有字段,意味着要重新加载整个表单。
在 crm 2011 工作

【问题讨论】:

    标签: dynamics-crm dynamics-crm-2013


    【解决方案1】:

    CRM 2013 中的save 方法将不再刷新页面。在这种情况下应该使用新的 refresh 方法,如下所示:

    Xrm.Page.data.refresh(save).then(successCallback, errorCallback);
    
    • save:如果应该保存数据,则作为 true 传递的布尔值 刷新后。
    • successCallback:操作成功时调用的函数
    • errorCallbak:操作失败时调用的函数,将传递一个具有 2 个属性的对象 - 错误代码(数字)和本地化错误消息(字符串)

    您可以在此处找到记录的方法:http://msdn.microsoft.com/en-us/library/dn481607(v=crm.6).aspx

    【讨论】:

    • 根据 sdk 2013 刷新方法仅适用于更新的实体。
    • 更新实体的定义::所有自定义实体和某些系统实体都有更新的用户界面,包括使用命令栏和新的表单 API。更新后的系统实体如下表所示:
    • 我尝试过 Xrm.Page.data.refresh(true/false) 和 Xrm.Page.data.save().then(--,--) 但我的字段或未显示我让它们通过代码 if(Xrm.Page.ui.getFormType() == 1 ){---} 隐藏在创建新记录表单中
    【解决方案2】:

    如果您希望与 CRM 2011 保持一致性,我认为您应该首先禁用自动保存。

    function OnSaveDisableAutoSave(eventArgs) {
       var saveType = eventArgs.getEventArgs().getSaveMode();
       if (saveType == 70 ||saveType  == 2)
       { //Disable AutoSave
          eventArgs.preventDefault();
       }
    }
    

    然后

    function showWholeForm() {
       Xrm.Page.data.refresh(true).then(successCallback, errorCallback);
    }
    

    【讨论】:

    • 谢谢,但这不起作用。我已经以这种方式进行了一次又一次的测试以确认我再次测试了这个。
    【解决方案3】:

    要解决此问题,您可以这样做:

    var saved = false;
    
    function onLoad(){
        checkIfFormShouldBeReadOnly();
        attachEvent();
    }
    
    function attachEvent() {
        Xrm.Page.data.entity.addOnSave(executeOnSave);
    }
    
    function executeOnSave(saveExecution) {
        if (!saved) {
           saved = true;
           Xrm.Page.data.save().then(
              function () {
                 checkIfFormShouldBeReadOnly();
              },
              function (errorCode, message) {
                 Xrm.Page.data.refresh();
              }
           );
       }
    }
    

    【讨论】:

    • 我想在创建记录后显示表单上的所有字段和部分。因为我在创建记录期间隐藏了一些字段和部分。就像在 2011 年一样,在创建记录后,整个表单重新加载,从头开始渲染整个表单字段,无需任何代码来显示我在创建过程中隐藏的字段和部分。
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多