PXAction 似乎什么都不做

PXAction seemingly does nothing

我正在 销售订单 中进行自定义,我想自定义操作 取消订单。我反映了代码,但只能找到这个:

    public PXAction<SOOrder> cancelled;
    [PXUIField(Visible = false)]
    [PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
    protected virtual IEnumerable Cancelled(PXAdapter adapter)
    {
        return adapter.Get();
    }

自定义功能合适吗?

这是个很好的问题,因为它涉及的不仅仅是业务逻辑层。

SOOrderEntry 是一个非常强大且复杂的页面,必须处理多个状态。为此,Acumatica Framework 有一个自动化模块,允许根据当前状态设置不同的值。当您单击 Cancel Order 时,框架会触发页面自动化定义 (SM205010) 和自动化步骤 (SM205000) 中定义的状态更改。请看下面取消订单操作的定义。

您可以看到点击按钮后,一些字段发生了变化。请注意字段 Cancelled 设置为 True。 Cancelled 字段是 SOOrder 的绑定字段,定义如下:

    #region Cancelled

    public abstract class cancelled : PX.Data.IBqlField
    {
    }
    protected Boolean? _Cancelled;
    [PXDBBool()]
    [PXDefault(false)]
    [PXUIField(DisplayName = "Canceled")]
    public virtual Boolean? Cancelled
    {
        get
        {
            return this._Cancelled;
        }
        set
        {
            this._Cancelled = value;
        }
    }
    #endregion

既然我们知道字段已更改,我们可以寻找可以处理此更改的事件处理程序。目前有一个事件处理程序 (FieldVerifying) 可以确保在取消订单之前可以取消订单。如果你想扩展验证逻辑,你可以自定义这个处理程序:

protected virtual void SOOrder_Cancelled_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)

如果您希望添加一个在取消成功时会发生的事件,您可以创建一个新的事件处理程序 (FieldUpdated):

protected virtual void SOOrder_Cancelled_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)

您找到的代码只是一个占位符,用于创建按钮并允许框架在您按下按钮时触发自动化步骤。