2016-09-30 57 views
0

我想在发货屏幕(SO302000)上的'确认货件'操作时执行一些代码(更改发货日期)。确认发货时执行代码

我在想,这将是做到这一点的方式:

public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry> 
{ 
    [PXOverride] 
    public virtual void ConfirmShipment(SOOrderEntry docgraph, SOShipment shiporder) 
    { 
     Base.ConfirmShipment(docgraph, shiporder); 
     //Add my code to do something here... 
    } 

} 

当我尝试,我得到一个装运计数器错误。有一个更好的方法吗?

+0

你可以在这里找到一个非常类似的情况:http://stackoverflow.com/questions/39211401/how-to-add-custom-business-logic- to-acumatica-frameworks-actions/39211402#39211402 –

+0

啊 - 美丽,谢谢..所以,我想这并不真正'取代'原来的Actions按钮,因为所有其他选项仍然存在,即使Action code在图形扩展中只有一个选项 - 确认发货 - 在它...不知道它是如何工作的 - 但它的工作原理。 – pmfith

+0

那么你可以覆盖ConfirmShipment方法,但你也必须复制粘贴所有的原始代码,以免破坏函数。如果你真正需要的是在调用原始方法之前进行一些预处理,我认为我给出的链接的解决方案更简单,更清洁 –

回答

1

从一个类似的案件: How to add custom business logic to Acumatica framework's Actions?

public class SOShipmentEntryExt : PXGraphExtension<SOShipmentEntry> 
{ 

    public PXAction<SOShipment> action; 
    [PXButton] 
    [PXUIField(DisplayName = "Actions", MapEnableRights = PXCacheRights.Select)] 
    protected IEnumerable Action(PXAdapter adapter 
           ,[PXIntList(new int[] { 1 } 
           ,new string[] { "Confirm Shipment" }) 
           ,PXInt] int? actionID) 
    { 
     //actionID = 1 means the Confirm Shipment action was the one invoked 
     if (actionID == 1) 
     { 

      Base.Document.Current.ShipDate = Base.Accessinfo.BusinessDate; 
      Base.Document.Update(Base.Document.Current); 
     } 

     //calls the basic action that was invoked 
     return Base.action.Press(adapter); 
    } 

}