• 在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.

  • 相关阅读:
    js遍历多层对象的键值对
    JS HEX十六进制与RGB, HSL颜色的相互转换【转】
    TortoiseSVN打分支、合并分支、切换分支【转】
    grid.containLabel
    安装谷歌vue-devtools调试插件
    使用Echarts遇到的问题
    理解js编程中函数的副作用
    git 镜像下载和安装
    欢迎来到博客园的世界
    c#制作一个屏幕保护程序
  • 原文地址:https://www.cnblogs.com/mingmingruyuedlut/p/3707291.html
Copyright © 2020-2023  润新知