【问题标题】:Acumatica - Filtering PO Inventory Selector By Current VendorAcumatica - 按当前供应商筛选 PO 库存选择器
【发布时间】:2021-09-11 02:47:09
【问题描述】:

我有一位客户希望 POLine 中的库存选择器仅包含属于 POOrder 中所选供应商的库存项目。有没有办法将连接添加到 [POLineInventoryItem(Filterable=true)]?或者我应该以其他方式解决这个问题?

如果我用新的 pxselector 替换,库存项目不会传递到 po 行。此外,我将失去 CrossAttribute 搜索。这是 Acumatica 代码:

[PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
[POLineInventoryItem(Filterable = true)]
[PXForeignReference(typeof(FK.InventoryItem))]      

这是我需要的选择器:

[PXSelector(typeof(Search2<InventoryItem.inventoryID,
InnerJoin<POVendorInventory, On<InventoryItem.inventoryID,    
Equal<POVendorInventory.inventoryID>,
And<POVendorInventory.vendorID, Equal<Current<POOrder.vendorID>>>>>>))]

[PXCustomizeSelectorColumns(
typeof(PX.Objects.IN.InventoryItem.inventoryCD),
typeof(PX.Objects.IN.InventoryItem.descr),
typeof(PX.Objects.IN.InventoryItem.itemClassID),
typeof(PX.Objects.IN.InventoryItem.itemType),
typeof(PX.Objects.IN.InventoryItem.baseUnit),
typeof(PX.Objects.IN.InventoryItem.salesUnit),
typeof(PX.Objects.IN.InventoryItem.purchaseUnit),
typeof(PX.Objects.IN.InventoryItem.basePrice),
typeof(PX.Objects.IN.InventoryItem.itemStatus))]

当我将选择器替换为@Brian 建议的选择器时,即使使用了左连接,我也会返回分析器中此 sn-p 中发生的 SQL 语法错误:

FROM [InventoryItem] [InventoryItem]
WHERE ( [InventoryItem].[CompanyID] = 2) AND 
[InventoryItem].[DeletedDatabaseRecord] = 0 AND 
( [InventoryItem].[InventoryID] = )
ORDER BY [InventoryItem].[UsrCaseQty]), 
(SELECT TOP (1) [InventoryItem].[BaseItemVolume]

【问题讨论】:

    标签: filter attributes acumatica


    【解决方案1】:

    更新:之前的答案不适用,因为现有选择器不包含所需的 DAC,因此我们还需要使用重新定义选择器。如果我们使用 MergeMethod Append,原来的属性仍然会返回所有结果,所以这个选择器会被忽略。由于我们使用的是替换,因此我们需要包含我们想要包含的所有其他属性。

    [PXMergeAttributes(Method = MergeMethod.Replace)]
    [PXDefault(PersistingCheck = PXPersistingCheck.Nothing)]
    [PXSelector(typeof(Search2<InventoryItem.inventoryID,
            InnerJoin<POVendorInventory, On<InventoryItem.inventoryID,
            Equal<POVendorInventory.inventoryID>,
            And<POVendorInventory.vendorID, Equal<Current<POOrder.vendorID>>>>>>),
        typeof(InventoryItem.inventoryID),
        typeof(InventoryItem.inventoryCD),
        typeof(InventoryItem.descr),
        typeof(InventoryItem.itemClassID),
        typeof(InventoryItem.itemType),
        typeof(InventoryItem.baseUnit),
        typeof(InventoryItem.salesUnit),
        typeof(InventoryItem.purchaseUnit),
        typeof(InventoryItem.basePrice),
        typeof(InventoryItem.itemStatus),
        SubstituteKey = typeof(InventoryItem.inventoryCD)
        )]
    protected virtual void POLine_InventoryID_CacheAttached(PXCache sender) { }
    

    您可以在 DAC 扩展中执行此操作,但此示例假定您只希望在特定屏幕/图表中执行此操作。使用 CacheAttached 将覆盖该字段,但仅限于定义的图形。

    请注意,此示例应该适用于您具体询问的内容,但我的测试表明,如果没有将现有行与当前供应商绑定的采购订单供应商库存记录,它也会阻止显示采购订单行的库存 ID .

    【讨论】:

    • 我首先想到了... POVendorInventory 是否需要链接到 POLineInventoryItem 才能在 Where 子句中使用它或用作限制器?
    • 你是对的。我看到了您的选择器示例并误读了。我仍然支持 PXRestrictor,但您需要重新定义字段或属性,以便拉入该表。您可以使用 [PXMergeAttributes(Method = MergeMethod.Replace)] 替换您的属性代替标准的。我将更新答案,显示您的选择器用于覆盖图形扩展中的标准定义。
    • 自从我看到你的答案以来,我一直在玩这个,而且似乎无法解决一个 sql 错误。当我用此代码替换选择器并查看 sql profiler 时,我发现 InventoryID 中没有导致语法错误的值。我认为这可能与未链接到供应商的订单行库存项目的现有记录有关,但即使我离开也会发生这种情况。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2011-11-21
    相关资源
    最近更新 更多