Skip to main content

使用简单的变量和公式

学习目标

完成本单元后,您将能够:

  • 阐述 Visualforce 表达式的含义并描述其使用场景。
  • 列出可用于 Visualforce 表达式的三个或三个以上的全局变量。
  • 在 Visualforce 页面中添加 Visualforce 表达式。
  • 在 Visualforce 表达式中使用函数。
备注

备注

用中文(简体)学习?在中文(简体)Trailhead Playground 中开始挑战,用括号中提供的译文完成挑战。仅复制并粘贴英文值,因为挑战验证基于英文数据。如果在中文(简体)组织中没有成功通过挑战,我们建议您 (1) 将区域设置切换为美国,(2) 按此处说明将语言切换为英文,(3) 再次单击“检查挑战”按钮。

查看 Trailhead 本地化语言徽章详细了解如何利用 Trailhead 译文。

全局变量和 Visualforce 表达式简介

Visualforce 页面可以显示从数据库或 Web 服务中检索到的数据,数据的变化取决于登录和查看页面的用户等因素。通过使用页面控制器提供的全局变量、计算和属性,可以在标记中访问这些动态数据。这些通常被称为 Visualforce 表达式。使用表达式进行动态输出,或者通过将值分配给属性的方式将值传递给组件。

Visualforce 表达式是可以解析为单个值的任何文字值、变量、子表达式或运算符的集合。表达式不支持方法调用。

Visualforce 的表达式句法是:{! expression }

渲染页面或使用该值时,{!} 分隔符内的所有内容都将经过评估和动态替换。空格会被忽略。

结果值可以是原始值(整数、字符串等)、布尔值、sObject、控制器方法(例如操作方法)和其他有用的结果。

全局变量

使用全局变量访问和显示 Visualforce 标记中的系统值和资源。

例如,Visualforce 在名为 $User 的全局变量中提供有关登录用户的信息。您可以使用以下形式的表达式访问全局变量 $User(以及任意其他变量)的字段:{!$GlobalName.fieldName }

  1. 要创建新的 Visualforce 页面,请打开 Developer Console,然后单击 File(文件) | New(新建) | Visualforce Page(Visualforce 页面)。输入 UserStatus 作为页面名称。
  2. 在编辑器中,将标记替换为以下内容。
    <apex:page>
        <apex:pageBlock title="User Status">
            <apex:pageBlockSection columns="1">
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
    此标记会创建一个框,供您添加一些有用的信息。
  3. 单击 Preview(预览)可打开页面预览,您可以在进行更改时查看该预览。
  4. <apex:pageBlockSection> 标签之间添加以下标记:{!$User.FirstName }。您应该会在创建的 User Status(用户状态)面板中看到您的名字。
  5. 将另外两个使用 $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 允许您在表达式语言中使用的不仅仅是全局变量。它还支持操作值的公式。

例如,& 字符是连接字符串的公式语言运算符。

  1. 在您的 UserStatus 页面中,将名字和姓氏的独立表达式替换为以下公式表达式。此表达式组合了登录用户的名字和姓氏,并用空格进行分隔。输出应该是相同的。
{!$User.FirstName & ' ' & $User.LastName}
  1. 在用户信息下方,将以下内容添加到页面标记中。
<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
  1. 在日期表达式下方,将以下内容添加到页面标记中。
<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() 函数。
  • 第二个参数是第一个参数为真时返回的值。
  • 第三个参数是第一个参数为假时返回的值。
  1. UserStatus 页面,在其他表达式下方,添加以下代码。
    <p>{! IF( CONTAINS('salesforce.com','force.com'),
         'Yep', 'Nope') }</p>
    <p>{! IF( DAY(TODAY()) < 15,
         'Before the 15th', 'The 15th or after') }</p>

在保存更改并查看结果之前,试着预测会出现什么样的结果。页面结果看起来应该是这样的。

 玩转 Visualforce 表达式

第一个表达式与此前同样使用 CONTAINS() 函数计算。不同的是 IF() 函数将 CONTAINS() 的布尔结果转换为对用户显示更有用的文本。同样,第二个表达式在上半个月显示一条消息,在下半个月显示一条不同的消息。

  1. 删除所有测试表达式,仅保留使用 $User 全局变量的行。换句话说,回到这个页面。
    <apex:page>
        <apex:pageBlock title="User Status">
            <apex:pageBlockSection columns="1">
                {!$User.FirstName & ' ' & $User.LastName }
               ({! $User.Username })
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:page>
  1. 让我们使用条件表达式来做一些更有用的事情。将带有 $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 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