采购订单处于打开状态时,如何在 PO301000 上启用自定义字段?

How to enable a custom field on PO301000 when the PO is in Open status?

我已将自定义添加到 PO 条目屏幕,PO.30.10.00。自定义添加了四个日期字段、一个组合框文本字段和一个字符串 (10) 字段。

目前,这些字段仅在 PO 暂停时才可编辑。用户希望能够随时编辑这些字段。他们使用这些字段来跟踪不同的 PO,并将在其上构建通用查询,以便他们可以通过维护这些字段来传达 PO 的状态。

当采购订单处于打开状态时,承诺日期是可编辑的。我们希望这些自定义字段可以像承诺日期一样进行编辑。

采购订单屏幕主要由自动化步骤驱动。这一事实使得对自动化步骤的更改成为 PO 处于打开状态时启用自定义字段所需的强制性步骤:

要在 采购订单摘要 区域和 文档详细信息 网格上启用自定义文本字段,应该修改 NL Open 添加 2 行,如上面的屏幕截图所示。

添加这些行后,采购订单摘要区域中的自定义文本字段变为可编辑,但是,自定义文本字段列在文档详细信息 网格,因为 POLine_RowSelected 处理程序在 POOrderEntry BLC 中的实现方式:

[Serializable]
public class POOrderEntry : PXGraph<POOrderEntry, POOrder>, PXImportAttribute.IPXPrepareItems
{
    ...
    protected virtual void POLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        POLine row = (POLine)e.Row;
        POOrder doc = this.Document.Current;
        if (row == null) return;

        if (IsExport) return;//for performance 

        bool isLinkedToSO = row.Completed == true && IsLinkedToSO(row);

        if (this.Document.Current.Hold != true || isLinkedToSO)
        {
            PXUIFieldAttribute.SetEnabled(sender, e.Row, false);
            ...
        }
        ...
    }
    ...
}

要启用自定义文本字段列进行编辑,您还应该在 POOrderEntry BLC 扩展中订阅 POLine_RowSelected 处理程序,如下面的代码片段所示:

public class POOrderEntryExt : PXGraphExtension<POOrderEntry>
{
    public void POLine_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
    {
        POLine line = (POLine)e.Row;
        POOrder order = Base.Document.Current;
        if (order == null || line == null || Base.IsExport) return;

        if (order.Status == POOrderStatus.Open)
        {
            PXUIFieldAttribute.SetEnabled<POLineExt.usrCustomTextField>(sender, line, true);
        }
    }
}

一旦您在自动化步骤中进行了更改并在 POOrderEntry BLC 扩展中订阅了 POLine_RowSelected 处理程序,您在 采购订单摘要 区域和 文档详细信息 当 PO 处于打开状态时,网格应该打开以供编辑: