Salesforce Visualforce (基础3)使用变量

学习目标

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

  • 解释什么是Visualforce表达式,并描述它的用途。
  • 列出可用于Visualforce表达式的三个或更多全局变量。
  • 将Visualforce表达式添加到Visualforce页面。
  • 在Visualforce表达式中使用一个函数。

全局变量和Visualforce表达式简介

Visualforce页面可以显示从数据库或Web服务中检索的数据,根据登录的用户和查看页面而变化的数据等等。这个动态数据是通过使用由页面控制器提供的全局变量,计算和属性在标记中访问的。这些一起被描述为Visualforce表达式。使用表达式将动态输出或值传递给组件,方法是将它们分配给属性。
Visualforce表达式是可以解析为单个值的任何一组字面值,变量,子表达式或运算符。表达式中不允许使用方法调用。

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

任何在{! }分隔符将在页面呈现或使用时动态替换。空白被忽略。

结果值可以是一个原始(整数,字符串等),一个布尔值,一个sObject,一个控制器方法(如一个动作方法)以及其他有用的结果。

全局变量

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

  1. 打开开发者控制台,然后点击 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 }
    您应该在您创建的用户状态面板中看到您的名字。
  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 }
    这个表达式将登录的用户的名字和姓氏组合在一起,用空格分开。输出应该看起来一样。
  2. 将以下内容添加到用户信息下方的页面标记中。
    <p> Today's Date is {! TODAY() } </p>
    <p> Next week it will be {! TODAY() + 7 } </p>
    这些是使用TODAY()函数的更复杂的公式。函数是内置的计算,您可以通过名称后面的括号来识别。
    第一个表达式简单地计算当前日期,第二个表达式使用加法运算符在日期中添加七天。页面中的输出将如下所示。

    Today's Date is Thu Sep 18 00:00:00 GMT 2014
    Next week it will be Thu Sep 25 00:00:00 GMT 2014
  3. 将以下内容添加到日期表达式下面的页面标记中。
    <p>The year today is {! YEAR(TODAY()) }</p>
    <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>
    您的网页上的结果将是这样的。

    Visualforce expressions playground

    一些函数,如TODAY(),有一个空括号,但有些函数需要函数用来计算的参数。在这个例子中,YEAR()接受一个由TODAY()函数提供的日期参数,它不带任何参数。 MAX()函数可以使用任意数量的参数。

    CONTAINS()函数特别有趣。它返回一个布尔值:true或者false。它比较文本的两个参数,如果第一个参数包含第二个参数,则返回true。如果不是,则返回false。在这种情况下,字符串“force.com”包含在字符串“salesforce.com”中,所以它返回true。

条件表达式

使用条件表达式根据表达式的值显示不同的信息。
例如,如果发票没有订单项,则可能需要显示单词“none”而不是空白列表。或者,如果某个项目已过期,则可能需要显示“已结束”,而不是显示结束日期和时间。
您可以使用条件公式表达式(如IF())在Visualforce中执行此操作。 IF()表达式有三个参数:

  • 首先是一个布尔值:不管是真还是假。例如,您以前使用的CONTAINS()函数。
  • 第二个参数是第一个参数为true时返回的值。
  • 第三个参数是第一个参数为false时将返回的值。
  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>

    在保存更改并查看结果之前,尝试预测它们将会是什么!
    第一个表达式使用与以前相同的CONTAINS()函数计算。 IF()函数将CONTAINS()的布尔结果转换为更有用的显示给用户的文本。同样,第二个表达式在本月上半月显示一条消息,在本月下半月显示另一条消息。

  2. 删除所有的测试表达式,只留下使用$ User全局变量的行。
    换句话说,回到这个页面。

    <apex:page>
        
        <apex:pageBlock title="User Status">
            <apex:pageBlockSection columns="1">
                
                {! $User.FirstName & ' ' & $User.LastName } 
               ({! $User.Username })
                
            </apex:pageBlockSection>
        </apex:pageBlock>
        
    </apex:page>
    让我们使用条件表达式来做一些更有用的事情。
  3. 用以下代码替换$ User.Username表达式的行。
    ({! IF($User.isActive, $User.Username, 'inactive') })
    
    isActive是$ User全局变量上可用的另一个字段。这是一个布尔字段,如果用户处于活动状态,则为true;如果已停用,则为false。现在,“用户状态”面板将显示用户的用户名(如果它们处于活动状态),如果不是,则显示“不活动”(inactive)。

告诉我更多…

在Visualforce表达式中可以使用许多全局变量和函数。
Visualforce中可以使用近二十个全局变量。如您所见,它们对于获取有关当前登录用户的信息非常有用,但也可用于获取有关组织($ Organization),设置($ Setup),有关自定义对象的详细信息($ ObjectType)的详细信息,对象($ Action)等等。请参阅Visualforce全局变量参考。

同样,在Visualforce中可以使用几十个函数。该列表与公式字段中的可用功能类似,但不完全相同。在它们重叠的地方,函数的行为是相同的,所以在编写Visualforce表达式时,可以重复使用大部分关于公式字段的知识。请参阅Visualforce函数参考以获取完整列表。

表达式有许多用途,常常用于为Visualforce组件上的属性提供值。