我正在销售订单中进行自定义,我想自定义操作取消订单。我反映了代码,但只能找到这个:
public PXAction<SOOrder> cancelled;
[PXUIField(Visible = false)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.DataEntryF)]
protected virtual IEnumerable Cancelled(PXAdapter adapter)
{
return adapter.Get();
}
自定义功能是否合适?
答案 0 :(得分:3)
这是一个非常好的问题,因为它涉及的不仅仅是业务逻辑层。
SOOrderEntry是一个非常强大且复杂的页面,必须处理多个状态。为此,Acumatica Framework有一个自动化模块,允许根据当前状态设置不同的值。单击取消订单时,框架将触发页面自动化定义(SM205010)和自动化步骤(SM205000)中定义的状态更改。查看下面的取消订单操作的定义。
您可以看到点击按钮时,某些字段会被更改。请注意,已取消字段设置为True。字段已取消是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
既然我们已经了解Field已经更改,我们可以查找可以处理此更改的事件处理程序。目前有一个事件处理程序(FieldVerifying)可确保在执行此操作之前取消订单。如果要扩展验证逻辑,可以自定义此处理程序:
protected virtual void SOOrder_Cancelled_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)
如果您希望添加取消成功时可能发生的事件,则可以创建新的事件处理程序(FieldUpdated):
protected virtual void SOOrder_Cancelled_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
您找到的代码只是占位符来创建按钮,并允许框架在您按下时触发自动化步骤。