在Salesforce中可以对某一个Object的Standard Button或Link进行重写
在Salesforce中可以对某一个Object的Standard Button或Link进行重写,来实现我们特定的逻辑过程,比如:在删除某个Object之前要判断该Object的某个Field的状态;或者在New一个Object的时候要对一些Field进行预赋值。
1):如下图所示,展现了一个Object中所有的Button,Link和Action,那么用红框框出来的便是Standard的

2):这里我们以New按钮为例进行展示,点击上图中New前方所对应的Edit操作,会出现下面图示,默认状态选中的是No Override,这里我们要选中的是Visualforce Page,在右侧对应的下拉列表中可以选择对应的page

3):那么什么样的page可以出现在上图的下拉列表中呢,请看下面的Visualforce Page的代码,即:标记了standardController为该Object的page
<apex:page standardController="Order__c" extensions="NewOrderPrefillController" action="{!NewOrderPrefill}">
<apex:outputPanel >
<p>This is New Order Prefill Page.</p>
</apex:outputPanel>
</apex:page>
4):根据上面的Visualforce page我们要实现对应的class代码,如下所示,这里的代码做了一个page的跳转,即:点击New按钮之后,运行NewOrderPrefillController,即构造函数,完成对RetUrl属性的赋值,之后运行NewOrderPrefill方法,跳转到对应的page中,实质上是在创建Object实例的时候对Name进行预赋值
public with sharing class NewOrderPrefillController {
public string RetUrl {get;set;}
public NewOrderPrefillController(ApexPages.StandardController stdController) {
RetUrl = ApexPages.currentPage().getParameters().get('retURL');
system.debug('00002 --- RerUrl' + RetUrl);
if(RetUrl == null) RetUrl = '/';
RetUrl = '/a00/e?Name=NewOrder&nooverride=1';
}
public PageReference NewOrderPrefill(){
PageReference page = new PageReference(RetUrl);
page.setRedirect(true);
return page;
}
}
5):点击第2步中的Save按钮保存成功之后,会看到如下的变化,New对应的第5列Content Source变成了我们选择的NewOrderPrefill(Visualforce Page),第6列的Overridden被选中

6):接下来我们再对Salesforce中的Url进行一个分析,假设不对New按钮进行重写,那么点击New按钮之后会跳到如下界面,对应的URL中有一个retURL参数,其对应的值为/a00/o,表示的是此Object的列表页,而前面的/a00/e表示的是此Object的New/Edit页面

7):如果我们对New按钮进行重写之后【将第4步中NewOrderPrefillController方法中的RetURL的赋值去掉,并且将NewOrderPrefill方法中的return page 改成return null】点击New之后的Url中会多出两个参数,一个是save_new,另外一个是sfdc.override,这里的override设置为1标识着New按钮的事件已经被重写了,当然了Url显示的是当前所指向的NewOrderPrefill页面

8):我们对第6步中的URL进行一个改变,如下所示,所得到的结果是来到了New/Edit页面,并且Name字段被预赋了值

9):通过第8步中的现象,我们再回顾第4步中的代码就不难发现这段代码所表达的含义了,并且我们追加了另外一个参数nooverride=1,表达的含义是:对Name进行预赋值之后,不再继续走我们重写的逻辑,这样有效的防止了在此处循环跳转的问题

