0

目前我在使用批量编辑功能时遇到问题。我正在努力实现以下目标。我也给出了下面的代码。

  1. 在批量编辑表单上,从 2 个选项集中选择值。
  2. 在 value2 的 change 事件上,它调用一个 javascript 函数。

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

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

取而代之的是,它为所有记录设置了 5 个字段值,这些值等同于从步骤 b 检索到的值,用于最后一条记录。

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

如何防止最后一次覆盖数据值并保持之前使用 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);
  }
 }
}
4

1 回答 1

0

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

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

于 2016-01-11T19:06:59.720 回答