Visualforce 简介

Visualforce 由一种基于标签的标记语言组成,可为开发人员提供 构建应用程序和自定义 Salesforce 用户界面的方式。借助 Visualforce,您可以:

  • 生成向导和其他多步骤过程。
  • 通过应用程序创建自定义流控制。
  • 定义导航模式和特定于数据的规则,以实现最佳、高效的应用程序 互动。

有兴趣创建新的 Visualforce 组件吗?我们建议构建闪电网络 组件。它们是适用于 Salesforce 的更现代、更强大的自定义 HTML 元素 应用和网站。如果您仍然对为什么要使用 Lightning Web 组件感到好奇 而不是 Visualforce,而是 find 现在更多了。

Visualforce 可用于桌面浏览器和 Salesforce 移动应用程序。对于桌面 浏览器,它在 Lightning Experience 和 Salesforce Classic 中都可用。Lightning 不支持 Visualforce 页面和自定义 iframe 在 iPad Safari 上体验。Visualforce 在 Contact Manager、Group、 专业版、企业版、无限制版、性能版和开发人员版。

什么是 Visualforce?

Visualforce 是一个框架,允许开发人员 构建可在 Lightning 平台上本地托管的自定义用户界面。这 Visualforce 框架包括一种类似于 HTML 的基于标记的标记语言。它还有一个 一组服务器端“标准控制器”,用于执行基本数据库操作, 如查询和保存,执行简单。

我们建议使用 Lightning Web 组件而不是 Visualforce 来构建自定义功能。 Lightning Web 组件是轻量级的,可为您的应用程序提供卓越的性能,并且 网站。详细了解为什么要使用 Lightning Web 组件而不是 Visualforce。

在 Visualforce 标记语言中,每个 Visualforce 标签对应于一个粗略的或 细粒度用户界面组件,例如页面分区、相关列表或字段。这 Visualforce 组件的行为可以通过 标准 Salesforce 页面。或者,开发人员可以将自己的逻辑与 用 Apex 编写的 controller 类。

Visualforce 组件及其示例 对应标签

什么是 Visualforce 页面?

开发人员可以使用 Visualforce 创建 Visualforce 页面定义。页面定义 由两个主要元素组成:

  • Visualforce 标记
  • Visualforce 控制器

Visualforce 标记

Visualforce 标记由 Visualforce 标签、HTML、JavaScript 或任何其他支持 Web 的标记组成 代码嵌入在单个标签中。 标记定义页面上包含的用户界面组件以及方式 他们出现了。<apex:page>

Visualforce 控制器

Visualforce 控制器是一组指令,用于说明所发生的情况 当用户与关联的 Visualforce 标记中指定的组件进行交互时。一种类型 交互是指用户单击按钮或链接时。控制器还提供对 页面中显示的数据,可以修改组件行为。开发人员可以使用 Lightning 平台提供的标准控制器,也可以添加 自定义控制器逻辑,其类是用 Apex 编写的:

  • 一个标准 控制器由用于 标准 Salesforce 页面。例如,如果您使用 标准帐户控制器,单击 Visualforce 页面的行为与在标准帐户编辑页面上单击“保存”的行为相同。如果您在页面上使用标准控制器,并且用户无权访问 对象,则页面显示权限不足错误消息。解决此错误 通过检查用户对对象的可访问性,以及 适当地显示组件。
  • 通过标准列表控制器,您可以创建 Visualforce 页面,这些页面可以 显示或处理一组记录。现有 Salesforce 页面的示例 一组记录包括列表页、相关列表和批量操作页。
  • 自定义控制器是用 Apex 编写的类,它 实现页面的所有逻辑,而无需利用标准控制器。如果您使用 自定义控制器,您可以定义新的导航元素或行为,但必须 此外,还要重新实现标准控制器中已提供的任何功能。与其他 Apex 类一样,自定义控制器完全在系统模式下执行,在 忽略当前用户的对象级和字段级权限。您可以 指定用户是否可以根据用户的 轮廓。
  • 控制器扩展是用 Apex 编写的类,它 添加或覆盖标准或自定义控制器中的行为。扩展允许您 以使用另一个控制器的功能,同时添加您自己的自定义逻辑。标准控制器在用户模式下执行,其中权限为字段级 强制执行当前用户的安全性和共享规则。扩展标准 控制器允许您构建尊重用户权限的 Visualforce 页面。 尽管扩展类在系统模式下执行,但标准控制器执行 在用户模式下。与自定义控制器一样,您可以指定用户是否可以执行 基于用户配置文件的控制器扩展中的方法。

注意

自定义控制器和控制器扩展类在 系统模式,因此它们会忽略用户权限和字段级安全性。但是,您可以 选择是否遵循用户在组织范围内的默认值、角色层次结构和共享 规则,方法是使用 类定义。有关信息,请参阅《使用 、 和关键字》中的“使用 Apex 开发人员 指南。with sharingwith sharingwithout sharinginherited sharing

Visualforce 页面可以在哪里使用?

