レコードの所有者や特定ユーザだけカスタム項目を表示、更新させる
タイトルのような質問の投稿を見たので、それっぽいことを設定してみました。
chirosuke
2022/05/16 18:28:39
「特定のユーザだけ」であれば、プロファイルや権限セットなどで項目の参照、編集権限を付与するだけだと思いますが、レコードの所有者などのレコード内のユーザ項目が条件に加わる場合は少し工夫が必要です。
今回は以下の要件と手順で設定方法を紹介したいと思います。
<サンプルの要件>
取引先責任者のレコード所有者かユーザ情報のカスタム項目「PW管理者」にチェックがあるユーザのみ、取引先責任者のカスタム項目「パスワード」を表示、更新できるようにする
・レコード所有者以外に権限を付与(判定)するためのチェックボックス項目
こちらはユーザ情報の入力・管理が可能なプロファイルには権限を付与し、ページレイアウトに配置します。


・値を入力する項目(サンプルではデータ型をテキストで作成しています)
こちらは入力可能なプロファイルには権限を付与し、ページレイアウトに配置します。
・値を格納する項目(入力する項目と同じデータ型にしてください)
こちらはあとからすべてプロファイルの権限を外しますので、作成時点ではシステム管理者の権限が付与されていれば問題ありません。また、ページレイアウトには配置しません。

・値をマスクする数式項目
こちらは参照可能なプロファイルには権限を付与し、ページレイアウトに配置します。
サンプルではこのような数式にしています。
サンプルでは、「レコード所有者でもPW管理者でもないユーザ」がパスワード入力した場合にエラーとなるような数式にしています。
こちらの式の注意点は「ISCHANGED」の項目を「値を入力する項目」でなく、「値を格納する項目」にすることです。
フローが実行されると、入力項目は空白にされるので、入力項目でISCHANGEDにしても空白から空白のため機能しません。

ワークフロールールやプロセスビルダーでも設定可能ですが、廃止予定ですので、今回はフローの設定画面で紹介します。
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・オブジェクト:取引先責任者(対象の項目を作成したオブジェクト)
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
・更新されたレコードでフローを実行するタイミング:レコードを更新し、条件の要件に一致するたび(今回はどちらでも同じだと思います)
・フローを最適化:高速項目更新

3.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:変数
・データ型:テキスト(値を入力、格納する項目と同じデータ型にしてください)

4.[開始]の下の⊕から[割り当て]要素を追加し、以下のように設定します。

5.[割り当て]の下の⊕から[レコードを更新]を追加し、以下のように設定します。
・レコードを更新する条件の要件:なしー常にレコードを更新
・項目値をレコードに設定:

6.最後にフローを[保存]し[有効化]にします。

こちらの権限を外さないとページレイアウトに配置していなくても、リストビューやレポートで表示できてしまいます。
要件でシステム管理者を外す必要がなければこちらの手順は不要です。
・『兼田 ケンタ』さんのレコード所有者の「営業 三朗」
・『里見 リミ』さんのレコード所有者の「営業 宏美」
・PW管理者の「管理 和雄」(1.で作成したカスタム項目「PW管理者」にチェックを入れたユーザ)
まずは『兼田 ケンタ』さんのパスワードを「営業 三朗」が登録します。
パスワードが登録され、パスワードも表示されています。

次にPW管理者の「管理 和雄」で同じレコードを表示します。パスワードが表示されています。

「管理 和雄」でもパスワードを変更してみます。レコード所有者ではありませんが、PW管理者のため変更ができました。
(※パスワード項目に限らず、共有設定などで所有者以外でもレコードが更新できることが前提です)

では、所有者でもPW管理者でもない「営業 宏美」で同じレコードを表示してみます。
パスワードがマスクされています。

パスワードを変更してみます。入力規則が働き変更できませんでした。

今度は、『里見 リミ』さんのパスワードを「営業 宏美」が登録します。
パスワードが登録され、パスワードも表示されています。

次にPW管理者の「管理 和雄」で同じレコードでパスワードを変更してみます。
こちらもレコード所有者ではありませんが、PW管理者のため変更ができパスワードも表示されています。

最後に所有者でもPW管理者でもない「営業 三朗」で同じレコードのパスワードを変更してみます。
パスワードがマスクされ、変更もできませんでした。

