我正在尝试将我的一个自定义操作添加到SOOrder页面中现有的Actions下拉列表中。我的代码定义如下:
public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
public PXAction<PX.Objects.SO.SOOrder> customAction;
[PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Custom Action Title")]
protected void CustomAction()
{
//stuff
}
public SOOrderEntry_Extension()
{
Base.action.AddMenuAction(customAction);
}
}
这样做会给我一个空对象引用错误。接下来我尝试按如下方式定义自己的动作列表:
public PXAction<PX.Objects.SO.SOOrder> ActionsMenu;
[PXButton]
[PXUIField(DisplayName = "Actions")]
protected virtual void actionsMenu()
{
}
我也尝试过使用
this.ActionsMenu.AddMenuAction(customAction)
但我又得到了相同的空引用。我还尝试了以下代码:
public SOOrderEntry_Extension()
{
Base.action.MenuAutoOpen = true;
}
只是为了看看会发生什么并且也得到相同的空引用错误:
编辑:Stackoverflow不允许我在blockquotes中包含以下部分,因为它类似于代码。如果有人可以解决这个问题,那就去吧。[NullReferenceException:对象引用未设置为对象的实例。]
PX.Data.PXGraph.CreateInstance(Type graphType, String prefix) +529
PX.Web.UI.PXBaseDataSource.InstantiateDataGraph(Type type) +20
PX.Web.UI.PXBaseDataSource.f(Type A_0) +400
PX.Web.UI.PXBaseDataSource.g(Type A_0) +146
PX.Web.UI.PXBaseDataSource.get_DataGraph() +302
PX.Web.UI.PXBaseDataSource.k() +188
PX.Web.UI.PXBaseDataSource.GetCommands() +69
PX.Web.UI.PXBaseDataSource.GetCommandStates() +74
PX.Web.UI.PXGrid.p() +132
PX.Web.UI.PXGrid.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +476
System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +149
PX.Web.UI.PXGrid.CreateChildControls() +85
System.Web.UI.Control.EnsureChildControls() +92
System.Web.UI.WebControls.CompositeDataBoundControl.get_Controls() +16
PX.Web.UI.PXSmartPanel.a(ControlCollection A_0, Boolean A_1, Boolean A_2) +257
PX.Web.UI.PXSmartPanel.a(Boolean A_0) +98
PX.Web.UI.PXSmartPanel.SetBindingState(Boolean load) +101
PX.Web.UI.PXSmartPanel.OnInit(EventArgs e) +64
System.Web.UI.Control.InitRecursive(Control namingContainer) +139
System.Web.UI.Control.InitRecursive(Control namingContainer) +312
System.Web.UI.Control.InitRecursive(Control namingContainer) +312
System.Web.UI.Control.InitRecursive(Control namingContainer) +312
System.Web.UI.Control.InitRecursive(Control namingContainer) +312
System.Web.UI.Control.InitRecursive(Control namingContainer) +312
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +408
此时我不确定要将此自定义操作添加到下拉列表中我需要做什么,但我已经关注此问题的Stack Overflow上的其他帖子,但无法找到解决方案。我也看过T200,但是没能找到关于如何执行这项任务的直接建议。
答案 0 :(得分:4)
您应该将代码添加到基本操作菜单中,以覆盖初始化。在图表扩展中尝试此操作,然后删除您拥有的构造函数。
public class SOOrderEntry_Extension : PXGraphExtension<SOOrderEntry>
{
public PXAction<PX.Objects.SO.SOOrder> customAction;
[PXButton]
[PXUIField(DisplayName = "Custom Action Title")]
protected void CustomAction()
{
//stuff
}
public override void Initialize()
{
base.Initialize();
Base.action.AddMenuAction(this.customAction);
}
}