できると思ってたけど実は出来なかった、
そんな細かいところまで考慮してなかった
など経験者でも陥りやすい罠について記録してみます。
■活動のリストビューではインライン編集ができない
設定画面の
ビルド> カスタマイズ> ユーザ> ユーザインターフェース
にある「インライン編集を有効化」
をオンにしているんですが、できませんね。
詳細画面では可能なようです。
■ユーザへの参照項目を必須項目とすることができない
カスタムオブジェクトを作成し、ユーザへの参照項目を作成すると、
必須オプションが表示されず、参照項目を必須項目に設定することができませんでした。
画面からの入力レベルで良ければレイアウトで必須設定で対応
データ連携も含めて弾きたければ、入力規則、トリガ
で制御する必要があるようです。
■ユーザは参照項目を作れない
ユーザのカスタム項目では参照項目を作れません。
少なくとも標準のGUIでは用意されていませんでした。
項目自動更新を使えるのは
項目自動更新を利用できるのは、子の変更内容を親に反映させたいときだけ
親から子だと、子は複数いるので一括変更になるからです。
発火条件として新規作成時、編集時、特定の条件を満たす編集時があります。
条件設定は数式が使えるので、工夫次第で色々使えます。
インライン編集が無効になる場合
レコードの View のインライン編集を使った項目の一括更新は、以下の場合に無効になり、その項目だけインライン編集が不可能になります。
・項目の連動関係
・View でレコードタイプの絞込条件が設定されていない場合(レコードタイプが2つ以上設定されている時)
■新規作成ボタンを全てのレイアウトから削除できない?
※以下の記述はプロファイルのオブジェクト権限で「すべて更新」を
オンにしたまま「新規」をオフにできるという観点が抜けているため、
関連するバックエンド処理(Apex等)がWith Sharingで記述されていない限り、
オブジェクト権限の設定で対処することができます。
作成はトリガで行うけど、編集はユーザ操作でできるようにしたい
かつ他人所有のレコードも編集したい要件の場合の話になります。
オブジェクト権限で作成権限を与えているプロファイルのユーザでは、
親レコードの関連リスト、リストビュー、レコード参照画面からは
「新規作成」ボタンは削除できるのですが、
タブを押したときに最初に表示される「タブ画面?」からは消去できないようです。
どうしても「新規作成」ボタンを表示させたくない場合は、
タブの表示権限をなくすか、オブジェクトの作成権限をなくすしかなさそうです。
Classicに変更してもダメです。
実は、オブジェクトの新規作成の権限をオフにしても、
共有設定次第で他人所有のレコードの編集を可能にすることはできそうですが
共有設定の変更はセキュリティモデル全体への影響があるので、慎重に検討する必要はあります。
具体的には、共有設定を変更可にするとくことです。
他の解決方法としては、新規作成ボタンは表示させるけど、
新規ボタンの割当をVFページにし、そのページで新規作成はできない旨を案内するという方法や、Beforeトリガで弾いてしまうという方法も考えられます。
標準ボタンをVFで上書いてしまう方法の注意点については、次でお話します。
■削除ボタンを全てのレイアウトから削除できない?
※プロファイルのオブジェクト権限の「すべて更新」と「削除」は
連動しているため、「すべて更新」をオンかつ「削除」をオフ
という設定ができません。
なので下記の内容は正しく記述されています。
前述のパターンと似ているのですが、他人所有のレコードを編集させたいがために
オブジェクト権限ですべて変更をチェックを入れている場合、削除権限のチェックを単独で外すことはできません。
削除ボタンについても、ある程度設定やレイアウトで削除ボタンを
非表示にすることは可能ですが、どうしても消せない場所があります。
親オブジェクトの関連リストからレコードを参照したときの右側にある、
その他の操作のボタンリストには新規や削除があります。
新規ボタンは親オブジェクトのレイアウトにより非表示にすることはできますが、
削除ボタンについては現状レイアウト設定からは非表示にすることはできません。
この場合についても、削除ボタンをユーザ操作でレコードを削除できない旨の
VF画面で上書いてしまうという方法が取れます。
しかしこの標準ボタンを上書きしてしまう方法は、プロファイルに関係なく
一律VFの処理に動きが統一されてしまうため、
システム管理者であっても削除ボタンを押した時は同様のVF画面が表示されることになります。
Apexでコントローラを作成してあれこれできなくはないですが、
消せない削除ボタン一箇所のために、個別開発をするというのも考えものです。
お客様と運用で回避することで握れるのであれば、
ここまでする必要もないと思われます。
ちなみにですが、共有設定を変更可にしてオブジェクト権限の削除のチェックを外せば
要件を満たせそうですが、セキュリティモデルを大きく変更することになりますので、
この方法を取る場合は慎重に検討する必要があります。
■システム管理者プロファイル以外のユーザは、DataSpiderから公開グループをInsertできない
Salesforceのヘルプでは、下記の記述があります。
公開グループを作成および編集できるのは管理者と代理管理者のみですが、誰でも自分の非公開グループを作成および編集できます。
https://help.salesforce.com/articleView?id=creating_and_editing_groups.htm&type=5
DataSpider連携用にユーザを作成して、連携用のプロファイルを作成している場合、
そもそも公開グループの作成権限がない可能性があります。
公開グループの作成権限がないユーザを代理管理者に設定すれば、
公開グループを作成できると思い、試してみたのですが、
APIを利用しての公開グループの登録は禁止されていて、エラーにより弾かれてしまいました。
代理管理者が悪いことをできないようにセキュリティがしっかりと考えられているようです。
Salesforceはやはりセキュリティがしっかりしていますねと思わされる事象でした。