在 Acumatica 中,客户和供应商零件编号存储在库存项目屏幕上的交叉引用选项卡中。如下图所示,在 INItemXRef DAC 中声明了 AlternateID,并且 InventoryItem 和 INItemXRef DAC 之间存在一对多的关系:
话虽如此,无法将客户和供应商零件编号列添加到 InventoryID 选择器中,因为这会导致重复的 InventoryItem 记录。
另一种解决方案是在 InventoryItem DAC 中创建自定义文本字段,然后覆盖 InventoryItemMaint BLC 扩展中的 Persist 以连接备用 ID 并将结果存储在自定义文本字段(DB 列)中:
public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
{
[PXOverride]
public void Persist(Action del)
{
using (PXTransactionScope ts = new PXTransactionScope())
{
InventoryItem item = Base.Item.Current;
if (item != null && Base.itemxrefrecords.Cache.IsDirty)
{
string alternateIDs = string.Empty;
foreach (INItemXRef crossRef in Base.itemxrefrecords.Select())
{
alternateIDs = string.IsNullOrEmpty(alternateIDs) ?
crossRef.AlternateID : alternateIDs + "; " + crossRef.AlternateID;
}
item.GetExtension<InventoryItemExt>().UsrAlternateIDs = alternateIDs;
Base.Item.Update(item);
}
del();
ts.Complete();
}
}
}
为了简化初始设置,您还可以在 InventoryItemMaint BLC 扩展中实现 RecalcAlternateIDs 操作。 RecalcAlternateIDs 操作将遍历应用程序中的所有 Stock Items 并连接 Alternate ID:
public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
{
...
public PXAction<InventoryItem> RecalcAlternateIDs;
[PXButton]
[PXUIField(DisplayName = "Concatenate Alternate IDs")]
protected void recalcAlternateIDs()
{
PXLongOperation.StartOperation(Base, () =>
{
InventoryItemMaint itemMaint = PXGraph.CreateInstance<InventoryItemMaint>();
var items = PXSelect<InventoryItem, Where<InventoryItem.stkItem, Equal<boolTrue>>>.Select(itemMaint);
foreach (InventoryItem item in items)
{
itemMaint.Clear();
itemMaint.Item.Current = item;
itemMaint.itemxrefrecords.Cache.IsDirty = true;
itemMaint.Actions.PressSave();
}
});
}
}
默认情况下,所有选择器控件都会根据键(或定义时的 SubstituteKey)和描述(如果已定义)字段构建搜索索引。要扩展此列表,您可以在 Aspx 中将 PXSelector/PXSegmentMask 控件的 FilterByAllFields 属性设置为 True,或者按照以下步骤使用 FastFilterFields。在我看来,FastFilterFields 似乎是满足您的要求的更好选择。
下一步需要将 UsrAlternateIDs 列添加到 InventoryID 选择器中
- 为“销售订单”屏幕 (SO301000) 启动布局编辑器,然后从“操作”菜单中选择“编辑 Aspx”选项:
-
在 Aspx 文件中找到 InventoryID 选择器的声明:
<px:PXSegmentMask CommitChanges=“True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" />
-
对于 InventoryID 选择器,通过声明 UsrAlternateIDs 列来附加列,然后单击生成自定义脚本:
<px:PXSegmentMask CommitChanges="True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" >
<GridProperties FastFilterFields="UsrAlternateIDs">
<Columns>
<px:PXGridColumn DataField="UsrAlternateIDs" AutoGenerateOption="Add" Width="250px" />
</Columns>
</GridProperties>
</px:PXSegmentMask>