変更履歴を取りたい場合は、「値を格納する項目」を履歴管理項目に追加します。こちらの場合は「値を格納する項目」の権限が付与されているユーザや権限を付与したときしか見えません。
最新の更新者や更新日時だけ確認できれば良い場合は、フローのレコード更新で更新者や更新日時のタイムスタンプを格納する項目を更新することを追加することで対応が可能です。
今回は以下の要件と手順で設定方法を紹介したいと思います。
<サンプルの要件>
取引先責任者のレコード所有者かユーザ情報のカスタム項目「PW管理者」にチェックがあるユーザのみ、取引先責任者のカスタム項目「パスワード」を表示、更新できるようにする
設定手順
1.カスタム項目の作成
2.入力規則の作成
3.フローの作成(項目自動更新)
4.「値を格納する項目」の項目レベルセキュリティの変更
1.カスタム項目の作成
<ユーザ>
サンプルの要件ではユーザの項目情報も使用するので、ユーザオブジェクトにチェックボックス項目を作成しますが、レコード所有者のみや、ロールやプロファイルなど既にあるユーザ情報を使用される場合は、ユーザへのカスタム項目の作成は不要です。・レコード所有者以外に権限を付与(判定)するためのチェックボックス項目
こちらはユーザ情報の入力・管理が可能なプロファイルには権限を付与し、ページレイアウトに配置します。
<取引先責任者>
取引先責任者に「値を入力する項目」、フローで「値を格納する項目」、「値をマスクする数式項目」を作成します。・値を入力する項目(サンプルではデータ型をテキストで作成しています)
こちらは入力可能なプロファイルには権限を付与し、ページレイアウトに配置します。
・値を格納する項目(入力する項目と同じデータ型にしてください)
こちらはあとからすべてプロファイルの権限を外しますので、作成時点ではシステム管理者の権限が付与されていれば問題ありません。また、ページレイアウトには配置しません。
・値をマスクする数式項目
こちらは参照可能なプロファイルには権限を付与し、ページレイアウトに配置します。
サンプルではこのような数式にしています。
IF(ISBLANK(値を格納する項目),"",IF(OR($User.Id = Owner.Id , ユーザのチェックボックス項目 ), 値を格納する項目,"レコード所有者とPW管理者のみ表示")) |
2.入力規則の作成
項目への入力の制限は入力規則で設定します。サンプルでは、「レコード所有者でもPW管理者でもないユーザ」がパスワード入力した場合にエラーとなるような数式にしています。
AND($User.Id <> Owner.Id , NOT( ユーザのチェックボックス項目),ISCHANGED(値を格納する項目)) |
フローが実行されると、入力項目は空白にされるので、入力項目でISCHANGEDにしても空白から空白のため機能しません。
3.フローの作成
このフローで実施させたいことは「”値を入力する項目”に値が入力されたら、その値を”値を格納する項目”に転記し、”値を入力する項目”の値を削除する」の項目自動更新です。ワークフロールールやプロセスビルダーでも設定可能ですが、廃止予定ですので、今回はフローの設定画面で紹介します。
1.[設定] から、[クイック検索] で「フロー」を検索し、[フロー]をクリックし[新規フロー]ボタンをクリックします。
2.「レコードトリガフロー」を選択し、以下のように開始を設定します。
・オブジェクト:取引先責任者(対象の項目を作成したオブジェクト)
・フローをトリガする条件:レコードが作成または更新された
・エントリ条件を設定:
[条件の要件] すべての条件に一致(AND)
項目 | 演算子 | 値 |
password_input__c (値を入力する項目) | 次の文字列と一致しない | 空文字列 (null 以外) |
・フローを最適化:高速項目更新
3.左側のマネージャの[新規リソース]をクリックし、以下のように設定します。
・リソース種別:変数
・データ型:テキスト(値を入力、格納する項目と同じデータ型にしてください)
4.[開始]の下の⊕から[割り当て]要素を追加し、以下のように設定します。
変数 | 演算子 | 値 |
var_password (3.で作成した変数を選択) | 次の文字列と一致する | $Record > パスワード入力 (値を入力する項目) |
5.[割り当て]の下の⊕から[レコードを更新]を追加し、以下のように設定します。
・レコードを更新する条件の要件:なしー常にレコードを更新
・項目値をレコードに設定:
項目 | 値 |
password_input__c (値を入力する項目) | 空文字列 (null 以外) |
password_storage__c (値を格納する項目) | var_password (3.で作成した変数を選択) |
6.最後にフローを[保存]し[有効化]にします。
4.「値を格納する項目」の項目レベルセキュリティの変更
最後に「値を格納する項目」の全プロファイルの権限を外します。作成時点でシステム管理者を外してしまうと、フローで選択できなくなってしまうので、すべての設定が終わってから権限を外します。こちらの権限を外さないとページレイアウトに配置していなくても、リストビューやレポートで表示できてしまいます。
要件でシステム管理者を外す必要がなければこちらの手順は不要です。
【結果確認】
今回は3人のユーザで検証いたします。・『兼田 ケンタ』さんのレコード所有者の「営業 三朗」
・『里見 リミ』さんのレコード所有者の「営業 宏美」
・PW管理者の「管理 和雄」(1.で作成したカスタム項目「PW管理者」にチェックを入れたユーザ)
まずは『兼田 ケンタ』さんのパスワードを「営業 三朗」が登録します。
パスワードが登録され、パスワードも表示されています。
次にPW管理者の「管理 和雄」で同じレコードを表示します。パスワードが表示されています。
「管理 和雄」でもパスワードを変更してみます。レコード所有者ではありませんが、PW管理者のため変更ができました。
(※パスワード項目に限らず、共有設定などで所有者以外でもレコードが更新できることが前提です)
では、所有者でもPW管理者でもない「営業 宏美」で同じレコードを表示してみます。
パスワードがマスクされています。
パスワードを変更してみます。入力規則が働き変更できませんでした。
今度は、『里見 リミ』さんのパスワードを「営業 宏美」が登録します。
パスワードが登録され、パスワードも表示されています。
次にPW管理者の「管理 和雄」で同じレコードでパスワードを変更してみます。
こちらもレコード所有者ではありませんが、PW管理者のため変更ができパスワードも表示されています。
最後に所有者でもPW管理者でもない「営業 三朗」で同じレコードのパスワードを変更してみます。
パスワードがマスクされ、変更もできませんでした。
注意事項
今回紹介した設定方法では、項目履歴管理に「値を入力する項目」を追加してしまうとマスクしたい値が履歴から見えてしまうことです。変更履歴を取りたい場合は、「値を格納する項目」を履歴管理項目に追加します。こちらの場合は「値を格納する項目」の権限が付与されているユーザや権限を付与したときしか見えません。
最新の更新者や更新日時だけ確認できれば良い場合は、フローのレコード更新で更新者や更新日時のタイムスタンプを格納する項目を更新することを追加することで対応が可能です。
コメント