开发人员可以使用 Visualforce 页面执行以下操作:

  • 替代标准按钮,例如帐户的“新建”按钮, 或联系人的“编辑”按钮
  • 覆盖选项卡概述页面,例如“帐户”选项卡主页
  • 定义自定义选项卡
  • 在详细信息页面布局中嵌入组件
  • 创建仪表板组件或自定义帮助页面
  • 自定义、扩展或集成 Salesforce 控制台中的侧边栏(自定义控制台 组件)
  • 在 Salesforce 移动应用程序中添加导航菜单项和操作

为什么我应该使用 Lightning Web 组件而不是 视觉力?

对于新的开发,Salesforce 建议使用 Lightning Experience 低代码工具和 Visualforce 上的闪电网络组件,可实现最现代、高性能和响应速度最快的功能 功能性。Lightning Platform 为高级管理员和 开发人员构建自定义功能,它支持更新、复杂的业务流程 不适用于 Visualforce。

如果您有现有的 Visualforce 组件,请将其转换为 Lightning Web 组件 提供优化和改进应用的机会。花时间评估整体设计 以及每个组件及其等效组件的可用性。与您的设计师合作,选择最好的 使您的组件与 Lightning Experience 用户的现代外观保持一致的方法 接口。有关灵感和一些示例代码,请参阅 Lightning 中提供的组件蓝图 设计系统。

在开始开发 Lightning Web 组件时,请确定何时重用 Visualforce 页面 以及何时将其重建为 Lightning Web 组件。考虑 在需要时进行重建:

  • 更具吸引力和响应性的用户体验。
  • 支持最新的 Web 内容可访问性指南 (WCAG)。
  • 一种易于针对多种设备外形规格进行优化的体验。
  • 提高应用性能。

Lightning Web 组件

Lightning Web 组件是使用 HTML 和现代 JavaScript 构建的自定义 HTML 元素。他们 使用核心 Web 组件标准,仅提供在浏览器中良好运行所需的内容 由 Salesforce 提供支持。因为它们是建立在浏览器中本地运行的代码之上的,所以 Lightning Web 组件是轻量级的,并提供卓越的性能。

Visualforce 标准组件和基本 Lightning Web 组件端

使用此表可查找特定 Lightning Web 组件的等效基本 Lightning Web 组件 标准 Visualforce 组件。

Visualforce 组件Lightning Web 组件
apex:pageBlocklightning-card
apex:pageBlockButtons设置操作槽lightning-card
apex:pageBlockSectionlightning-accordionlightning-accordion-section
apex:pageBlockSectionItemlightning-layoutlightning-layout-item
apex:toolbarGrouplightning-layoutlightning-layout-item
apex:panelGridlightning-layoutlightning-layout-item
apex:panelGrouplightning-layoutlightning-layout-item
apex:tabPanellightning-tabset
apex:tablightning-tab
apex:repeattemplate for:each or iterator
apex:pageBlockTablelightning-datatable
apex:dataTablelightning-datatable
apex:inlineEditSupportlightning-datatable使用内联编辑 可编辑的列
apex:imagelightning-platform-resource-loader
apex:stylesheetlightning-platform-resource-loader
apex:includeScriptlightning-platform-resource-loader
apex:maplightning-map
apex:formlightning-record-form lightning-record-view-form lightning-record-edit-form
apex:inputlightning-inputlightning-slider
apex:inputCheckboxlightning-inputtype=“复选框”lightning-input类型=“复选框按钮”
apex:inputFilelightning-input类型=“文件”lightning-file-upload
apex:inputHiddenlightning-inputclass=“slds-hide”
apex:inputSecretlightning-inputtype=“密码”
apex:inputTextlightning-inputtype=“文本”
apex:inputTextArealightning-textarea
apex:inputFieldlightning-input-field
apex:selectCheckboxeslightning-checkbox-group
apex:selectListlightning-comboboxlightning-dual-listbox
apex:selectRadiolightning-radio-group
apex:outputLabel将标签属性设置为lightning-input
apex:outputFieldlightning-output-field
apex:outputLinklightning-formatted-url
apex:outputTextlightning-formatted-datetime lightning-formatted-number lightning-formatted-rich-text lightning-formatted-text lightning-formatted-time
apex:commandButtonlightning-button lightning-button-stateful lightning-button-icon lightning-button-icon-stateful
apex:commandLinklightning-button带裸露的变体
apex:pageMessagelightning-platform-show-toast-event
apex:messagesapex:message自定义有效性lightning-input
apex:pageMessages自动lightning-record-form用于或lightning-messageslightning-record-view-form lightning-record-edit-form

Visualforce 开发需要哪些权限?

Visualforce 开发需要 各种权限,具体取决于特定活动。

所需的用户权限
启用 Visualforce 开发模式:“自定义应用程序”
要创建、编辑或删除 Visualforce 页面:“自定义应用程序”
要创建和编辑自定义 Visualforce 组件,请执行以下操作:“自定义应用程序”
编辑自定义 Visualforce 控制器或 Apex“作者顶点”
设置 Visualforce 页面 安全:“管理配置文件和权限集”
要为 Visualforce 页面设置版本设置:“自定义应用程序”
要创建、编辑或删除静态资源,请执行以下操作:“自定义应用程序”
创建 Visualforce 制表符:“自定义应用程序”

