美文网首页
2017/4/21 周五 -- Handler/DML和Data

2017/4/21 周五 -- Handler/DML和Data

作者: 每日好奇心 | 来源:发表于2017-04-21 11:21 被阅读9次
    • Trigger的handler用法

    triggerHandler抽象类:抽象出TriggerHandler,包含负责具体业务实现的接口(给实现类去做)。
    自定义MyHandler集成TriggerHanlder父类,实现接口并实现具体逻辑。
    TriggerFactory:用于实例化Trigger的hanlder并执行相应的before和after操作
    写Trigger时直接调用Factory的实例化方法

    • DML操作和Database操作的区别

    http://www.cnblogs.com/zero-zyq/p/5660131.html

    在功能层次上来说,使用DML语句和使用Database类的方法均能实现DML相关操作,不过二者使用起来是有区别的:
    1.使用DML语句进行批量操作时,比如批量添加,当有一个有错误的时候,便会报错,之前添加的内容便添加失败,但是使用Database的方法时,可以设置参数来控制,当有错误出现的时候是否跳过本条记录进行下一条记录的操作;
    2.使用Database的方法可以进行事务处理,使用DML语句没法实现此功能。
    对于我们来说,使用哪种方式比较好?
    1.普通增删改查,遇到异常就抛出的可以选择DML语句,毕竟写起来方便
    2.如果需要用到批处理,需要使用Database类
    3.在批处理中,遇到错误继续下一条处理的使用Database类的方法
    4.需要用到事务,对操作有可能进行回滚操作的使用Database类的方法。
    常用Database类的方法介绍
    普通操作篇:
    1.public static sObject[] query(String queryString)
    此方法用于查询,与DML中[queryString]功能相同,eg:
    1 String fetchAccount = 'select Id from Account limit 10';2 List<Account> accountList = Database.query(fetchAccount);3 system.debug(JSON.serialize(accountList));

    注意:使用List接收查询结果,如果查询结果为空的情况下,上面的accountList并不是null,而是()代表长度为空,所以如果判断当前查询是否有值,
    不能通过accountList == null来判断,而是需要通过accountList.size() == 0来判断
    2.public static Database.SaveResult insert(sObject recordToInsert, Boolean allOrNone)
    public static Database.SaveResult[] insert(sObject[] recordsToInsert, Boolean allOrNone)
    这两个方法功能与DML语句中的insert相似,区别为多了一个allOrNone参数,当设置成false的情况下,允许部分插入成功,当设置成true的情况下,其功能和DML的insert相同。当需求中要求可以部分插入成功,将不成功的信息显示出来情况下,使用Database.insert是最好不过了,Database.SaveResult类用于保存插入,修改的记录是否成功,如果失败情况下的失败信息等讯息。此种方式可以常常用于批处理操作中。
    3.public static Database.SaveResult update(sObject recordToUpdate, Boolean allOrNone)
    public static Database.SaveResult[] update(sObject[] recordsToUpdate, Boolean allOrNone)
    这两个方法功能与DML语句中的update相似,其中allOrNone与insert描述相同,这里不作解释。
    4.public static Database.DeleteResult delete(ID recordID, Boolean allOrNone)
    public static Database.DeleteResult[] delete(ID[] recordIDs, Boolean allOrNone)
    这两个方法功能与DML语句中的delete相似,其中allOrNone与insert描述相同,这里不做解释。

    事务篇
    Database类的方法可以实现数据库的事务处理,主要通过两个方法实现:
    public static System.Savepoint setSavepoint():此方法用于设置一个事务的保存点,返回类型为Savepoint类型。
    public static Void rollback(System.Savepoint databaseSavepoint):此方法用于回滚到指定的保存点。

        try{
           System.Savepoint point =  Database.setSavepoint();
        }catch{
            Database.rollback(point );
        }
    
    • Demo练习:

    1.客户下只能存在一条客户地址:trigger控制插入时判断如果size>1则将新的插入置空。

    相关文章

      网友评论

          本文标题:2017/4/21 周五 -- Handler/DML和Data

          本文链接:https://www.haomeiwen.com/subject/zworzttx.html