在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进行重写的更多相关文章

  1. 在Salesforce中对某一个Object添加自定义的Button和Link

    在Salesforce中可以对某一个Object添加自定义的Button和Link,来完成特定的逻辑过程,接下来以一个简单的实例来描述整个处理流程,实现的基本功能和我另外一篇文章中描述的功能是一致的( ...

  2. 在Salesforce中对某一个Object添加 Validation Rule

    在Salesforce中可以对某一个Object添加相应的 Validation Rule 来进行一个全局的条件判断,比如满足什么样的条件的修改允许提交,不满足的要提示相应的错误信息. 要创建一个Va ...

  3. 在Salesforce中为Object创建Master-Detail(Child-Relationship)关联关系

    在Salesforce中可以将两个Object建立起一对多的关联关系,本篇文章就简单的叙述一下将两个Object(EricSunObj & EricSunObjC)设置成Master-Deta ...

  4. salesforce 零基础开发入门学习(十四)salesforce中工厂模式的运用

    提到工厂模式,想必大家都很熟悉,工厂模式作为一种设计模式,同样在salesforce中适用. 举一个例子,笔作为基类,可以有钢笔,铅笔,圆珠笔等等.有一个笔的工厂,当你向它要钢笔,它就会生产一支钢笔; ...

  5. 在Eclipse中用图形界面的方式获取Salesforce中Object的Query语句

    对Salesforce中的Object进行相应的Query是必不可少的操作,大家可以去这个链接去看看官网的解读  http://docs.database.com/dbcom/en-us/db_sos ...

  6. list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作

    list,set等集合遍历时,不能remove集合中的元素.需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAl ...

  7. c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic

    比如有一个匿名对象,var  result =......Select( a=>new {  id=a.id, name=a.name});然后Object  obj =  result ;我怎 ...

  8. 在Salesforce中创建Approval Process

    在Salesforce中可以创建Approval Process来实现审批流程的功能,实际功能与我们常说的Workflow很相似,具体的设置步骤如下所示 1):选择对应的Object去创建对应的App ...

  9. 在Salesforce中添加Workflow Rule

    在Salesforce中可以添加Workflow Rule来执行特定的动作,比如说:当Object的某个字段发生变化时,根据变化的值去修改其他field,和Trigger的功能很类似,不过Trigge ...

随机推荐

  1. struts2 提供的校验器列表

  2. tomcat有哪些性能调优方法

    前几天看见一篇介绍性能调优文章,觉得不错.特此收藏(http://blog.csdn.net/lifetragedy/article/details/7708724)

  3. C# Winfrom 页面传值

    2个窗体 Parent,Children 代码: Parent public partial class Parent : Form { public string parentValue = &qu ...

  4. 使用Servlet和jdbc创建用户登录验证

    首先创建一个用户表,用来保存用户名 密码,并插入几条数据 mysql> desc user;+----------+-------------+------+-----+---------+-- ...

  5. ACM/ICPC 之 BFS+状态压缩(POJ1324(ZOJ1361))

    求一条蛇到(1,1)的最短路长,题目不简单,状态较多,需要考虑状态压缩,ZOJ的数据似乎比POj弱一些 POJ1324(ZOJ1361)-Holedox Moving 题意:一条已知初始状态的蛇,求其 ...

  6. windows编程注意点(持续更新)

    1.windows编程中,所有的操作都放到窗口过程中进行,main函数只用于描述窗口基本信息. 2.用于获取设备环境句柄时,用BeginPaint/EndPaint,消耗cpu小,但占内存大;用Get ...

  7. (译)利用ASP.NET加密和解密Web.config中连接字符串

    介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, A ...

  8. 【Git】笔记5 分支管理2

    来源:廖雪峰 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,Git就会在merge时生成一 ...

  9. MyEclipse/Eclipse中修改包的显示结构

    操作如下:

  10. ibatis中使用like模糊查询

    select * from table1 where name like '%#name#%' 两种有效的方法: 1) 使用$代替#.此种方法就是去掉了类型检查,使用字符串连接,不过可能会有sql注入 ...