1

私はSalesforceを初めて使用し、リード/連絡先/アカウントのページレイアウトを作成して、特別な所有者の可視性を持たせることを検討していました。

標準のSalesforceページレイアウトを使用して必要に応じて詳細ページを表示していますが、表示しているユーザーがレコードの所有者であるかどうかに基づいて、レイアウトのセクションを表示または非表示にするにはどうすればよいですか。


望ましいシナリオ

レコードRはユーザーAが所有しています。レコードRの詳細ページは標準のSalesforceページレイアウトであり、2つのセクションがあります。1つのセクションには連絡先情報(所有者であるユーザーAのみが表示できます)が含まれ、もう1つのセクションには追加情報(すべてユーザーが見ることができます)。


ドキュメントを確認しましたが、私が見ることができる唯一の方法は、カスタムコントローラーまたは拡張機能を構築することです。これが唯一の方法ですか?もしそうなら、完全に新しいページを作成するのではなく、ページレイアウトのセクションのみを変更するための優れたウォークスルーを持っている人はいますか?

4

1 に答える 1

3

最善のオプション(アプローチ1)は、フィールドをFieldSetに分割し(Visualforceでのフィールドセットの操作を参照)、それらのFieldSetを使用して表示するフィールドを決定し、特定のFieldSetのみを表示するVisualforceページを使用して詳細ページをオーバーライドすることです。ページを表示しているユーザーは、レコードの所有者です。このアプローチでは、カスタムコントローラー/拡張機能は必要ありません。ページのさまざまなセクションを非所有者に非表示にし、ドラッグアンドドロップのFieldSetエディターを使用して各セクションのフィールドを変更できます。これは、ドラッグアンドドロップページレイアウトエディタと非常によく似ています。

カスタムコントローラー/拡張機能も必要としない別の方法(アプローチ2)は、所有者にのみ表示するフィールドを含むVisualforceページを作成し、実行中のユーザーがレコード所有者である場合にのみこれらのフィールドをレンダリングすることです。その後、このVisualforceページをページレイアウトに追加できます。このアプローチをお勧めしない理由は、このページのフィールドのスタイルを他の標準ページレイアウトと一致させるのは面倒だからです。

参考までに、Visualforceを使用せずに標準のページレイアウトのセクションを表示/非表示にする簡単な方法(JavaScriptハックなし)はありません。

アプローチ1:

<apex:page standardController="Contact">
     <!-- Fields everyone should see -->
     <!-- (stored in the 'FieldsEveryoneSees' fieldset) -->
     <apex:repeat value="{!$ObjectType.Contact.FieldSets.FieldsEveryoneSees}" var="f"> 
         <apex:outputField value="{!Contact[f]}" /><br/>
     </apex:repeat>
     <!-- Fields only the Owner should see -->
     <!-- (stored in the 'OwnerOnlyFields' fieldset) -->
     <apex:repeat value="{!$ObjectType.Contact.FieldSets.OwnerOnlyFields}" var="f"
              rendered="{!$User.Id == Contact.OwnerId}"> 
         <apex:outputField value="{!Contact[f]}" /><br/>
     </apex:repeat>
</apex:page>

アプローチ2:

<apex:page standardController="Contact" showHeader="false" sidebar="false">
     <apex:outputPanel rendered="{!Contact.OwnerId == $User.Id}">
          <!-- Fields only the Owner should see -->
          <apex:outputField value="{!Contact.LastModifiedDate}"/>
          <!-- etc... -->
     </apex:outputPanel>
</apex:page>
于 2012-06-12T16:55:07.437 に答える