Pricing currency的bug今天也fix了,356个Opportunity取document Items需要2.8~3秒。
![](https://img.haomeiwen.com/i2085791/961e9f1f2d7f0349.png)
Pricing table和one order table的关联关系和其他字段稍有不同,中间通过CRMD_LINK的guid_set进行连接,因此不方便写到一个SQL里,所有我最后的solution 通过两个独立的SQL来实现。
![](https://img.haomeiwen.com/i2085791/b9fa8c9502b07004.png)
单元测试里COMPARE_PRICE方法也做了修改:
![](https://img.haomeiwen.com/i2085791/ad7e090395d42fb7.png)
拿了10000个order测试,通过:
![](https://img.haomeiwen.com/i2085791/d27c9f9ced48e667.png)
优化完之后,AG3我的user,取356个Opportunity的documentItems,从以前的44秒缩短到3.8秒。
![](https://img.haomeiwen.com/i2085791/744fafa350f6d617.png)
![](https://img.haomeiwen.com/i2085791/a8c27e0a78a44ff4.png)
优化之后的docItem主方法就两行代码,
![](https://img.haomeiwen.com/i2085791/061189b26c5aef92.png)
性能提高了10倍的原因是因为我没有再使用one order的API去取每个field,而是用OPEN SQL直接取表。
![](https://img.haomeiwen.com/i2085791/d534729bd21053fb.png)
测试的时候发现一个bug,CURRENCY这个field在结果集里空的,因为我上面代码里第23行的join使用的取CURRENCY的foreign key是错误的。
之前的单元测试没有暴露这个issue的原因:
我单元测试的代码是比较origin和opt两个structure的CURRENCY field是否相等,如果不等就说明我优化代码有问题。
![](https://img.haomeiwen.com/i2085791/b228b7f96ea6520c.png)
我之前单元测试的代码忘记把通过one order API取回的result写到origin的structure里,导致比较时origin和opt的CURRENCY field都是空的,因此认为等价,单元测试通过。
![](https://img.haomeiwen.com/i2085791/d4fc94ccac543b64.png)
AG3上,用我自己的user,只取product node,一共354个Opportunity,总共花费44秒左右。
截图为证,等优化完来看能快多少秒。
![](https://img.haomeiwen.com/i2085791/044e66fc823119a3.png)
![](https://img.haomeiwen.com/i2085791/dc5fdf25929e1337.png)
![](https://img.haomeiwen.com/i2085791/ddc092c63bf171cd.png)
![](https://img.haomeiwen.com/i2085791/d08fc1adfe221357.png)
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
![](https://img.haomeiwen.com/i2085791/fc7ecd97deb67090.png)
网友评论