※ご利用は計画的に※ユーザに一括で仮パスワードを設定する方法!
こんにちは!
今回は以前のプロジェクトで、ユーザのデータを移行したときに、はまった話をしたいと思います。
皆さまはSalesforceにユーザを作成する場合、ユーザのパスワードはどのように設定しているでしょうか。
殆どの場合は、ユーザ作成時か任意のタイミングで画面から「パスワードリセット」を行ない、 実際に利用するユーザの方にパスワードを設定していただいていると思います。
ただ、そのパスワードリセットが使えないケースも稀にありますよね。
・何らかの理由でユーザにメールを送りたくない
・ログイン可能なIP範囲とメールを利用するネットワークが異なる
・同一の仮パスワードを一括で設定したい etc…
今回はそういった理由により、パスワードリセットが利用できない場合のパスワード設定方法についてです。
ユーザパスワードを設定する方法
ユーザオブジェクトを登録した後に、パスワードを設定するには、開発者コンソールからSystem.setPasswordメソッドを使用できます。
Apex 開発者ガイド (Page: 2761) https://resources.docs.salesforce.com/204/latest/ja-jp/sfdc/pdf/salesforce_apex_language_reference.pdf
開発者コンソールの匿名実行Apexツールで実行
開発者コンソールの
[Debug]->[Open Execute Anonymous Window]
で匿名実行Apexツールを開き、 下記コードを貼り付けて[Execute]ボタンをクリックします。
system.setPassword('hogehogehogehoge','test0001');
上記のサンプルでは、hogehogehogehogeがユーザーID、test0001が登録したいパスワードです。
実行するとこんな感じになります。
以下のサンプルコードでは、すべてのアクティブユーザーのパスワードを設定しています。
List<User> users = [SELECT Id, Username FROM User WHERE isActive = true ORDER BY Username ]; for(User u : users){ System.setPassword(u.Id, 'Salesforce0000'); }
注意点
151人以上のアクティブユーザーがいる場合、ガバナ制限に引っ掛かり、エラーが発生します。(2017年11月現在)
パスワードを設定するための各呼び出しが1つのDMLステートメントと見なされるため、150を超えるユーザーには機能しません。
「System.LimitException: Too many DML statements: 151」
もし、パスワードを設定する必要がある場合は、ガバナ制限にも注意して利用しましょう。
正しく利用すると大変便利な機能ですが、安易に利用すると、パスワード変更をすべきではないユーザの パスワードも、誤って変更してしまう可能性があります。
ご利用の際には、用途、目的、実行者を明確にした後、利用するようにしてください。
※初期データ移行の時以外は、パスワードリセットボタンの運用をお勧めします!