码迷,mamicode.com
首页 > 其他好文 > 详细

在Salesforce中对某一个Object的Standard Button或Link进行重写

时间:2014-05-05 10:56:12      阅读:403      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   ext   

在Salesforce中可以对某一个Object的Standard Button或Link进行重写,来实现我们特定的逻辑过程,比如:在删除某个Object之前要判断该Object的某个Field的状态;或者在New一个Object的时候要对一些Field进行预赋值。

1):如下图所示,展现了一个Object中所有的Button,Link和Action,那么用红框框出来的便是Standard的

bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

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进行预赋值

bubuko.com,布布扣
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;
    }
}
bubuko.com,布布扣

 

5):点击第2步中的Save按钮保存成功之后,会看到如下的变化,New对应的第5列Content Source变成了我们选择的NewOrderPrefill(Visualforce Page),第6列的Overridden被选中

bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

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

bubuko.com,布布扣

 

综上所述,用实例简单的描述了对standard类型Button的重写,其他具体的Button或者Link以此类推即可。

其实实现上述所描述的功能,也可以自定义一个Button来完成Name字段的预赋值,但是自定义的Button目前还无法添加到New Button所在的Recent Items Page中,这一点期待着Salesforce能够提供对应的solutions,当然了这样做还有一点是要去自己隐藏原始的New Button,倒不如直接Override了。

进一步分析,如果我们想要其他Field的值来填充Name,就在对应的Trigger中添加逻辑就可以了。

 

在Salesforce中对某一个Object的Standard Button或Link进行重写,布布扣,bubuko.com

在Salesforce中对某一个Object的Standard Button或Link进行重写

标签:style   blog   class   code   java   ext   

原文地址:http://www.cnblogs.com/mingmingruyuedlut/p/3707291.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!