扩展SO添加项对话框按替代料描述搜索时DAC投影不生效
SO模块添加项对话框自定义投影DAC替换不生效问题
我尝试扩展销售订单(SO)模块的「添加项」(物料查找)对话框,使其支持按替代物料描述执行搜索,但编写的DAC投影扩展始终无法生效。以下是编写的SO Graph扩展完整代码:
using PX.Data; using PX.Objects.CR; using PX.Objects.CS; using PX.Objects.EP; using PX.Objects.IN; using CRLocation = PX.Objects.CR.Standalone.Location; namespace PX.Objects.SO { public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry> { public static bool IsActive() => true; } [System.SerializableAttribute()] [PXProjection(typeof(Select2< InventoryItem, LeftJoin<INSiteStatus, On<INSiteStatus.inventoryID, Equal<InventoryItem.inventoryID>, And<InventoryItem.stkItem, Equal<boolTrue>, And<INSiteStatus.siteID, NotEqual<SiteAttribute.transitSiteID>>>>>, LeftJoin<INSubItem, On<INSiteStatus.FK.SubItem>, LeftJoin<INSite, On2<INSiteStatus.FK.Site, And<INSite.baseCuryID, EqualBaseCuryID<Current2<SOOrder.branchID>>>>, LeftJoin<INItemXRef, On<INItemXRef.inventoryID, Equal<InventoryItem.inventoryID>, And2< Where<INItemXRef.subItemID, Equal<INSiteStatus.subItemID>, Or<INSiteStatus.subItemID, IsNull>>, And<Where<CurrentValue<SOSiteStatusFilter.barCode>, IsNotNull, And<INItemXRef.alternateType, Equal<INAlternateType.barcode>>>>>>>, LeftJoin<INItemPartNumber, On<INItemPartNumber.inventoryID, Equal<InventoryItem.inventoryID>, // my change here, swapped alternateID to descr And<INItemPartNumber.descr, Like<CurrentValue<SOSiteStatusFilter.inventory_Wildcard>>>, And2< Where<INItemPartNumber.bAccountID, Equal<Zero>, Or<INItemPartNumber.bAccountID, Equal<CurrentValue<SOOrder.customerID>>, Or<INItemPartNumber.alternateType, Equal<INAlternateType.vPN>>>>, And<Where<INItemPartNumber.subItemID, Equal<INSiteStatus.subItemID>, Or<INSiteStatus.subItemID, IsNull>>>>>>, LeftJoin<INItemClass, On<InventoryItem.FK.ItemClass>, LeftJoin<INPriceClass, On<INPriceClass.priceClassID, Equal<InventoryItem.priceClassID>>, LeftJoin<InventoryItemCurySettings, On<InventoryItemCurySettings.inventoryID, Equal<InventoryItem.inventoryID>, And<InventoryItemCurySettings.curyID, EqualBaseCuryID<Current2<SOOrder.branchID>>>>, LeftJoin<BAccountR, On<BAccountR.bAccountID, Equal<InventoryItemCurySettings.preferredVendorID>>, LeftJoin<INItemCustSalesStats, On<CurrentValue<SOSiteStatusFilter.mode>, Equal<SOAddItemMode.byCustomer>, And<INItemCustSalesStats.inventoryID, Equal<InventoryItem.inventoryID>, And<INItemCustSalesStats.subItemID, Equal<INSiteStatus.subItemID>, And<INItemCustSalesStats.siteID, Equal<INSiteStatus.siteID>, And<INItemCustSalesStats.bAccountID, Equal<CurrentValue<SOOrder.customerID>>, And<Where<INItemCustSalesStats.lastDate, GreaterEqual<CurrentValue<SOSiteStatusFilter.historyDate>>, Or<CurrentValue<SOSiteStatusFilter.dropShipSales>, Equal<True>, And<INItemCustSalesStats.dropShipLastDate, GreaterEqual<CurrentValue<SOSiteStatusFilter.historyDate>>>>>>>>>>>>, LeftJoin<INUnit, On<INUnit.inventoryID, Equal<InventoryItem.inventoryID>, And<INUnit.unitType, Equal<INUnitType.inventoryItem>, And<INUnit.fromUnit, Equal<InventoryItem.salesUnit>, And<INUnit.toUnit, Equal<InventoryItem.baseUnit>>>>>> >>>>>>>>>>>>>>>>>, Where<CurrentValue<SOOrder.customerID>, IsNotNull, And2<CurrentMatch<InventoryItem, AccessInfo.userName>, And2< Where<INSiteStatus.siteID, IsNull, Or<INSite.branchID, IsNotNull, And2<CurrentMatch<INSite, AccessInfo.userName>, And< Where2<FeatureInstalled<FeaturesSet.interBranch>, Or2<PX.Objects.Common.Bql.SameOrganizationBranch<INSite.branchID, Current<SOOrder.branchID>>, Or<CurrentValue<SOOrder.behavior>, Equal<SOBehavior.qT>>>>>>>>>, And2< Where<INSiteStatus.subItemID, IsNull, Or<CurrentMatch<INSubItem, AccessInfo.userName>>>, And2< Where<CurrentValue<INSiteStatusFilter.onlyAvailable>, Equal<boolFalse>, Or<INSiteStatus.qtyAvail, Greater<CS.decimal0>>>, And2< Where<CurrentValue<SOSiteStatusFilter.mode>, Equal<SOAddItemMode.bySite>, Or<INItemCustSalesStats.lastQty, Greater<decimal0>, Or<CurrentValue<SOSiteStatusFilter.dropShipSales>, Equal<True>, And<INItemCustSalesStats.dropShipLastQty, Greater<decimal0>>>>>, And<InventoryItem.isTemplate, Equal<False>, And<InventoryItem.itemStatus, NotIn3< InventoryItemStatus.unknown, InventoryItemStatus.inactive, InventoryItemStatus.markedForDeletion, InventoryItemStatus.noSales>>>>>>>>>>), Persistent = false)] //[PXSubstitute(GraphType = typeof(SOOrderEntry))] [PXSubstitute()] public partial class SOSiteStatusSelectedCst : PX.Objects.SO.SOSiteStatusSelected //IBqlTable { } }
已做操作与现象
- 已修改BQL查询逻辑,将原查询中对
INItemPartNumber.alternateID字段执行LIKE匹配的逻辑,替换为对INItemPartNumber.descr字段做匹配 - 已尝试将自定义类放在
SOOrderEntry_Extension内部和外部,也分别测试了携带/不携带GraphType = typeof(SOOrderEntry)参数的[PXSubstitute()]特性的效果 - 通过SQL Server Profiler跟踪验证,系统仍在执行原始查询:替换匹配字段为
descr的修改未生效,生成的SQL语句仍然使用alternateID字段做匹配
目前推测可能遗漏了某个基础配置项,求相关解决思路。
内容的提问来源于stack exchange,提问作者Jerry Kurtz
相关产品推荐
相关产品推荐

