竞价排名Demo

来源:互联网 发布:好看的c语言编译器 编辑:程序博客网 时间:2024/06/04 18:52

背景介绍:现有应标对象,供应商和招标项目三个对象,其中应标对象为junction object,连接了供应商和招标项目,现在需要根据应标对象中的竞价金额为同一招标项目的应标记录进行排序,即新建一个应标记录或更新应标记录的竞价金额的时候,需要自动去计算当前应标记录的排名(竞价排名)。

Trigger设计模式:每个对象一个Trigger模式。
TriggerHandler.cls

/***********************************************************************Name:所有对象的Trigger逻辑分发抽象类*Description:具体对象的Trigger Handler重写相应触发事件的处理方法======================================================History                                                            -------                                                            VERSION  AUTHOR      DATE            DETAIL                                1.0      Wilson Xu   2017-06-23      Created***********************************************************************/ public abstract class TriggerHandler {        public virtual void beforeInsert(){}//before insert事件处理方法    public virtual void beforeUpdate(){}//before update事件处理方法    public virtual void beforeDelete(){}//before delete事件处理方法    public virtual void afterInsert(){}//after insert事件处理方法    public virtual void afterUpdate(){}//after update事件处理方法    public virtual void afterDelete(){}//after delete事件处理方法    public virtual void afterUndelete(){}//after undelete事件处理方法           public void run(){                     if(Trigger.isBefore && Trigger.isInsert) {            this.beforeInsert();        } else if(Trigger.isBefore && Trigger.isUpdate) {            this.beforeUpdate();        } else if(Trigger.isBefore && Trigger.isDelete) {            this.beforeDelete();        } else if(Trigger.isAfter && Trigger.isInsert) {            this.afterInsert();        } else if(Trigger.isAfter && Trigger.isUpdate) {            this.afterUpdate();        } else if(Trigger.isAfter && Trigger.isDelete) {            this.afterDelete();        } else if(Trigger.isAfter && Trigger.isUndelete) {            this.afterUndelete();        }    }            }
BidRecordTrigger.trigger
/***********************************************************************Name:应标记录触发器*Description:可加一些其他条件限制Trigger是否触发,比如加一个控制Trigger逻辑是否触发的Custom Setting,满足条件则运行run(),否则不运行======================================================History                                                            -------                                                            VERSION  AUTHOR      DATE            DETAIL                                1.0      Wilson Xu   2017-06-23      Created***********************************************************************/ trigger BidRecordTrigger on Advertiser_Tender_Relationship__c (before insert,before update,before delete,after insert,after update,after delete,after undelete) {        SkipTriggerSetting__c setting = SkipTriggerSetting__c.getInstance();    //如果当前用户设置了不触发Trigger,跳过Trigger触发逻辑    if (setting != null && setting.DisableTrigger__c){        return;    }        new BidRecordTriggerHandler().run();    }
BidRecordTriggerHandler.cls
public class BidRecordTriggerHandler extends TriggerHandler {        /**        before insert事件处理逻辑    **/    public override void beforeInsert() {            }        /**        after insert事件处理逻辑    **/    public override void afterInsert() {    }        /**        before update事件处理逻辑    **/    public override void beforeUpdate() {            }        /**        after update事件处理逻辑    **/    public override void afterUpdate() {        /**        before delete事件处理逻辑    **/    public override void beforeDelete() {            }        /**        after delete事件处理逻辑    **/    public override void afterDelete() {            }        /**        after undelete事件处理逻辑    **/    public override void afterUnDelete() {            } }
BidRecordTriggerHunction.cls
public class BidRecordTriggerFunction {    /**    功能说明:    参数说明:    返回值:    作者:Wilson Xu    日期:2017-06-23    **/         public static void sortByBidAmount(List<Advertiser_Tender_Relationship__c> atrs){        // your code here.    }    }

遇到过的问题:假如没做递归处理,在after update的Trigger中更新竞价排名字段,会因为递归而报错,最终导致并没有更新竞价排名。

解决方案:目前有两种方案,一种是为触发器增加一个布尔类型的开关来控制死循环;另一种是“用完即走”的理念,即“按需调用方法,档需要去执行某段逻辑时,才去调用相应的方法”,我同事于是说。


原创粉丝点击