您的最佳选择(方法 1)是将您的字段分成字段集(请参阅在 Visualforce 中使用字段集),然后使用 Visualforce 页面覆盖详细信息页面,该页面使用这些字段集来确定要显示哪些字段,并且仅显示某些字段集,如果查看页面的用户是记录的所有者。这种方法不需要自定义控制器/扩展,允许您向非所有者隐藏页面的各个部分,并允许您(或其他管理员)使用拖放字段集编辑器修改每个部分中的字段,这与拖放页面布局编辑器非常相似。
另一种不需要自定义控制器/扩展的方法(方法 2)是创建一个 Visualforce 页面,其中包含您只想向所有者显示的字段,然后仅在运行用户是记录所有者时才呈现这些字段。然后,您可以将此 Visualforce 页面添加到您的页面布局中。我不推荐这种方法的原因是,让这个页面中的字段样式与标准页面布局的其余部分相匹配是很痛苦的。
仅供参考,没有直接的方法(阅读:没有 JavaScript hacks)在不使用 Visualforce 的情况下显示/隐藏标准页面布局的部分。
方法一:
<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>