综上所述,用实例简单的描述了对standard类型Button的重写,其他具体的Button或者Link以此类推即可。
其实实现上述所描述的功能,也可以自定义一个Button来完成Name字段的预赋值,但是自定义的Button目前还无法添加到New Button所在的Recent Items Page中,这一点期待着Salesforce能够提供对应的solutions【详情请看:https://success.salesforce.com/ideaView?id=08730000000BqfqAAC 】,当然了这样做还有一点是要去自己隐藏原始的New Button,倒不如直接Override了。
进一步分析,如果我们想要其他Field的值来填充Name,就在对应的Trigger中添加逻辑就可以了。
当然了,这是对Standard Field进行预填默认值的方式,如果是Custom的Field的话,可以直接在setup中设置default value.
在Salesforce中可以对某一个Object的Standard Button或Link进行重写的更多相关文章
- 在Salesforce中对某一个Object添加自定义的Button和Link
在Salesforce中可以对某一个Object添加自定义的Button和Link,来完成特定的逻辑过程,接下来以一个简单的实例来描述整个处理流程,实现的基本功能和我另外一篇文章中描述的功能是一致的( ...
- 在Salesforce中对某一个Object添加 Validation Rule
在Salesforce中可以对某一个Object添加相应的 Validation Rule 来进行一个全局的条件判断,比如满足什么样的条件的修改允许提交,不满足的要提示相应的错误信息. 要创建一个Va ...
- 在Salesforce中为Object创建Master-Detail(Child-Relationship)关联关系
在Salesforce中可以将两个Object建立起一对多的关联关系,本篇文章就简单的叙述一下将两个Object(EricSunObj & EricSunObjC)设置成Master-Deta ...
- salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用
提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...
- 在Eclipse中用图形界面的方式获取Salesforce中Object的Query语句
对Salesforce中的Object进行相应的Query是必不可少的操作,大家可以去这个链接去看看官网的解读 http://docs.database.com/dbcom/en-us/db_sos ...
- list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
list,set等集合遍历时,不能remove集合中的元素.需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAl ...
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
比如有一个匿名对象,var result =......Select( a=>new { id=a.id, name=a.name});然后Object obj = result ;我怎 ...
- 在Salesforce中创建Approval Process
在Salesforce中可以创建Approval Process来实现审批流程的功能,实际功能与我们常说的Workflow很相似,具体的设置步骤如下所示 1):选择对应的Object去创建对应的App ...
- 在Salesforce中添加Workflow Rule
在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...
随机推荐
- 解决Django发送中文邮件时的编码及乱码问题
参考自---http://blog.csdn.net/clh604/article/details/9274793 #-*- coding=utf8 -*- from email.message im ...
- /etc/securetty文件
/etc/securetty 文件允许你规定“root”用户可以从哪个tty设备登录. 登录程序(通常是/bin/login)需要读取“/etc/securetty”文件. 它的格式:列出来的tty设 ...
- php 获取IP
<?php echo 'your ip is :'; if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) $ip = $_SERVER[" ...
- codeforces Good Bye 2015 B. New Year and Old Property
题目链接:http://codeforces.com/problemset/problem/611/B 题目意思:就是在 [a, b] 这个范围内(1 ≤ a ≤ b ≤ 10^18)统计出符合二进制 ...
- 网站上点击自定义按钮发起QQ聊天的解决方案
一.背景 最近由于开发需要,需要在网站上自定义一个立即交谈的按钮,现将解决方式分享给大家. 二.解决方案 1.首先访问:http://shang.qq.com/widget/consult.php,适 ...
- 苹果应用 Windows 申请 普通证书 和Push 证书 Hbuilder 个推
最近使用Hbuilder 进行了HTML5开发,因为 HTML5 可以放在android 机器上,也可以放到 IOS机器上,所以很感兴趣,于是开发了一个小应用, 不过问题接着来了: 图1 如图所示:当 ...
- Java 配色方案--Dark Flash Builder - by Wilson Silva
http://eclipsecolorthemes.org/?view=theme&id=1855
- Java多线程---同步与锁
一,线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏. 二.同步和锁定 1.锁的原理 Java中每个对象都有一个内置锁. 当程序运行到非静态的synchronized同步方法上时,自动 ...
- NYOJ之XX和OO
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAI0CAIAAABgWyN9AAAgAElEQVR4nO3dPW7jyt4n4NmEcy/EaW
- mysql 只导数据不含表结构
mysqldump -t 数据库名 -uroot -p > xxx.sql