【Visual Force学习】使用简单的变量和公式

2019-04-16 15:27:46 浏览数 (3)

介绍全局变量及 Visualforce 表达式

Visualforce 页面能够显示从数据库或 Web 服务中得到的数据, 根据登录人以及浏览页面的用户的不同数据也可随之变化的等。

在标记中,使用全局变量、运算和由页面的控制器设定的属性来访问此动态数据。这三种统称为 Visualforce 表达式。给表达式指定属性可以实现动态输出或将值传递到组件中。

Visualforce 表达式可以是字面量、变量、子表达式或能够解析为一个值的运算符的任意组合。但表达式中不支持方法调用。

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

当页面被渲染或值被使用时,会评估{! } 内的内容(除空格以外)然后动态替换其中的内容。

结果值可以是基本变量(integer, string 等)、布尔值、sObject、控制器方法(如:操作方法)及其他有用的结果。

全局变量

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

例如:Visualforce 在名为$User的全局变量中提供了有关登录人的信息。您可以通过下面格式的表达式来访问 $User 全局变量

(以及其他任何变量)的字段: {! $GlobalName.fieldName }。

1.打开 Developer Console后单击 File | New | Visualforce Page 来创建一个新 Visualforce 页面。页面命名为 UserStatus。

2. 在编辑器中,将任意标记替换为以下内容。

<apex:page sidebar="false">

<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 sidebar="false">

<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>

页面会显示为如下效果:

TODAY()为例的一部分函数的括号内内容为空,但有一部分函数括号内还包含希望函数在计算过程中使用的参数或者值。在此例中,YEAR() 包含了一个由 TODAY()(此函数中不包含任何参数) 提供的 date 参数。MAX() 函数可以包含任意数量的参数。

CONTAINS() 函数很特殊。它会返回布尔值(true 或者 false)。它会比较两个文本参数,如果第一个参数包含在第二个参数中,就返回 true,若不包含,则返回 false。举例子来说就是“force.com” 字符串包含在 “salesforce.com”内,所以函数会返回 true。

条件表达式

使用条件表达式来表示取决于表达式的值的信息。

例如:如果一张发票上没有产品明细的话,您会希望显示单词 “none” 即可,而不是显示一个空列表。或者如果一个产品过期了的话,你会希望显示 “none” ,而不是显示过期的时间和日期。

在 Visualforce 中,您可以通过条件公式表达式(如:IF())来实现以上需求。

IF() 表达式有三个参数:

  • 第一个是Boolean: 值为true 或 false的某个表达式。例如之前用过的 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 sidebar="false">

<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。

如果用户被激活,现在 User Status 窗会显示用户的用户名,如果未被激活,则会显示“inactive”。

通过本次学习,希望你能够达:

•解释 Visualforce 表达式的定义并说明其用处

•列出三个以上用于Visualforce表达式的全局变量

•添加 Visualforce 表达式到 Visualforce 页面中

•使用 Visualforce 表达式中的函数

0 人点赞