【Salesforce】Cannot modify a collection while it is being iterated.

【Salesforce】Cannot modify a collection while it is being iterated.

Apexでテストメソッドを作成していた時にエラーが発生しました。

System.FinalException: Cannot modify a collection while it is being iterated.

イテレータを使ってるコレクションを変更してはいけませんってことらしいです。

ソースコードを読んでみると、おかしな部分を見つけることができました。

Set<String> parentNameList;
List<Accoun> pAccList;
List<Accoun> accList;

// 親取引先の設定を作成する
parentNameList = new Set<String>();
parentNameList.add('Test1');
parentNameList.add('Test2');
parentNameList.add('Test3');

// 親取引先を作成する
pAccList = new List<Account>();
for(String name : parentNameList){

    Account acc = new Account();
    acc.Name = name;

    pAccList.add(acc);
}
insert pAccList;

// 取引先を作成する
accList = new List<Account>();
for(Account pAcc : pAccList){

    Account acc = new Account();
    acc.Name = 'Child' + pAcc;
    acc.ParentId = pAcc.Id;

    pAccList.add(acc);
    // 正しくはこちら
    //accList.add(acc);   
    
}

insert accList;

30行目の記述が良くないですね。

イテレータを使用しているコレクションの数を変更することができません。

SetやMapでも同じことが起きそうです。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です