Apex 中 PageReference 的使用

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记录的页面。

原文地址:https://www.cnblogs.com/chengcheng0148/p/apex_use_pagereference.html

时间: 2024-10-18 06:44:11

Apex 中 PageReference 的使用的相关文章

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

注:本篇解决方案内容实现转自:http://mysalesforceescapade.blogspot.com/2015/03/getting-dependent-picklist-values-from.html 群里面有个小伙伴问了一个关于两个有Dependence关系的Picklist字段如何在Apex中通过control字段的值获取到Dependence字段的值,针对Salesforce配置来说,我们很好配置出两个Dependence字段的关系,通过点击设置一下include关系即可.如

Apex 中的自定义迭代器

迭代器 迭代器(iterator)可以遍历一个集合变量中的每个元素.Apex提供了Iterator接口来让开发者实现自定义的迭代器. Iterator接口 Iterator接口定义了两个函数: hasNext():返回Boolean类型,表示被遍历的集合变量中是否还有下一个元素 next():返回集合变量中要被遍历的下一个元素 实现Iterator接口的类中所有的函数必须是global或public的. 示例代码(摘录自官方文档): global class CustomIterable imp

Apex 中操作用户和组

用户和组概述 Salesforce中对于用户的定义主要体现于两个对象:用户(User)和组(Group).组的成员可以是用户也可以是另一个组. Salesforce中的组可以有多种表示方法,比如队列(Queue)等,它们在数据库中都是以组(Group)的形式储存. Salesforce中的多种组件包含关于用户和组的查找类型(Lookup)字段.由于这些字段只存储了一个ID值,所以这些ID既可能是用户的ID,也可能是组的ID. Apex代码示例 public class UserGroupExam

PageReference类 学习

PageReference类的作用 PageReference类位于Apex的System命名空间下.它可以用来在Apex代码中将页面跳转到指定的位置.在开发的时候,我们也可以向其中添加任意的参数. 页面跳转的代码示例 PageReference类可以用于多种情况.代码示例如下: 将页面跳转到一个外部URL PageReference pageRef = new PageReference('http://www.baidu.com'); 直接在初始化时提供一个外部网站的URL,则可以直接让页面

APEX初步 [5] —— SOQL查询

编写SOQL查询 SOQL代表Salesforce Object Query Language, 用它来直接读取记录. SOQL可以说是Force.com上面的SQL语句 .由于Apex能直接访问salsforce数据库中的记录,所以可以直接在apex代码中嵌入SOQL查询并获得查询结果.只要用方括号将查询语句包起来,然后把返回值赋予一个Sobject对象的数组即可.比如下面的例子,获取所有的客户的名称和电话: Account[] accts = [SELECT Name,Phone FROM

salesforce 零基础学习(三十六)通过Process Builder以及Apex代码实现锁定记录( Lock Record)

上一篇内容是通过Process Builder和Approval Processes实现锁定记录的功能,有的时候,往往锁定一条记录需要很多的限制条件,如果通过Approval Processes的条件判断写起来可能很麻烦,有些逻辑通过Apex写起来很容易,此篇内容为通过Process Builder 和Apex代码实现锁定记录. 需求:对Opportunity表进行判断是否加锁或者解锁.当Delivery/Installation Status这一项的值为'Completed'情况下加锁,为其他

Apex的对象共享

Apex的对象共享 在Apex中,每个对象都有一个"共享"对象,其中存储了该对象的共享设定. 这种共享对象以"share"结尾.比如Account的共享对象是AccountShare,Contact的共享对象是ContactShare.对于自定义对象,其对应的共享对象是以"__share"结尾,比如"Example_Object__c"对应的共享对象是"Example_Object__share". 注意,

Apex 企业设计模式

FFLIB 是一个免费的框架,对 Apex 进行了扩展.它的结构实现了 Salesforce 推荐的Apex 企业设计模式. 在学习如何使用 FFLIB 框架之前,我们先来了解一下 Apex 企业设计模式的结构. Apex 企业设计模式 Apex 企业设计模式的结构遵循了"关注点分离"的概念. 维基百科上对于"关注点分离"的定义是: 关注点分离(Separation of concerns,SOC)是对只与"特定概念.目标"(关注点)相关联的软件

salesforce 零基础学习(四十三)运算取余

工作中遇到一个简单的小问题,判断两个数是否整除,如果不整除,获取相关的余数. 习惯java的我毫不犹豫的写下了代码 public Boolean isDivisibility(Integer dividend,Integer divider) { return dividend % divider == 0; } 提交代码发现竟然提交不上?? 后来查看API发现apex中没有直接的%取余运算,所以如果想要取余以及判断是否整除需要其他方式,代码如下: public without sharing