使用简单的变量和公式
学习目标
完成本单元后,您将能够:
- 阐述 Visualforce 表达式的含义并描述其使用场景。
- 列出可用于 Visualforce 表达式的三个或三个以上的全局变量。
- 在 Visualforce 页面中添加 Visualforce 表达式。
- 在 Visualforce 表达式中使用函数。
全局变量和 Visualforce 表达式简介
Visualforce 页面可以显示从数据库或 Web 服务中检索到的数据,数据的变化取决于登录和查看页面的用户等因素。通过使用页面控制器提供的全局变量、计算和属性,可以在标记中访问这些动态数据。这些通常被称为 Visualforce 表达式。使用表达式进行动态输出,或者通过将值分配给属性的方式将值传递给组件。
Visualforce 表达式是可以解析为单个值的任何文字值、变量、子表达式或运算符的集合。表达式不支持方法调用。
Visualforce 的表达式句法是:{! expression }
渲染页面或使用该值时,{!}
分隔符内的所有内容都将经过评估和动态替换。空格会被忽略。
结果值可以是原始值(整数、字符串等)、布尔值、sObject、控制器方法(例如操作方法)和其他有用的结果。
全局变量
使用全局变量访问和显示 Visualforce 标记中的系统值和资源。
例如,Visualforce 在名为 $User
的全局变量中提供有关登录用户的信息。您可以使用以下形式的表达式访问全局变量 $User
(以及任意其他变量)的字段:{!$GlobalName.fieldName }
。
- 要创建新的 Visualforce 页面,请打开 Developer Console,然后单击 File(文件) | New(新建) | Visualforce Page(Visualforce 页面)。输入
UserStatus
作为页面名称。
- 在编辑器中,将标记替换为以下内容。此标记会创建一个框,供您添加一些有用的信息。
<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> </apex:pageBlockSection> </apex:pageBlock> </apex:page>
- 单击 Preview(预览)可打开页面预览,您可以在进行更改时查看该预览。
- 在
<apex:pageBlockSection>
标签之间添加以下标记:{!$User.FirstName }。
您应该会在创建的 User Status(用户状态)面板中看到您的名字。
- 将另外两个使用
$User
全局变量的表达式添加到 User Status(用户状态)面板的标记中,此时页面显示如下。<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> {!$User.FirstName } {!$User.LastName } ({! $User.Username }) </apex:pageBlockSection> </apex:pageBlock> </apex:page>
{!...}
提示 Visualforce 大括号内的所有内容都是动态的且由表达式语言编写。当有人查看页面时,它的值会在运行时进行计算和替换。
Visualforce 表达式不区分大小写且忽略 {!...}
中的空格。所以这些表达式都产生相同的值:
{!$User.FirstName}
{!$USER.FIRSTNAME}
{!$user.firstname }
公式表达式
Visualforce 允许您在表达式语言中使用的不仅仅是全局变量。它还支持操作值的公式。
例如,&
字符是连接字符串的公式语言运算符。
- 在您的 UserStatus 页面中,将名字和姓氏的独立表达式替换为以下公式表达式。此表达式组合了登录用户的名字和姓氏,并用空格进行分隔。输出应该是相同的。
{!$User.FirstName & ' ' & $User.LastName}
- 在用户信息下方,将以下内容添加到页面标记中。
<p> Next week it will be {! TODAY() + 7 } </p> <p> Today's Date is {! TODAY() } </p>
这些是使用 TODAY()
函数更复杂的公式。函数是内置计算,可以通过名称后面的括号来识别。第一个表达式只是计算当前日期,第二个表达式使用加法运算符将 7 天添加到该日期。页面中的输出看起来应该是这样的。
Next week it will be Thu Sep 25 00:00:00 GMT 2014. Today's Date is Thu Sep 18 00:00:00 GMT 2014
- 在日期表达式下方,将以下内容添加到页面标记中。
<p>Tomorrow will be day number {! DAY(TODAY() + 1) }</p> <p>Let's find a maximum: {! MAX(1,2,3,4,5,6,5,4,3,2,1) } </p> <p>The square root of 49 is {! SQRT(49) }</p> <p>Is it true? {! CONTAINS('salesforce.com', 'force.com') }</p> <p>The year today is {! YEAR(TODAY()) }</p>
有些函数,如 TODAY()
,包含空括号,但有些函数接受参数,即您希望函数用来计算的值。在此示例中,YEAR()
接受一个日期参数,该参数由 TODAY()
函数提供,该函数不接受任何参数。MAX()
函数可以接受任意数量的参数。CONTAINS()
特别有意思。它返回一个或真或假的布尔值。比较 2 个文本参数;如果第一个参数包含第二个参数,将返回 true。如果不包含,将返回 false。在这种情况下,字符串 “force.com”
包含在 “salesforce.com”
字符串中,因此它返回 true
。
条件表达式
使用条件表达式可以根据表达式的值显示不同的信息。
例如,如果发票没有行项目,您可能希望显示“无”而不是空列表。或者,如果项目已过期,您可能希望显示“已结束”而不是显示结束日期和时间。
您可以在 Visualforce 中使用条件公式表达式 IF()
执行此操作。IF()
表达式接受三个参数:
- 第一个参数是或真或假的布尔值。例如,您之前使用的
CONTAINS()
函数。
- 第二个参数是第一个参数为真时返回的值。
- 第三个参数是第一个参数为假时返回的值。
- 在
UserStatus
页面,在其他表达式下方,添加以下代码。<p>{! IF( CONTAINS('salesforce.com','force.com'), 'Yep', 'Nope') }</p> <p>{! IF( DAY(TODAY()) < 15, 'Before the 15th', 'The 15th or after') }</p>
在保存更改并查看结果之前,试着预测会出现什么样的结果。页面结果看起来应该是这样的。
第一个表达式与此前同样使用 CONTAINS()
函数计算。不同的是 IF()
函数将 CONTAINS()
的布尔结果转换为对用户显示更有用的文本。同样,第二个表达式在上半个月显示一条消息,在下半个月显示一条不同的消息。
- 删除所有测试表达式,仅保留使用
$User
全局变量的行。换句话说,回到这个页面。<apex:page> <apex:pageBlock title="User Status"> <apex:pageBlockSection columns="1"> {!$User.FirstName & ' ' & $User.LastName } ({! $User.Username }) </apex:pageBlockSection> </apex:pageBlock> </apex:page>
- 让我们使用条件表达式来做一些更有用的事情。将带有
$User.Username
表达式的行替换为以下代码:
({! IF($User.isActive, $User.Username, 'inactive') })
isActive
是 $User
全局变量的另一个可用字段。这是一个布尔字段,如果用户处于活动状态,则为真,如果已停用,则为假。现在,User Status(用户状态)面板将在用户处于活动状态时显示用户名,如果未处于活动状态则显示 inactive(非活动)。
了解详细信息...
您可以在 Visualforce 表达式中使用多种全局变量和函数。
在 Visualforce 中可以使用约二十多种全局变量。如您所见,这些全局变量对于获取当前登录用户信息、组织详情 ( $Organization
)、设置 ( $Setup
)、自定义对象详情 ( $ObjectType
)、对象可用操作 ( $Action
) 等信息都很有用。查看 Visualforce 开发人员指南中的全局变量来深入了解。
同样,Visualforce 中可以使用数十种函数。该列表类似于公式字段中可用的函数,但并不完全相同。重合部分是函数的行为相同,所以当您编写 Visualforce 表达式时,可以重用您所了解的关于公式字段的大部分内容。请参见 Visualforce 开发人员指南中的函数,获取完整列表。
表达式有多种用途,通常用于为 Visualforce 组件上的属性提供值。
资源
-
Salesforce 帮助: 全局变量
-
Salesforce 帮助:公式元素
-
Visualforce 开发人员指南:全局变量
-
Visualforce 开发人员指南:函数
-
Visualforce 开发人员指南:表达式运算符
-
Trailhead:公式和验证