tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:無効ユーザをレコードの所有者に設定するときの制限について

Salesforceでは所有者の項目をつかって誰が担当しているレコードかを管理できます。通常の運用時には気にする必要がありませんが、過去のデータなどで既に無効になったユーザを所有者として設定したいことがあると思います。ですが無効になったユーザは所有者として指定することができません。そのためこういった操作を行うには一時的に有効化にして設定していく必要があります。
f:id:tyoshikawa1106:20170604171744p:plain


検証してみたところApex処理から所有者更新処理を行ってもエラーとなります。
f:id:tyoshikawa1106:20170604172429p:plain
f:id:tyoshikawa1106:20170604173006p:plain:w300


開発者コンソールのクエリエディターでも不可です。
f:id:tyoshikawa1106:20170604172140p:plain
f:id:tyoshikawa1106:20170604172245p:plain


Apexトリガ経由でもエラーとなりました。
f:id:tyoshikawa1106:20170604173150p:plain


ですが無効ユーザを所有者にセットできる特殊なパターンがあります。Apexトリガのafter updateで参照先レコードの所有者を更新する場合です。今回取引先と取引先責任者で確認しました。

更新前の取引先

f:id:tyoshikawa1106:20170604174532p:plain

更新前の取引先責任者

f:id:tyoshikawa1106:20170604174612p:plain


検証用に下記のトリガを用意しました。
f:id:tyoshikawa1106:20170604174710p:plain
※雑につくった書き方です。通常の開発ではマネしないでください。。


これで取引先責任者を更新してApexトリガを動かすと無効ユーザで更新できます。
f:id:tyoshikawa1106:20170604174929p:plain



ということで上記のようなパターンなら無効ユーザでも所有者としてセットすることが可能です。

補足

今回の件ですが、始めに上記パターンで所有者をセットできたことに気づきました。それでApex経由なら無効ユーザでも大丈夫と勘違いしたのですが、それができるのは一部のパターンだけで実際にはApex経由でも所有者としてセットできないみたいです。なので過去データをキレイにする場合は一時的にユーザを有効化して更新してから無効に戻す必要があります。

おまけ

この検証中にもう一つ気づいた仕様があります。無効になったユーザのレコードを引き継ぐため所有者を有効なユーザに変更したときの場合です。取引の所有者を切り替えると取引先責任者の所有者も自動で切り替わりました。無効ユーザの扱いまわりはこういった仕組みが用意されているみたです。