将备用 ID 字段添加到 SOLine 网格上的库存 ID 选择器
Add Alternate ID field to the Inventory ID selector on the SOLine grid
我正在尝试将备用 ID 字段添加到 SOLine 详细信息网格上的搜索选择器。我的代码如下:
[PXNonInstantiatedExtension]
public class SO_SOLine_ExistingColumn : PXCacheExtension<PX.Objects.SO.SOLine>
{
#region InventoryID
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXSelector(typeof(Search2<InventoryItem.inventoryCD, LeftJoin<INItemXRef, On<InventoryItem.inventoryID, Equal<INItemXRef.inventoryID>>>>),
typeof(PX.Objects.IN.InventoryItem.inventoryCD),
typeof(PX.Objects.IN.INItemXRef.alternateID),
typeof(PX.Objects.IN.InventoryItem.descr),
typeof(PX.Objects.IN.InventoryItem.itemClassID),
typeof(PX.Objects.IN.InventoryItem.itemStatus),
typeof(PX.Objects.IN.InventoryItem.itemType),
typeof(PX.Objects.IN.InventoryItem.baseUnit),
typeof(PX.Objects.IN.InventoryItem.salesUnit),
typeof(PX.Objects.IN.InventoryItem.purchaseUnit),
typeof(PX.Objects.IN.InventoryItem.basePrice))]
public int? InventoryID { get; set; }
#endregion
}
public void SOLine_InventoryID_CacheAttached(PXCache sender)
{
}
这会将备用 ID 字段添加到选择器中,并且可能会短暂地 returns 选择正确的库存 CD,但随后库存 CD 会更改整数 ID,这当然会引发一个错误指示器,因为无法识别 ID。
您需要让您的选择器搜索 InventoryID,然后添加一个 "SubstituteKey" 选项,该选项将在 UI 选择器中显示 InventoryCD。示例:[PXSelector(typeof(InventoryItem.inventoryID), SubstituteKey = typeof(InventoryItem.inventoryCD))]
George,InventoryItem 和 INItemXRef DAC 之间存在一对多关系 - 将 PX.Objects.IN.INItemXRef.alternateID BQL 字段添加到 PXSelectorAttribute 的声明中不足以完成任务。
声明 InventoryItem DAC 的未绑定文本字段以存储每个库存项目的备用 ID:
public class InventoryItemExt : PXCacheExtension<InventoryItem>
{
#region AlternateIDs
public abstract class alternateIDs : IBqlField { }
[PXString]
[PXUIField(DisplayName = "Alternate IDs")]
public virtual string AlternateIDs { get; set; }
#endregion
}
在 SOOrderEntry BLC 扩展中订阅 RowSelecting 事件(强制使用 PXConnectionScope 与数据库建立另一个连接)以连接每行的备用 ID,并使用计算出的字符串值填充未绑定的备用 ID 字段:
public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntry>
{
public override void Initialize()
{
Base.RowSelecting.AddHandler<InventoryItem>((sender, e) =>
{
InventoryItem item = e.Row as InventoryItem;
if (item == null) return;
string alternateIDs = string.Empty;
using (new PXConnectionScope())
{
foreach (INItemXRef crossRef in PXSelect<INItemXRef,
Where<INItemXRef.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, item.InventoryID))
{
alternateIDs = string.IsNullOrEmpty(alternateIDs) ?
crossRef.AlternateID : alternateIDs + "; " + crossRef.AlternateID;
}
}
item.GetExtension<InventoryItemExt>().AlternateIDs = alternateIDs;
});
}
}
启动“销售订单”屏幕的布局编辑器 (SO301000) 和“操作”菜单中的select“编辑 Aspx”选项:
在 Aspx 文件中找到 InventoryID 的声明select或:
<px:PXSegmentMask CommitChanges=“True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" />
对于 InventoryID select或者,将 FastFilterFields 属性 设置为 AlternateIDs
并通过声明 AlternateIDs 列附加列,然后单击生成自定义脚本:
<px:PXSegmentMask CommitChanges="True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" >
<GridProperties FastFilterFields="AlternateIDs">
<Columns>
<px:PXGridColumn DataField="AlternateIDs" AutoGenerateOption="Add" Width="250px" />
</Columns>
</GridProperties>
</px:PXSegmentMask>
我正在尝试将备用 ID 字段添加到 SOLine 详细信息网格上的搜索选择器。我的代码如下:
[PXNonInstantiatedExtension]
public class SO_SOLine_ExistingColumn : PXCacheExtension<PX.Objects.SO.SOLine>
{
#region InventoryID
[PXMergeAttributes(Method = MergeMethod.Append)]
[PXSelector(typeof(Search2<InventoryItem.inventoryCD, LeftJoin<INItemXRef, On<InventoryItem.inventoryID, Equal<INItemXRef.inventoryID>>>>),
typeof(PX.Objects.IN.InventoryItem.inventoryCD),
typeof(PX.Objects.IN.INItemXRef.alternateID),
typeof(PX.Objects.IN.InventoryItem.descr),
typeof(PX.Objects.IN.InventoryItem.itemClassID),
typeof(PX.Objects.IN.InventoryItem.itemStatus),
typeof(PX.Objects.IN.InventoryItem.itemType),
typeof(PX.Objects.IN.InventoryItem.baseUnit),
typeof(PX.Objects.IN.InventoryItem.salesUnit),
typeof(PX.Objects.IN.InventoryItem.purchaseUnit),
typeof(PX.Objects.IN.InventoryItem.basePrice))]
public int? InventoryID { get; set; }
#endregion
}
public void SOLine_InventoryID_CacheAttached(PXCache sender)
{
}
这会将备用 ID 字段添加到选择器中,并且可能会短暂地 returns 选择正确的库存 CD,但随后库存 CD 会更改整数 ID,这当然会引发一个错误指示器,因为无法识别 ID。
您需要让您的选择器搜索 InventoryID,然后添加一个 "SubstituteKey" 选项,该选项将在 UI 选择器中显示 InventoryCD。示例:[PXSelector(typeof(InventoryItem.inventoryID), SubstituteKey = typeof(InventoryItem.inventoryCD))]
George,InventoryItem 和 INItemXRef DAC 之间存在一对多关系 - 将 PX.Objects.IN.INItemXRef.alternateID BQL 字段添加到 PXSelectorAttribute 的声明中不足以完成任务。
声明 InventoryItem DAC 的未绑定文本字段以存储每个库存项目的备用 ID:
public class InventoryItemExt : PXCacheExtension<InventoryItem> { #region AlternateIDs public abstract class alternateIDs : IBqlField { } [PXString] [PXUIField(DisplayName = "Alternate IDs")] public virtual string AlternateIDs { get; set; } #endregion }
在 SOOrderEntry BLC 扩展中订阅 RowSelecting 事件(强制使用 PXConnectionScope 与数据库建立另一个连接)以连接每行的备用 ID,并使用计算出的字符串值填充未绑定的备用 ID 字段:
public class SOOrderEntryExtension : PXGraphExtension<SOOrderEntry> { public override void Initialize() { Base.RowSelecting.AddHandler<InventoryItem>((sender, e) => { InventoryItem item = e.Row as InventoryItem; if (item == null) return; string alternateIDs = string.Empty; using (new PXConnectionScope()) { foreach (INItemXRef crossRef in PXSelect<INItemXRef, Where<INItemXRef.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(Base, item.InventoryID)) { alternateIDs = string.IsNullOrEmpty(alternateIDs) ? crossRef.AlternateID : alternateIDs + "; " + crossRef.AlternateID; } } item.GetExtension<InventoryItemExt>().AlternateIDs = alternateIDs; }); } }
启动“销售订单”屏幕的布局编辑器 (SO301000) 和“操作”菜单中的select“编辑 Aspx”选项:
在 Aspx 文件中找到 InventoryID 的声明select或:
<px:PXSegmentMask CommitChanges=“True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" />
对于 InventoryID select或者,将 FastFilterFields 属性 设置为
AlternateIDs
并通过声明 AlternateIDs 列附加列,然后单击生成自定义脚本:<px:PXSegmentMask CommitChanges="True" ID="edInventoryID" runat="server" DataField="InventoryID" AllowEdit="True" > <GridProperties FastFilterFields="AlternateIDs"> <Columns> <px:PXGridColumn DataField="AlternateIDs" AutoGenerateOption="Add" Width="250px" /> </Columns> </GridProperties> </px:PXSegmentMask>