如何在网格中添加一列以显示 Acumatica 中另一个屏幕的值?

How to add a column to the grid that shows value from another screen in Acumatica?

我是 Acumatica 的新手,你能帮帮我吗?我也有屏幕 IN202500(库存项目)和 SO301000(销售订单)。我向库存项目添加了一个字段,现在我需要在每个库存项目的销售订单的网格列中显示该字段的值。我想我需要为此使用 PXDefault 属性吗?

有多种方法可以做到这一点。我会提供3种可能性。

  1. 如果网格使用的视图包含 InventoryItem,您可以简单地从 InventoryItem select 自定义字段并将其直接添加到屏幕。我假设这不是一个选项,否则您可能已经找到了。

  2. 在 SOLine 上的 DAC 扩展中创建一个自定义字段,将自定义字段添加为未绑定(PXString,而不是 PXDBString),然后使用 PXDBScalar 或 PXFormula 来填充它。我没有使用 PXDBScalar 或 PXFormula 从 DAC 扩展中检索值,所以我会留给您研究。我知道如果您直接从 InventoryItem 中提取一个值,这将非常容易,因此值得进行研究。

  3. 像#2 一样创建为未绑定字段,但在 SOLine_RowSelecting 事件中填充它。这类似于 JvD 的建议,但我会选择 RowSelecting,因为它是构建缓存数据的地方。 RowSelected 应该保留,一般来说,一旦记录已经在缓存中,就可以控制 UI 体验。请记住,这将需要使用新的 PXConnectionScope,因为 Acuminator 会建议并帮助您添加。 (如示例所示。)在紧要关头,如果我没有时间整理作为选项 2 提供的通常更简单的解决方案,我会这样做。

选项 3 的代码:

#region SOLine_RowSelecting
protected virtual void _(Events.RowSelecting<SOLine> e)
{
    SOLine row = (SOLine)e.Row;

    if (row == null)
    {
        return;
    }

    using (new PXConnectionScope())
    {
        SOLineExt rowExt = row.GetExtension<SOLineExt>();

        InventoryItem item = SelectFrom<InventoryItem>
            .Where<InventoryItem.inventoryID.IsEqual<@P.AsInt>>
            .View.Select(Base, row.InventoryID);

        InventoryItemExt itemExt = item.GetExtension<InventoryItemExt>();
        rowExt.UsrSSMyDatAField = itemExt.UsrSSMyDataField;
    }
}
#endregion