blog
ブログ

Salesforce技術ブログ:※ご利用は計画的に※ユーザに一括で仮パスワードを設定する方法!

こんにちは!ぼーの☚です!!
先日、タレントの間寛平氏の講演会「アースマラソンの裏側 すべて話します!」を聞きに行きましたが、やはりトークが上手ですね。

さて、今回は以前のプロジェクトで、ユーザのデータを移行したときに、はまった話をしたいと思います。
皆さまは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」

https://salesforce.stackexchange.com/questions/10335/governor-limits-in-relation-to-system-setpassword

もし、パスワードを設定する必要がある場合は、ガバナ制限にも注意して利用しましょう。

正しく利用すると大変便利な機能ですが、安易に利用すると、パスワード変更をすべきではないユーザの
パスワードも、誤って変更してしまう可能性があります。
ご利用の際には、用途、目的、実行者を明確にした後、利用するようにしてください。
※初期データ移行の時以外は、パスワードリセットボタンの運用をお勧めします!

contact

ご相談・ご質問等ございましたら、お気軽にお問い合わせください。

翻訳