我是Salesforce的新手,我正在研究为潜在客户/联系人/帐户制作页面布局,以便拥有特殊的所有者可见性。
我根据需要使用标准Salesforce页面布局查看详细信息页面,但我想知道如何根据查看用户是否是记录的所有者来显示或隐藏布局的一部分。
期望的情景:
记录R由用户A拥有。记录R的详细信息页面是标准Salesforce页面布局,包含2个部分:一个部分包含联系信息(仅限用户A,所有者,可以看到),以及一个包含其他信息的部分(所有用户都可以看到)。
我已经查看了文档,从我可以看到的唯一方法是构建自定义控制器或扩展。这是唯一的方法,如果是这样,有没有人在仅更改页面布局的一部分而不是创建一个全新的页面时有一个很好的演练?
答案 0 :(得分:3)
您的最佳选择(方法1)是将您的字段分成FieldSets(请参阅Working with Field Sets in Visualforce),然后使用Visualforce页面覆盖详细信息页面,该页面使用这些FieldSet来确定要显示的字段并仅显示某些FieldSets如果查看页面的用户是记录的所有者。此方法不需要自定义控制器/扩展,允许您将页面的各个部分隐藏到非所有者,并允许您(或其他管理员)使用拖放式FieldSet编辑器修改每个部分中的字段,这与Drag-and-Drop页面布局编辑器非常相似。
另一种不需要自定义控制器/扩展的方法(方法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>