CRM 2011批量编辑表单:如何为每条记录记录更新一些具有不同值的表单字段?

时间:2015-03-23 15:57:36

标签: javascript dynamics-crm-2011 odata fieldset bulkupdate

目前我正在使用批量修改功能处理问题。我正在努力实现以下目标。我也给出了下面的代码。

  1. 在批量修改表单上,从2个选项集中选择值。
  2. 在value2的change事件中,它调用一个javascript函数。
  3. 在函数中,我使用window.dialogArguments将所有选择进行批量编辑的记录提取到变量中。 现在在for循环中,我逐个获取记录,然后对于每个记录,我执行以下操作:  一个。对于每条记录,使用seleted选项集值和当前记录数据中的更多值,它会检查条件并决定要设置的最终值集。 湾它尝试使用OData更新为批量编辑表单上的某些(比如5)可用字段设置这些最终值。

    它正在执行循环,获取记录,将其分配给实体对象,执行OData调用并更新在步骤1中选择的值(即选项集值),这对于所有记录都是相同的。  对于这5个字段,它应根据条件和从步骤b检索的最终值集来设置值。

    而不是这样,它为所有记录设置5个字段值,相当于从步骤b中检索的值,用于最后一条记录。

    我怀疑的是,在关闭批量编辑表单之前的最后,它为所有具有相同值的记录覆盖了这5个字段值(这是批量编辑的deafult功能,我理解)

    如何防止最后覆盖数据值并保留以前使用OData更新的值?

    我现在有点困惑。任何帮助都非常感谢。 以下是示例代码:

        if (Xrm.Page.ui.getFormType() == 6) { 
        var records = window.dialogArguments; 
        for(i=0; i<records.length;i++){ 
         // oDataEndpointUrl Fetch
         var requestResultsOpp= fetchData(...);
    
         var optionset1 = Xrm.Page.getAttribute("optionset1").getValue();
         var optionset2 = Xrm.Page.getAttribute("optionset2").getValue();
    
         if (requestResultsOpp != null) {
          var case_value = requestResultsOpp.field;
          var entityObject = new Object();
    
         /* Check values from optionset and perform some condition checks */ 
    
         if (some condition ) {
          switch (case_value) {
          case 3 /* XYZ */:
          case 4 /* ABCD */:
          case 5 /* PQR */:
           if (optionset1 == 1 && optionset2 == 11)
                  Set the 5 fields values
           if (optionset1 == 1 && optionset2 == 12 )
                  Set the 5 fields values
            break;
        default:
           if (optionset1 == 2 && optionset2 == 12 )
              Set the 5 fields values
             break;
         }
        }
    
       entityObject.optionset1 = {Value: optionset1};
       entityObject.optionset2 = {Value: optionset2}; 
       entityObject.Field1 = {Value: field1};
       entityObject.Field2 = {Value: field2};
       entityObject.Field3 = {Value: field3};
       entityObject.Field4 = {Value: field4};
       entityObject.Field5 = {Value: field5};
    
       // oDataEndpointUrl update
       updateRecordSync("entityName", record[i] ,  entityObject);
      }
     }
    }
    

1 个答案:

答案 0 :(得分:0)

简短的回答是否定的,您可以在批量编辑表单上执行javascript(OData假定在CRM中使用javascript)。好消息是,您可以在插件中执行该逻辑,该插件将按预期执行批量编辑。在插件中,您可以使用前后实体图像来比较值之前和之后,因此您可以灵活地选择要执行的逻辑。

您的问题对于最终的期望结果有点令人困惑,但如果您想回滚事务(不更新值),那么您可以针对您不想更新的记录抛出InvalidPluginExecutionException,或者只需让执行完成以允许更新持续存在。