blog
ブログ

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

画像

こんにちは!

今回は以前のプロジェクトで、ユーザのデータを移行したときに、はまった話をしたいと思います。

皆さまは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

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

翻訳

SFA/CRMに蓄積されている情報を活用する方法ガイド