Acumatica BQL多次使用同一表进行查询
我尝试多次使用同一个表构建BQL查询。在下面的示例中,我尝试使用POVendorInventory,因为它与项目和每个项目仓库的默认值相关(查询中两次列出该表的原因) 如何在Acumatica BQL查询中执行此操作。我目前的查询是:Acumatica BQL多次使用同一表进行查询,acumatica,Acumatica,我尝试多次使用同一个表构建BQL查询。在下面的示例中,我尝试使用POVendorInventory,因为它与项目和每个项目仓库的默认值相关(查询中两次列出该表的原因) 如何在Acumatica BQL查询中执行此操作。我目前的查询是: foreach (PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventory> result in PXSelectJoin<INItemSite,
foreach (PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventory> result in PXSelectJoin<INItemSite,
InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
LeftJoin<POVendorInventory, On<InventoryItem.inventoryID, Equal<POVendorInventory.inventoryID>
, And<InventoryItem.preferredVendorID, Equal<POVendorInventory.vendorID>
, And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventory.vendorLocationID>>>>,
LeftJoin<POVendorInventory, On<INItemSite.preferredVendorID, Equal<POVendorInventory.vendorID>,
And<INItemSite.inventoryID, Equal<POVendorInventory.inventoryID>>>>>>,
Where<InventoryItem.stkItem, Equal<boolTrue>>,
OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph))
{
var poVendorInventoryDefault = (POVendorInventory)result[2];
var poVendorInventorySite = (POVendorInventory)result[3];
}
以下方法也不起作用
[Serializable]
public class POVendorInventoryTwo : POVendorInventory{}
PXResult<INItemSite, InventoryItem, POVendorInventoryTwo, POVendorInventory> result in PXSelectJoin<INItemSite,
InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
LeftJoin<POVendorInventoryTwo, On<InventoryItem.inventoryID, Equal<POVendorInventoryTwo.inventoryID>
, And<InventoryItem.preferredVendorID, Equal<POVendorInventoryTwo.vendorID>
, And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventoryTwo.vendorLocationID>>>>,
LeftJoin<POVendorInventory, On<INItemSite.preferredVendorID, Equal<POVendorInventory.vendorID>,
And<INItemSite.inventoryID, Equal<POVendorInventory.inventoryID>>>>>>,
Where<InventoryItem.stkItem, Equal<boolTrue>>,
OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph)
[可序列化]
公共类POVendorInventory二:POVendorInventory{}
PXSelectJoin.Select中的PXResult结果(图形)
但正如答案所提到的,第二次使用时需要使用POVendorInventoryTwo,如下所示:
PXResult<INItemSite, InventoryItem, POVendorInventory, POVendorInventoryTwo> result in PXSelectJoin<INItemSite,
InnerJoin<InventoryItem, On<INItemSite.inventoryID, Equal<InventoryItem.inventoryID>>,
LeftJoin<POVendorInventory, On<InventoryItem.inventoryID, Equal<POVendorInventory.inventoryID>
, And<InventoryItem.preferredVendorID, Equal<POVendorInventory.vendorID>
, And<InventoryItem.preferredVendorLocationID, Equal<POVendorInventory.vendorLocationID>>>>,
LeftJoin<POVendorInventoryTwo, On<INItemSite.preferredVendorID, Equal<POVendorInventoryTwo.vendorID>,
And<INItemSite.inventoryID, Equal<POVendorInventoryTwo.inventoryID>>>>>>,
Where<InventoryItem.stkItem, Equal<boolTrue>>,
OrderBy<Asc<INItemSite.inventoryID, Asc<INItemSite.siteID>>>>.Select(graph)
PXResult生成PXSelectJoin.Select(图形)
我过去所做的是将DAC子类化并查询掉它
大概是这样的:
public class POVendorInventoryTwo : POVendorInventory
{}
然后在您的BQL中,将此子类版本用于第二个值。我在第一个POVendorInventory上尝试了此方法,但它不起作用,但是在第二个POVendorInventory上使用它时,它似乎起作用。奇怪的是,如果第一次提到POVendorInventory时它不起作用,那么第二次就不会起作用了。谢谢你的快速回复。第二种用法有效(只是不像我曾经尝试过的第一种用法),这很奇怪。我本以为这两种方法都适用,但根据它构建SQL查询的方式,我可以大致看出顺序的重要性。我总是使用子类项作为第二个+值
public class POVendorInventoryTwo : POVendorInventory
{}