【发布时间】:2021-08-12 22:18:24
【问题描述】:
我一直在处理一个非常具体的用户请求。最终目标是根据 INLocationStatus 中的库存可用性更改 FSServiceOrder、FSSODet、FSAppointment、FSAppointmentDet 上的用户定义字段。
我有一个处理屏幕,因为它需要按需运行或按计划运行。 注意:用户从未真正与处理屏幕上的任何内容进行交互。他总是会简单地点击:“Process All”
为此使用 BQL 似乎不合时宜。
在我的处理事件中使用加入:
public PXProcessingJoin<INLocationStatus,
LeftJoin<InventoryItem, On<INLocationStatus.inventoryID,
Equal<InventoryItem.inventoryID>>>> Processing;
作为一个起点不是很有帮助。
如果不在处理事件中运行单独的 BQL,我什至无法从连接表中获取值。 (如果我理解正确的话。我发现没有办法做到这一点,而这个SO似乎表明这是不可能的。)
所以我必须在我的处理委托中运行 BQL,以获取库存信息。在处理每个 DAC 时,我还必须执行多个 BQL——而且我还必须创建多个 PXGraph。
这似乎有很多开销——而我真正要做的只是将数据读入内存缓存,处理它,然后设置一个用户定义的字段。
我知道使用 BQL 的价值在于它可以确保执行所有业务逻辑,但就我而言,这并不适用。我可以确定没有需要运行的业务逻辑。我只是简单地遍历数据行,计算我自己在内存中的可用库存值,然后在数据库中设置一个 usr 定义的标志。
直接调用 SQL,获取我的数据,然后更新标志不是更好吗?如果我这样做,是否会引起我没有考虑的问题?还是会在未来产生巨大的问题?
还有其他人在处理屏幕中混合了 BQL 和 SQL 吗?
【问题讨论】: