标准控制器

Visualforce 控制器是一组指令,用于指定用户在用户执行以下操作时发生的情况 与关联的 Visualforce 标记中指定的组件进行交互,例如当用户 单击按钮或链接。控制器还提供对应显示的数据的访问 ,并且可以修改组件行为。

闪电网络平台提供了许多标准控制器,其中包含相同的 用于标准 Salesforce 页面的功能和逻辑。例如,如果您使用 标准帐户控制器,单击 Visualforce 页面产生的行为与在 标准帐户编辑页面。

每个 Salesforce 对象都存在一个标准控制器,可以使用 闪电平台 API。以下主题包括有关使用标准控制器的其他信息:

  • 关联一个 带有 Visualforce 页面的标准控制器
  • 访问数据 带标准控制器
  • 使用标准 控制器操作
  • 验证 规则和标准控制器
  • 设置页面样式,使用 标准控制器
  • 检查对象可访问性
  • 自定义控制器和控制器扩展

将标准控制器与 Visualforce 页面关联

要将标准控制器与 Visualforce 页面相关联,请使用标签上的属性,并为其分配任何 Salesforce 的名称 可以使用 Lightning 平台 API 查询的对象。standardController<apex:page>

例如,将页面与名为 MyCustomObject,请使用以下标记:

<apex:page standardController="MyCustomObject__c">
</apex:page>

注意

当您使用 上的属性时 标记,则不能同时使用该属性。standardController<apex:page>controller

使用标准控制器访问数据

每个标准控制器都包含一个 getter 方法,该方法返回由页面 URL 中的查询字符串参数指定的记录。这 方法允许关联的页面标记使用语法引用上下文记录上的字段,其中 是与 控制器。例如,使用帐户标准控制器的页面可用于返回当前在上下文中的帐户的字段值。id{!object}object{!account.name}name

注意

要使 getter 方法成功,URL 中查询字符串参数指定的记录必须是 与标准控制器类型相同。例如,使用帐户标准的页面 控制者只能返回帐户记录。如果查询字符串参数指定了联系人记录 ID,则不返回任何数据 通过表达式。idid{!account}与 Lightning 平台 API 中的查询一样,您可以使用合并字段语法进行检索 相关记录数据:

  • 您最多可以遍历五个级别的子级与父级关系。例如,如果 使用 Contact 标准控制器,您可以使用 (三级子级到父级 relationship) 返回客户记录所有者的姓名,即 与联系人关联。{!contact.Account.Owner.FirstName}
  • 您可以遍历一个级别的父子关系。例如,如果使用 帐户标准控制器,可用于返回与 当前处于上下文中的帐户。{!account.Contacts}

使用标准控制器操作

操作方法在页面执行逻辑或导航时 事件发生,例如当用户单击按钮或将鼠标悬停在 页。可以通过在以下参数之一的参数中使用表示法从页面标记中调用操作方法 标签:{! }action

  • <apex:commandButton> 创建一个按钮,该按钮调用 行动
  • <apex:commandLink> 创建一个调用操作的链接
  • <apex:actionPoller> 定期调用操作
  • <apex:actionSupport> 创建一个事件(例如 “onclick”、“onmouseover”等) 命名组件,调用操作
  • <apex:actionFunction> 定义了一个新的 JavaScript 调用操作的函数
  • <apex:page> 调用操作 加载页面时

支持的操作方法如下表所示 由所有标准控制器提供。您可以将这些操作与 任何包含属性的 Visualforce 组件。action

行动描述
save插入新记录或更新现有记录(如果该记录当前位于上下文中)。在此之后 操作完成,动作 将用户返回到原始页面(如果已知),或将用户导航到详细信息 页面。save
quicksave插入新记录或更新现有记录(如果该记录当前位于上下文中)。与操作不同,此页面不会重定向 用户到另一个页面。save
edit将用户导航到记录的编辑页面,即 目前在上下文中。此操作完成后,该操作会将用户返回到 用户最初调用操作的页面。edit
delete删除上下文中的记录。此操作完成后,该操作将刷新页面或发送 关联对象的用户要按 Tab 键。delete
cancel中止编辑操作。此操作完成后, 操作返回 用户到用户最初调用编辑的页面。cancel
list返回标准列表页的 PageReference 对象,基于 在该对象最近使用的列表筛选器上。例如 如果标准控制器是 ,并且用户查看的最后一个筛选列表是 New Last Week, 将显示上周创建的联系人。contact

