PageReference类的作用

PageReference类位于Apex的System命名空间下。它可以用来在Apex代码中将页面跳转到指定的位置。在开发的时候,我们也可以向其中添加任意的参数。

页面跳转的代码示例

PageReference类可以用于多种情况。代码示例如下:

将页面跳转到一个外部URL

PageReference pageRef = new PageReference('http://www.baidu.com');

直接在初始化时提供一个外部网站的URL,则可以直接让页面跳转到外部网站。

将页面跳转到某个Account详细信息页面

Account acc = [SELECT Id FROM Account LIMIT 1];

PageReference pageRef = new PageReference('/' + acc.Id);

在上面的代码中,首先得到了某个Account记录,然后在初始化PageReference类的时候,使用“/”和记录ID的方式直接定位到该记录详细信息页面的URL。

将页面跳转到Account对象的新建页面

Schema.DescribeSObjectResult result = Account.SObjectType.getDescribe();

PageReference pageRef = new PageReference('/' + result.getKeyPrefix() + '/e');

在上面的代码中,首先使用了“Schema.DescribeSObjectResult”来得到Account对象的描述。在定义PageReference时,“getKeyPrefix()”函数和“/e”的组合默认表示新建页面的URL。

把代码中的Account换成其他的标准或自定义对象就可以跳转到相应的新建页面。

将页面跳转到某个Account记录的编辑页面

Account acc = [SELECT Id FROM Account LIMIT 1];

PageReference pageRef = new PageReference('/' + acc.Id + '/e');

在上面的代码中,在URL中添加了记录的ID和“/e”。它是默认的记录操作参数,表示进入这条记录的编辑页面。

将页面跳转到一个Visualforce页面

String vfPageName = 'ExamplePage';

PageReference pageRef = new PageReference('/apex/' + vfPageName);

在Salesforce中,“/apex/Visualforce页面名称”的结构可以直接进入Visualforce页面。所以使用这种结构初始化PageReference,则可以跳转到指定的Visualforce页面。

当然,在Apex中对于跳转到某页面有另一种方法,即:

Page.vfPageName

跳转到当前页面

PageReference pageRef = ApexPages.currentPage();

页面参数的代码示例

在开发的时候,可以对目的页面的参数进行增删或修改。

得到当前页面的页面参数

假设当前页面的URL是:“/apex/examplePage?id=1234&name=abcd”,那么使用如下代码即可得到“id”和“name”的值:

// 得到页面参数,存储在一个Map<String, String>类型的变量中
Map<String, String> params = ApexPages.currentPage().getParameters(); // 得到参数“id”的值
String idValue = params.get('id');
// 或
// String idValue = ApexPages.currentPage().getParameters().get('id'); // 得到参数“name”的值
String nameValue = params.get('name');

对页面参数进行设置

因为页面的参数是由一个Map<String, String>类型的变量进行存储,所以在代码中可以直接设定需要的参数。

PageReference pageRef = new PageReference('/apex/examplePage');

Map<String, String> params 	= pageRef.getParameters();

params.put('id', '1234');
params.put('name', 'abcd');
params.put('test', 'This is a test parameter');

特殊的页面参数

如果某页面是跳转到某条记录的新建或编辑页面,那么页面中会有“保存(Save)”按钮和“取消(Cancel)”按钮。在定义页面参数时,有几个参数与之相对应:

  • saveURL:“保存”按钮对应的跳转页面
  • cancelURl:“取消”按钮对应的跳转页面
  • retURL:在没有设定“saveURL”时,“保存”按钮对应的跳转页面。在没有设定“cancelURL”时,“取消”按钮对应的跳转页面。如果都没有设定的话,系统默认跳转到主页

比如:

Case cas = [SELECT Id, AccountId FROM Case LIMIT 1];

PageReference pageRef = new PageReference('/' + cas.Id + '/e');
params.put('saveURL', cas.AccountId);
params.put('retURL', cas.Id);
params.put('retURL', cas.AccountId);

在上面的代码中,会首先进入某条Case记录的编辑页面。当进行保存后,页面会跳转到其所属的Account记录页面。如果取消编辑,则会跳转回Case记录的页面。

