在Acumatica客戶和供應商零件編號存儲在庫存項目屏幕上的交叉引用標籤中。正如下面的截圖所示,AlternateID在INItemXRef DAC聲明,還有就是InventoryItem和INItemXRef DAC之間的一個一對多的關係:
雖這麼說,它不能添加客戶和供應商部分將數列編入InventoryID選擇器,因爲這將導致重複的InventoryItem記錄。
另一種解決方案是在InventoryItem DAC來創建自定義文本字段中,然後覆蓋堅持在InventoryItemMaint BLC延伸以連接在自定義文本字段可替代的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行動將循環儘管在應用程序的所有庫存產品,並串連備用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定義時),並說明,如果定義,字段。要擴展此列表,可以將FilterByAllFields屬性設置爲Aspx中的PXSelector/PXSegmentMask控件的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>
可以有很多的客戶/供應商的零件號爲一個項目,怎麼辦你打算在選擇器中顯示? – Hybridzz