我有 ProductLine 和 ProductLineItem DAC。产品系列包含一组相关的库存项目。
public class ProductLine : IBqlTable
{
[PXDBIdentity()]
public virtual int? LineID { get; set; }
public abstract class lineID : IBqlField { }
[PXDBString(50, IsKey = true)]
[PXUIField(DisplayName = "Line ID")]
[PXDefault]
[PXSelector(typeof(ProductLine.lineCD),
typeof(ProductLine.lineCD),
typeof(ProductLine.description))]
public virtual string LineCD { get; set; }
public abstract class lineCD : IBqlField { }
// ...
}
public class ProductLineItem : IBqlTable
{
[PXDBInt(IsKey = true)]
[PXDBDefault(typeof(ProductLine.lineID))]
[PXParent(typeof(Select<ProductLine,
Where<ProductLine.lineID,
Equal<Current<ProductLineItem.lineID>>>>))]
public virtual int? LineID { get; set; }
public abstract class lineID : IBqlField { }
[PXDBInt(IsKey = true)]
[PXUIField(DisplayName = "Inventory ID")]
[PXSelector(
typeof(Search2<InventoryItem.inventoryID,
LeftJoin<ProductLineItem,
On<ProductLineItem.lineID, Equal<Current<ProductLineItem.lineID>>,
And<ProductLineItem.inventoryID, Equal<InventoryItem.inventoryID>>>>,
Where<InventoryItem.itemStatus, Equal<InventoryItemStatus.active>,
And<ProductLineItem.lineID, IsNull>>>),
new Type[] {
typeof(InventoryItem.inventoryCD),
typeof(InventoryItem.descr)
},
SubstituteKey = typeof(InventoryItem.inventoryCD))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
// ...
}
然后在非常简单的FormDetail条目页面中实现它们。
public class ProductLineEntry : PXGraph<ProductLineEntry, ProductLine>
{
public PXSelect<ProductLine> ProductLines;
public PXSelect<ProductLineItem,
Where<ProductLineItem.lineID,
Equal<Current<ProductLine.lineID>>>> ProductLineItems;
}
ProductLineItem.inventoryID上的PXSelector提供尚未添加到当前产品系列的活动项目。但是,当像这样写入选择器时,尝试从网格中删除项目会导致红色&#34; x&#34;指示符出现但record is never actually removed。
在没有Search2&lt;&gt; ...
的情况下将PXSelector更改为更基本的选择器[PXSelector(typeof(InventoryItem.inventoryID),
typeof(InventoryItem.inventoryCD),
typeof(InventoryItem.descr),
SubstituteKey = typeof(InventoryItem.inventoryCD))]
......记录正常删除。
如何使用搜索&lt;&gt;选择器中的BQL仍然能够从详细信息网格中删除记录吗?
答案 0 :(得分:1)
问题发生的原因是 ProductLineItem.InventoryID 字段是关键字段,并且为此字段定义的BQL搜索未返回为选择的 InventoryItem ProductLineItem 记录您尝试删除。
该框架作为 删除 操作的一部分,首先要调用 FieldUpdating 和 FieldUpdated 所有已删除记录键字段的处理程序。在您的情况下,由于 PXSelectorAttribute 无法找到为已删除的 ProductLineItem 记录选择的 InventoryItem ,这些处理程序会失败。有关详细信息,请参阅Acumatica API Reference。
解决此问题的最简单方法是修改 ProductLineItem.InventoryID 字段中的BQL搜索,以返回尚未添加到当前产品系列的活动项目和为当前选择的项目 ProductLineItem 记录:
Where2<Where<InventoryItem.itemStatus, Equal<InventoryItemStatus.active>,
And<ProductLineItem.lineID, IsNull>>>,
Or<InventoryItem.inventoryID, Equal<Current<ProductLineItem.inventoryID>>>>