tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Apexからパスワードリセットなどを実行するときに注意すること

Apexでユーザのパスワードリセットを行う場合、System.resetPasswordが用意されています。ユーザIDを引数としてして渡すことで任意のユーザのパスワードをリセットすることが可能です。

f:id:tyoshikawa1106:20150423231652p:plain


ただし、この処理はDMLの実行回数にカウントされます。そのため、ループ処理や一括実行で大量に処理を行うと『System.LimitException: Too many DML statements: 151』というようなエラーが発生します。


上記の問題があるのでApexトリガなどではSystem.resetPasswordを使った処理は実装しない方が良さそうです。次のサイトにこの問題とスケジュールバッチを使った対応方法が提案されていました。

salesforce.stackexchange.com


けっこうよくあるのが、処理対象の件数が少ないという前提条件ですが、通常の運用では問題なくても、データ移行の場合などに問題になるケースがあります。 (Apexバッチの場合はバッチサイズを制御することで一度の件数を減らすことも可能ですが、Apexトリガはそのように回避することができません。。)


ただ...Apexバッチの場合は実行までに時間がかかるというデメリットもあるので上記問題を把握した上で対応方法を検討するしかないのかなと思いました。。