目前我正在使用批量修改功能处理问题。我正在努力实现以下目标。我也给出了下面的代码。
在函数中,我使用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);
}
}
}
答案 0 :(得分:0)
简短的回答是否定的,您可以在批量编辑表单上执行javascript(OData假定在CRM中使用javascript)。好消息是,您可以在插件中执行该逻辑,该插件将按预期执行批量编辑。在插件中,您可以使用前后实体图像来比较值之前和之后,因此您可以灵活地选择要执行的逻辑。
您的问题对于最终的期望结果有点令人困惑,但如果您想回滚事务(不更新值),那么您可以针对您不想更新的记录抛出InvalidPluginExecutionException,或者只需让执行完成以允许更新持续存在。