例如,以下页面允许您更新帐户。 单击“保存”时,将在标准上触发操作 控制器,帐户将更新。

save

<apex:page standardController="Account">
  <apex:form>
    <apex:pageBlock title="My Content" mode="edit">
      <apex:pageBlockButtons>
        <apex:commandButton action="{!save}" value="Save"/>
      </apex:pageBlockButtons>
      <apex:pageBlockSection title="My Content Section" columns="2">
        <apex:inputField value="{!account.name}"/>
        <apex:inputField value="{!account.site}"/>
        <apex:inputField value="{!account.type}"/>
        <apex:inputField value="{!account.accountNumber}"/>
      </apex:pageBlockSection>
    </apex:pageBlock>
  </apex:form>
</apex:page>

注意

请记住,要使此页面显示帐户数据,有效的 ID 必须在页面的 URL 中将客户记录指定为查询参数。为 例:

https://Salesforce_instance/apex/myPage?id=001x000xxx3Jsxb

注意

仅当用户具有适当的 、 、 或标准控制器中的操作时,才会呈现与 、 、 或操作关联的命令按钮和链接 权限。同样,如果没有特定记录与页面关联,则命令按钮和 不会呈现与 and 操作关联的链接。savequicksaveeditdeleteeditdelete

验证规则和标准控制器

如果用户在使用标准控制器的 Visualforce 页面上输入数据,并且该数据 导致验证规则错误,可以显示该错误 在 Visualforce 页面上。如果验证规则错误位置为 与组件关联的字段,则错误将显示在那里。 如果验证规则错误位置设置为顶部 ,请使用 OR 组件 以显示错误。<apex:inputField><apex:pageMessages><apex:messages><apex:page>

设置使用标准控制器的页面的样式

与标准控制器关联的任何页面都会自动继承 用于标准 Salesforce 页面的样式 与指定对象相关联。也就是说,指定 对象显示为选中状态,并使用选项卡的关联颜色 设置所有页面元素的样式。

您可以覆盖使用标准控制器的页面的样式 替换为属性 在标签上。 例如,以下页面使用 Account 标准控制器, 但呈现一个突出显示 Opportunity 选项卡的页面,并使用 Opportunity 选项卡的黄色:tabStyle<apex:page>

<apex:page standardController="Account" tabStyle="Opportunity">
</apex:page>

若要使用与 MyCustomObject 关联的样式,请执行以下操作:

<apex:page standardController="Account" tabStyle="MyCustomObject__c">
</apex:page>

要使用与自定义 Visualforce 选项卡关联的样式,请将 选项卡名称(非标签)的属性,后跟双下划线 和单词 tab。例如,要使用 Visualforce 的样式 选项卡,名称为 Source 和标签 Sources,请使用:

<apex:page standardController="Account" tabStyle="Source__tab">
</apex:page>

或者,您可以覆盖标准控制器页面样式 使用您自己的自定义样式表和内联样式。

检查对象可访问性

如果用户没有足够的权限来查看某个对象,则任何使用控制器渲染该对象的 Visualforce 页面都将无法访问。 为避免此错误,您应确保仅当用户有权访问关联的对象时,才会呈现 Visualforce 组件 与控制器。您可以像这样检查对象的可访问性:

{!$ObjectType.objectname.accessible}

此表达式返回 true 或 false 值。例如,要检查您是否有权访问标准 Lead 对象, 使用以下代码:

{!$ObjectType.Lead.accessible}

对于自定义对象,代码类似:

{!$ObjectType.MyCustomObject__c.accessible}

在哪里 自定义对象的名称。

MyCustomObject__c确保页面的一部分仅在用户 有权访问对象,请使用组件上的属性。例如,要在以下情况下显示页面块 用户有权访问 Lead 对象,您将执行以下操作:

render

<apex:page standardController="Lead">
	<apex:pageBlock rendered="{!$ObjectType.Lead.accessible}">
		<p>This text will display if you can see the Lead object.</p>
	</apex:pageBlock>
</apex:page>

如果用户无法访问对象,最好提供备用消息。为 例:

<apex:page standardController="Lead">
	<apex:pageBlock rendered="{!$ObjectType.Lead.accessible}">
		<p>This text will display if you can see the Lead object.</p>
	</apex:pageBlock>
	<apex:pageBlock rendered="{! NOT($ObjectType.Lead.accessible) }">
		<p>Sorry, but you cannot see the data because you do not have access to the Lead object.</p>
	</apex:pageBlock>
</apex:page>