我想要实现的,就是在InSiteStatus表中获取特定inventoryID的QtyOnHand。
我为InventoryID创建了一个DAC,并将其标记为“Style”,将另一个标记为QtyOnHand。
我使用了FieldUpdated事件处理程序,因此每次用户选择新的inventoryID时,它都会更新QtyOnHand字段。
这是我的工作。
DAC:
public class AllocationFilter: IBqlTable
{
#region Style
public abstract class style : IBqlField
{
}
[PXInt]
[PXUIField(DisplayName = "Style")]
[PXSelector(typeof(InventoryItem.inventoryID)
, typeof(InventoryItem.inventoryCD)
, typeof(InventoryItem.descr)
, SubstituteKey = typeof(InventoryItem.inventoryCD)
)]
public virtual int? Style { get; set; }
#endregion
#region OnHand
public abstract class onHand : IBqlField
{ }
[PXDecimal()]
[PXUIField(DisplayName = "On Hand", Enabled = false)]
public virtual decimal? OnHand { get; set; }
#endregion
}
事件处理程序:
protected void AllocationFilter_Style_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
{
// Obtain the new data record that contains the updated
// values of all data fields
AllocationFilter filterAlloc = (AllocationFilter)e.Row;
if (filterAlloc == null)
return;
// This is where the error triggers...
PXResultset<INSiteStatus> insitestatus = PXSelect<INSiteStatus,
Where<INSiteStatus.inventoryID,
Equal<AllocationFilter.style>>>.Select(this);
foreach (INSiteStatus sitestatus in insitestatus)
{
filterAlloc.OnHand = sitestatus.QtyOnHand;
}
}
我认为我的PXResultSet存在问题,你能帮帮我们吗?
答案 0 :(得分:1)
我在这里看到两个选项。
一,为此创建一个视图
public PXSelect<INSiteStatus,Where<INSiteStatus.inventoryID,Equal<Current<AllocationFilter.style>>> StyleStatus;
然后在你的事件处理程序
中foreach (INSiteStatus sitestatus in StyleStatus.Select())
{......}
或者两个,就像你拥有它一样内联
PXResultset<INSiteStatus> insitestatus = PXSelect<INSiteStatus,
Where<INSiteStatus.inventoryID,
Equal<Required<INSiteStatus.inventoryID>>>.Select(this,filterAlloc.Style);
除非你需要更好地控制select语句,否则我会使用View