在销售订单屏幕上启用字段

Enabling Fields on Sales Order Screen

当销售订单的状态为已完成时,我需要在销售订单屏幕上启用字段。

我发现了一些其他帖子,其中包含旧版本 Acumatica 的解决方案,您还需要更改自动化步骤中的内容,但在版本 21.207 中,自动化步骤已被工作流程取代,我似乎无法编辑它们销售订单屏幕。

我的代码:

protected void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e)
{
    var row = (SOOrder)e.Row;
    if (row == null) return;
    if (Condition1 != null && Condition2 == true)
    {     
        cache.AllowUpdate = true;
        Base.Document.Cache.AllowUpdate = true;
        PXUIFieldAttribute.SetEnabled<SOOrder.salesPersonID>(cache, e.Row, true);
    }
}

旧帖子:

更新 尝试了答案 凯尔·范德斯托普

但不幸的是,cache.AllowUpdate = true; 在调试模式下越过它后仍然为 False。

更新 2

在我重新进行定制后,Kyle Vanderstoep 的解决方案最终奏效了。 Acumatica 和我的代码在第一轮就表现出色。

两个步骤,在工作流和所选行中覆盖。这是给 CustomerRefNbr

    public override void Configure(PXScreenConfiguration configuration)
    {
        var context = configuration.GetScreenConfigurationContext<SOOrderEntry, SOOrder>();
        context.UpdateScreenConfigurationFor(
            c => c.WithFlows(flowContainer =>
            {
                flowContainer
                    .Update(SOBehavior.SO, df => df
                        .WithFlowStates(fls =>
                        {
                            fls.Update<SOOrderStatus.completed>(flsc => flsc
                                .WithFieldStates(fs => fs.AddField<SOOrder.customerRefNbr>()));
                        }));
            }));
    }

    public virtual void SOOrder_RowSelected(PXCache cache, PXRowSelectedEventArgs e, PXRowSelected baseN)
    {
        baseN(cache, e);
        SOOrder doc = e.Row as SOOrder;

        if (doc == null)
        {
            return;
        }
        cache.AllowUpdate = true;
        PXUIFieldAttribute.SetEnabled<SOOrder.customerRefNbr>(cache, null, true);
    }