Apex 中 PageReference 的使用的更多相关文章

  1. salesforce零基础学习(八十七)Apex 中Picklist类型通过Control 字段值获取Dependent List 值

    注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-fr ...

  2. Approval Process 在 Apex 中的使用

    Approval Process(批准过程)简介 批准过程是一个复杂的业务过程.详细的内容可以参考官方文档. 英文版 中文版 官方trailhead模块 在Apex中调用Approval Proces ...

  3. 在 Apex 中得到 sObject 的信息

    Salesforce 的数据模型是基于 sObject 的.在 Apex 中,所有的标准对象.自定义对象都是继承自 sObject 的. 关于在 Apex 中得到 sObject 的信息,我们要基于两 ...

  4. Apex 中文件夹相关的单元测试

    Salesforce 中的文件夹 在 Salesforce 中,我们可以建立各种文档.报表.仪表板.电子邮件模板等.它们都被保存在相应的文件夹中. Salesforce 的后端将这些文件夹保存为 Fo ...

  5. 在 Apex 中使用合并统计查询

    SOQL 中的合并统计查询 在 SOQL 中,我们可以使用一系列函数来进行合并统计查询.它们的功能和标准 SQL 中的 SUM(),COUNT() 等函数类似. 官方文档 Apex 中使用合并统计查询 ...

  6. 在Apex中使用sObject

    sObject对象的定义 Salesforce中的标准对象或自定义对象在Apex中使用时被称作"sObject".sObject对象的一个实例相当于Salesforce中的一条记录 ...

  7. Apex 中操作用户和组

    用户和组概述 Salesforce中对于用户的定义主要体现于两个对象:用户(User)和组(Group).组的成员可以是用户也可以是另一个组. Salesforce中的组可以有多种表示方法,比如队列( ...

  8. Apex 中的自定义迭代器

    迭代器 迭代器(iterator)可以遍历一个集合变量中的每个元素.Apex提供了Iterator接口来让开发者实现自定义的迭代器. Iterator接口 Iterator接口定义了两个函数: has ...

  9. Apex 中 DML 进阶知识小结

    DML 选项 在 DML 语句执行的时候可以设置选项.这些选项用 DML.Options 类来表示. 完整的介绍在官方文档中. 在建立一个 DML.Options 实例之后,可以使用 setOptio ...

随机推荐

  1. 利用RTL2832u电视棒芯片追踪民航飞机轨迹

    我国民航飞机通讯的频率为1090Mhz,而rtl2832u电视棒芯片可以接受的频率范围为24 – 1766 MHz(通过改制Q通道可以接收0-30Mhz的短波)下面开始介绍利用rtl2832u电视棒芯 ...

  2. 自学Python的经验之谈,学好Python的捷径

    其实python非常适合初学者入门.相比较其他不少主流编程语言,有更好的可读性,因此上手相对容易.自带的各种模块加上丰富的第三方模块,免去了很多“重复造轮子”的工作,可以更快地写出东西.配置开发环境也 ...

  3. Python必学Django框架,入门到精通学习视频教程全都在这可以领

    “人生苦短,我用python”,学python的小伙伴应该都了解这句话的含义.但是,学python,你真正了了解强大的Django框架吗!? 据说Django还是由吉普赛的一个吉他手的名字命名的呢,有 ...

  4. [Swift]LeetCode160. 相交链表 | Intersection of Two Linked Lists

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  5. [Swift]LeetCode560. 和为K的子数组 | Subarray Sum Equals K

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  6. Storm学习笔记 - 消息容错机制

    Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...

  7. redux-thunk 源码学习记录

    redux触发store更新,使用的dispatch(action),在关于createStore的源码解读中可以看到,store.dispatch限制了action必须是一个纯对象.是为了保持red ...

  8. 侯哥的Python分享

    侯哥语录 我曾经是一个职业教育者,现在是一个自由开发者.我希望我的分享可以和更多人一起进步.分享一段我喜欢的话给大家:"我所理解的自由不是想干什么就干什么,而是想不干什么就不干什么.当你还没 ...

  9. java在方法中获取request对象

    在spring的普通类中: HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getReques ...

  10. Spring mvc参数类型转换

    1,需求 有时候我们接收到的参数为String类型的,但是我们需要将它们转化为其他类型的如:date类型,枚举类型等等,spring mvc为我们提供了这样的功能. 2,配置文件 在springmvc ...