1

我是 Salesforce 的新手,我正在考虑为潜在客户/联系人/帐户制作页面布局,以便拥有特殊的所有者可见性。

我使用标准 Salesforce 页面布局根据需要查看详细信息页面,但我想知道如何根据查看用户是否是记录的所有者来显示或隐藏布局的一部分。


所需场景

记录 R 由用户 A 所有。记录 R 的详细信息页面是标准 Salesforce 页面布局,包含 2 个部分:一个部分包含联系信息(只有用户 A,所有者,可以看到),一个部分包含附加信息(所有用户可以看到)。


我已经查看了文档,据我所知,唯一的方法是构建自定义控制器或扩展。这是唯一的方法吗?如果是这样,是否有人有一个很好的演练,只更改页面布局的一部分而不是创建一个全新的页面?

4

1 回答 1

3

您的最佳选择(方法 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>
于 2012-06-12T16:55:07.437 回答