[SFDC]ロールに紐付くユーザを取得するSOQL

ロールからユーザを検索する場合は以下のようなSOQLで取れる。

UserオブジェクトのuserRoleIdがUserRoleオブジェクトのIdと参照関係にある(らしい)ので、サブクエリが使える。
今作っているシステムで、「ショップ」というカスタムオブジェクトを作り、レコード登録時に自動でショップ用のロールを登録するようにしたので、
逆にショップ削除時には、対応するロールも削除するようにしたかった。
単純にロールをdeleteしにいくと、そのロールを付与されているユーザがいる場合は削除不可でこけてしまうので、
削除対象のロールを持つユーザは、ロール無しにしてからActivateフラグを倒して削除扱いするようにした。これはこれで微妙だけれども。
以下サンプルコードなど。

ショップのレコード削除時にトリガが動く。
ショップコードとロール名が対応付けられているので削除対象のショップからロール名が取得できる。
トリガから以下のメソッドにロール名を渡してユーザの削除処理を実行する。
ユーザが削除できたら安心してロールを削除する。

引数はロール名のリストになっている。実はショップの親として「グループ」というオブジェクトがあって、
ショップ同様グループにも対応するロールがあるので、グループ削除時はグループ用のロールに加えて
配下のショップ及びショップ用ロールの削除も必要なのだった。
ということで複数ロールを指定できるように引数はリストにしてある。

ループの中でDMLするのはよろしくないみたいなことを聞いた気がするので
更新後のオブジェクトをリストにためておいてまとめてupdateするようにしてみた。
Database.update()とかすると戻り値で結果オブジェクトみたいなのを返してくれてエラーハンドリング
しやすいらしい。


コメントを残す