zoukankan      html  css  js  c++  java
  • D365 FO最佳实践BP(三)-循环插入记录使用RecordInsertList

    当在循环中执行insert的时候,AX会给出BP提醒,比如运行下面的代码

     1 public static void main(Args _args)
     2     {
     3         BulkInsertTest          bulkInsertTest;
     4 
     5         ttsbegin;
     6         for (int i = 0 ; i < 100; i++)
     7         {
     8             bulkInsertTest.ItemName = "品名" + int2Str(i);
     9             bulkInsertTest.insert();
    10         }
    11         ttscommit;
    12     }

    BPCheckInsertMethodInLoop: Insert method can be replaced with RecordInsertList in method main。
    BP检查的提醒如上所示,意思很明白,就是在循环里插入的时候考虑用RecordInsertList代替。
    改成用RecordInsertList的方式批量插入。

     1 public static void main(Args _args)
     2     {
     3         BulkInsertTest          bulkInsertTest;
     4         RecordInsertList        recordInsertList = new RecordInsertList(tableNum(BulkInsertTest));
     5 
     6         ttsbegin;
     7         for (int i = 0 ; i < 100; i++)
     8         {            
     9             bulkInsertTest.ItemName = "品名" + int2Str(i);
    10             recordInsertList.add(bulkInsertTest);
    11         }
    12         recordInsertList.insertDatabase();
    13         ttscommit;
    14     }

    RecordInsertList用来批量插入记录,把insert语句批量提交给数据库。
    注意这里的insertDataBase,并不是要等到执行这个方法才会提交给数据库,因为如果数据量过大,add方法积攒的insert语句过多
    提交给数据库会有问题,Kernel负责判断在合适的时候提交给数据库,所以如果插入的条数很多,可能在add方法执行的时候就已经写入到数据库里了,最后的insertDatabase方法负责把剩余的SQL提交给数据库。
    有几种场景会将RecordInsertList降级成一条条插入,比如表的insert方法被覆盖了,表的插入启用了数据库日志记录,在实例化RecordInsertList的时候,可以选择跳过这些。
    不过如果insert里执行了很重要的业务逻辑,就不能随便跳过,所以遇到这些BP的时候,要认真分析是否要遵循BP,如果RecordInsertList被降级了,效率肯定比一条条insert还慢。

  • 相关阅读:
    Sql server 2012 企业中文版安装图文教程
    sql server安装图解
    Unknown custom element: <swiper>
    CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)
    在vue中使用animate.css
    linux配置jdk
    orcal解决锁表
    java 基础知识
    fastjson解析list ,object中含有list, object中含有map
    vue的周期函数
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/12929020.html
Copyright © 2011-2022 走看看