【问题标题】:PXAction seemingly does nothingPXAction 似乎什么都不做
【发布时间】:2015-10-29 05:24:31
【问题描述】:

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

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

自定义功能是否正确?

【问题讨论】:

    标签: cloud erp acumatica


    【解决方案1】:

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

    SOOrderEntry 是一个非常强大且复杂的页面,它必须处理多种状态。为此,Acumatica 框架有一个自动化模块,允许根据当前状态设置不同的值。当您单击取消订单时,框架会触发页面自动化定义 (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)
    

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

    【讨论】:

    • 感谢您的解释。我还关心我们在屏幕 SO50100 中进行批量处理时的事件,我们如何在事件中识别它?我们有办法做到这一点吗?
    • SOOrderProcess 应该实例化一个 SOOrderEntry 图来执行操作,因此您不必进一步扩展它。
    猜你喜欢
    • 2022-01-14
    • 2012-09-12
    • 2011-03-17
    • 2017-09-11
    • 2013-05-31
    • 2016-09-22
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多