BusinessDataServiceHelper.load
金蝶云社区-Jaden
Jaden
5人赞赏了该文章 2184次浏览 未经作者许可,禁止转载编辑于2021年01月08日 16:03:19

在这里不得不吐槽一下总部在写BusinessDataServiceHelper.Load(Context ctx, BusinessInfo businessInfo, List selector, OQLFilter ofilter);BusinessDataServiceHelper.Load(Context ctx, string formid, List selector, OQLFilter ofilter);
这两个方法的时候设计上有问题
我们在用上面这两个方法进行查询数据的时候,通过OQLFilter对象构建过滤条件的时候如下方式:
OQLFilter filter = new OQLFilter();
filter.Add(item);
注意上面filter.Add()这个方法的参数,它可以是OQLFilterItem这个类对象,也可以是OQLFilterHeadEntityItem这个类对象。此时你会以为当你用其中的任意一个类行的对象当作filter.Add()的参数的时候查询出来的结果和你想象中的是一样的,如果你这样想,那你就大错特错了。当我们看一下BusinessDataServiceHelper.Load这个方法的底层查询数据库的代码样子你就会发现,Sql过滤条件在构建的时候和OQLFilterItem这个类型的对象有毛关系,请看底层构sql查询条件的代码:

可以看到在过滤OQLFilter 这个参数的时候,过滤条件是只选择OQLFilterHeadEntityItem类型的对象,那你在OQLFilter.Add这个方法上搞毛线的方法重载,还让我可以添加OQLFilterItem这个类的对象。。。。。。