こんにちは、にいるです
よくあるログインするユーザによって処理を変えたいって場面に遭遇することってありますよね
例えばログインユーザのプロファイル毎にページに表示する内容を変えたい、制御したいなど
今回はそれを実現できるUserInfoクラスを実際に使用してApexを書いてみたいと思います
1.UserInfoクラスとは
Userinfoのメソッドは下記があります
→Apex開発者ガイド「UserInfo クラス」
# | メソッド | 内容 |
1 | getDefaultCurrency() | ユーザが参照するデフォルトの通貨コード |
2 | getFirstName() | ユーザの名前 |
3 | getLanguage() | ユーザの言語 |
4 | getLastName() | ユーザの姓 |
5 | getLocale() | ユーザのロケーション |
6 | getName() | ユーザのフルネーム |
7 | getOrganizationId() | 組織のID |
8 | getOrganizationName() | 組織名(会社名) |
9 | getProfileId() | プロファイルID |
10 | getSessionId() | セッションID |
11 | getTimeZone() | ローカルタイムゾーン |
12 | getUiTheme() | ユーザに推奨するUIテーマ |
13 | getUiThemeDisplayed() | ユーザの現在のUIテーマ |
14 | getUserEmail() | メールアドレス |
15 | getUserId() | ユーザID |
16 | getUserName() | ユーザ名 |
17 | getUserRoleId() | ユーザの所属するロールID |
18 | getUserType() | ユーザのデータ型(SOQLで叩くとStandardが返ってきました) |
19 | isCurrentUserLicensed(namespace) | 指定した名前の管理パッケージに対するライセンスがあるかどうか |
20 | isCurrentUserLicensedForPackage() | 指定したIDの管理パッケージに対するライセンスがあるかどうか |
21 | isMultiCurrencyOrganization() | 組織がマルチ通貨を使用するかどうか |
まず、ユーザ判定で使いやすそうなものは6の名前か15のユーザIDですね
次に部署単位やグループ単位など実組織上でクラスを制御したい場合に、プロファイル、ロールIDあたりが使えそうです
また、他のSalesforce環境と繋いでいるのであれば、組織単位で使用できるものがありますね
他にもグローバルな組織であればロケールや言語をみたりすることも出来ますし、ライセンスなんかも使える場面がありそうです
今回はこの中から「9.getProfileId()」を使用してプロファイルで表示内容を制御するプログラムを作成したいと思います
2.コーディング(Apex)
最初に18桁のプロファイルIDをSOQLで取得して用意します
それを変数に入れておいてassertEqualsで判定するというものを作成してみました
1 2 3 4 |
String myp = '00e0o0000026FpwAAE'; String test = userinfo.getProfileId(); System.debug(test); System.assertEquals(test, myp); |
コンパイルは成功して、debugの方にも同じ値が表示されたのでうまく取得できています
※環境が違うので、このまま使うとassertEquoalsでコンパイルできないと思うので、注意してください
3.まとめ
いかがでしたでしょうか
このクラスをうまく使えば、If文での分岐で特定のユーザにだけ可能な処理を実行できるApexクラスを作成することができそうですね
よく使うロジックだと思うので、まずはプロファイルやロールで判断するメソッドが作成できると覚えておくといいと思います
ではでは!