現在、一括編集機能を使用しているときに問題に対処しています。私は以下を達成しようとしています。また、以下のコードを提供しました。
- 一括編集フォーム で、2 つのオプション セットから値を選択します。
- value2 の変更イベントで、javascript 関数を呼び出します。
関数では、window.dialogArguments を使用して、一括編集用に選択されたすべてのレコードを変数にフェッチしています。for ループで、レコードを 1 つずつ取得し、各レコードに対して次のことを行います。レコードごとに、選択されたオプションセット値と現在のレコード データからのいくつかの値の両方を使用して、条件をチェックし、設定する最終的な値のセットを決定します。b. OData 更新を使用して、その特定のレコードに対して、一括編集フォームで使用可能なフィールドの一部 (たとえば 5 ) にこれらの最終値を設定しようとします。
ループを実行し、レコードをフェッチし、それをエンティティ オブジェクトに割り当て、OData 呼び出しを実行し、ステップ 1 で選択した値 (つまり、オプションセット値) を更新します。これらはすべてのレコードで同じです。これらの 5 つのフィールドについては、条件に従って値を設定し、ステップ b で取得した最終値セットを設定する必要があります。
その代わりに、最後のレコードのステップ b から取得した値と同等のすべてのレコードに 5 つのフィールド値を設定しています。
私が疑っているのは、最後に一括編集フォームを閉じる直前に、すべてのレコードのこれらの 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);
}
}
}