Visualforce 是如何构建的?

所有 Visualforce 页面都完全在 Lightning 平台上运行,当开发人员创建 页面,以及最终用户请求页面时,如以下体系结构图所示。

Visualforce 系统架构 – 开发 模式

当开发人员完成 Visualforce 页面的编写并将其保存到平台时,平台应用程序服务器 尝试将标记编译为一组抽象指令 Visualforce 渲染器可以理解。如果编译产生错误,则保存将中止,并且 错误将返回给开发人员。否则,说明 保存到元数据存储库并发送到 Visualforce 渲染器。渲染器将指令转换为 HTML,然后 刷新开发人员的视图,从而提供即时反馈 向开发人员提供对标记所做的任何更改。

下面的架构图显示了非开发人员 用户请求 Visualforce 页面。因为页面已经编译成指令,所以 Application Server 只是从元数据存储库中检索页面 并将其发送到 Visualforce 渲染器以转换为 HTML。

Visualforce 系统架构 – 标准用户模式

注意

您的 Visualforce 页面可能在其中一台 force.com 服务器上运行,而不是在 salesforce.com 上运行 服务器。

Visualforce 页面与 S-Controls 相比如何?

重要

Visualforce 页面取代了 S 控件。尚未这样做的组织 以前使用的 S 控件无法创建它们。现有的 s 控制是 不受影响,仍可编辑。Visualforce 页面被认为是下一代 s-controls 和 应尽可能使用代替 S 控制,以提高性能和 编写它们的难易程度。下表概述了 Visualforce 页面和 S 控件。

Visualforce 页面S-控制
所需的技术技能HTML、XMLHTML、JavaScript、Ajax 工具包
语言风格标记标记程序代码
页面覆盖模型使用标签组装标准和自定义组件为整个页面编写 HTML 和 JavaScript
标准 Salesforce 组件库是的
访问内置平台行为是,通过标准控制器
数据绑定是的开发人员可以将输入组件(例如文本框)与特定的 字段(例如帐户名称)。如果用户在该输入组件中保存了一个值,则该值也是 保存在数据库中。不开发人员无法将输入组件与特定字段绑定。相反,他们 必须编写使用 API 的 JavaScript 代码,以使用用户指定的数据库更新 字段值。
样式表继承是的不可以,必须手动引入 Salesforce 样式表
尊重字段元数据,例如唯一性是,默认情况下如果用户尝试保存违反唯一性的记录,或者 必填字段属性,则会自动显示错误消息,用户可以 再试一次。是,如果使用 API 调用在 JavaScript 中编码describe如果用户尝试保存违反唯一性或要求的记录 字段属性,则仅当 S-Control 开发人员编写代码时才会显示错误消息 检查了这些属性。
与 Apex 的交互直接,通过绑定到自定义控制器间接,通过使用 Apex 方法 通过 APIwebService
性能响应速度更快,因为标记是在 Lightning 平台上生成的响应速度较慢,因为每次调用 API 都需要往返于 服务器 — 调整性能的重担由开发人员承担
页面容器本地在 iFrame 中

如何对 Visualforce 进行版本控制?

从 09 年夏季版本开始,Visualforce 页面和组件 已进行版本控制。当页面或组件具有版本号时,其功能 较旧的 Visualforce 元素不会随着新实现的引入而更改。Visualforce 版本从 15.0 开始。如果您尝试将 Visualforce 页面的版本设置为 15.0 之前的版本,会自动更改为 15.0。

为了帮助向后兼容,每个 Visualforce 页面和自定义 组件与指定版本的 API 的版本设置一起保存,以及 Visualforce 的特定版本。如果 Visualforce 页面或组件引用 已安装的托管包,每个托管包的版本设置 页面或组件也会被保存。这确保了作为 Visualforce、API 和 托管软件包中的组件在后续版本、Visualforce 页面和 组件仍绑定到具有特定已知行为的版本。

自定义组件 在 Visualforce 页面中引用,始终在自己的版本号下执行。因此,如果 自定义组件设置为版本 15.0,它始终表现出 Visualforce 版本的行为 15.0,无论是在版本 15.0 还是 16.0 页面中运行。

发行说明列出了 Visualforce 版本。组件参考还列出了标准组件的 Visualforce 版本 引入,以及组件或属性是否在版本中被弃用。设置 Visualforce 的 Salesforce API 和 Visualforce 版本 页面或自定义组件:

  1. 编辑 Visualforce 页面或组件,然后单击版本设置。注意您只能修改 “版本设置”中页面或自定义组件的版本设置 选项卡,在“设置”中编辑页面或组件时。
  2. 选择 Salesforce API 的版本。这也是 与页面或组件一起使用的 Visualforce 版本。
  3. 点击保存