0

解決策が見えない奇妙な動作が見られます。任意の提案をいただければ幸いです。キーと値のペアが確実に入力されたマップがあります。次に、更新する前に、提供されたマップ メソッドごとにマップ値をリストに渡そうとします。すぐにこれを行うと、何らかの理由でリストに渡されたばかりのレコードの値が失われ、更新できなくなります。コードとデバッグ ログが続きます。

コード (デバッグ行を削除):

if(!posMap.isEmpty()){
   List<Position__c> posUpdates = new List<Position__c>();
   posUpdates = posMap.values();
   update posUpdates;
}

デバッグ ログ:

    USER_DEBUG|[403]|DEBUG|posUpdate record -->Position__c:{Affiliation_Final__c=a03N0000000mQEKIA2, Position_Type__c=Warden, Id=a07N0000000iA6lIAE}
11:21:17.825 (825365000)|SYSTEM_METHOD_EXIT|[403]|System.debug(ANY)
11:21:17.825 (825386000)|SYSTEM_METHOD_ENTRY|[404]|String.valueOf(Object)
11:21:17.825 (825402000)|SYSTEM_METHOD_EXIT|[404]|String.valueOf(Object)
11:21:17.825 (825413000)|SYSTEM_METHOD_ENTRY|[404]|System.debug(ANY)
11:21:17.825 (825418000)|USER_DEBUG|[404]|DEBUG|id ->null
11:21:17.825 (825422000)|SYSTEM_METHOD_EXIT|[404]|System.debug(ANY)
11:21:17.825 (825439000)|SYSTEM_METHOD_ENTRY|[405]|String.valueOf(Object)
11:21:17.825 (825453000)|SYSTEM_METHOD_EXIT|[405]|String.valueOf(Object)
11:21:17.825 (825464000)|SYSTEM_METHOD_ENTRY|[405]|System.debug(ANY)
11:21:17.825 (825468000)|USER_DEBUG|[405]|DEBUG|Affiliation_Final__c ->null
11:21:17.825 (825472000)|SYSTEM_METHOD_EXIT|[405]|System.debug(ANY)
11:21:17.825 (825516000)|DML_BEGIN|[406]|Op:Update|Type:Position__c|Rows:2
11:21:17.826 (826821000)|DML_END|[406]
11:21:17.826 (826971000)|EXCEPTION_THROWN|[406]|System.DmlException: Update failed. First exception on row 0; first error: MISSING_ARGUMENT, Id not specified
4

2 に答える 2

2

このエラーは、posMap にあるレコードがデータベースから取得または挿入されていないことを示しています。

upsert 操作は、データベースにまだないものを挿入し、あるものを更新します。

upsert posMap.values();
于 2013-01-29T08:18:32.107 に答える
0

レコードがデータベースに存在する場合はupdate posMap.values();、マップが空であるかどうかの不要なチェックを試みます。そうでない場合は、update を insert または upsert に変更します。

于 2013-01-29T07:17:57.530 に答える