在“操作”下重定向到页面的新操作

时间:2018-02-20 22:44:56

标签: action customization acumatica

我已经在这里浏览了一些问题,并找到一个重定向到带有一些参数的报告。我只想在Actions下拉列表中添加一个新动作,它只是用于重定向到Acumatica中的新页面。具体来说,我在案例页面(CR306000)中添加了一个操作,该按钮会将用户重定向到“销售订单”页面。我知道代码就是创建按钮:

[PXButton]
    [PXUIField(DisplayName = "Custom Action Title")]
    protected void CustomAction()
    {
        //stuff
    }

    public override void Initialize()
    {
        base.Initialize();
        Base.action.AddMenuAction(this.customAction);
    }

但是,我只是不知道重定向到新页面的代码是什么。我不确定是否只有一个URL更好,或者是否有办法以不同的方式进入屏幕。

2 个答案:

答案 0 :(得分:0)

您可以使用PXRedirectRequiredException打开图表。更好的是我喜欢使用PXRedirectHelper.TryRedirect。您可以搜索源代码以查找许多示例。基本上你需要你的图表加载你的记录和窗口模式。

打开销售订单页面的示例...

//...
SOOrder doc = PXSelect<SOOrder, Where<SOOrder.noteID, Equal<Required<POFixedDemand.refNoteID>>>>.Select(this, line.RefNoteID);
if (doc != null)
{
    SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
    graph.Document.Current = doc;
    PXRedirectHelper.TryRedirect(graph, PXRedirectHelper.WindowMode.NewWindow);
}
//...

答案 1 :(得分:0)

确切代码取决于上下文,是否在新图表中(使用&#39;此&#39;)或GraphExtension(使用&#39; Base&#39;)以及是否要选择新页面中的销售订单。

最常见的方法是创建所需屏幕的图形(在本例中为SalesOrderEntry)并重定向到该图形。

以下是图表扩展的事件处理程序示例,其中为新页面选择了销售订单:

[PXUIField(DisplayName = "View Sales Order")]
public virtual IEnumerable ViewSalesOrder(PXAdapter adapter)
{
    const string salesOrderNbr = "SOXXXXXXX";
    const string salesOrderType = "SO";

    SOOrderEntry salesOrderEntry = PXGraph.CreateInstance<SOOrderEntry>();

    SOOrder salesOrder = PXSelect<SOOrder,
                            Where<SOOrder.orderNbr, Equal<Required<SOOrder.orderNbr>>,
                            And<SOOrder.orderType, Equal<Required<SOOrder.orderType>>>>>.Select(Base,
                                                                                                salesOrderNbr,
                                                                                                salesOrderType);

    if (salesOrderEntry != null && salesOrder != null)
    {
        salesOrderEntry.Document.Current = salesOrder;
        throw new PXRedirectRequiredException(salesOrderEntry, "Document") { Mode = PXBaseRedirectException.WindowMode.NewWindow };
    }

    return adapter.Get();
}

如果您不需要选择销售订单,这也应该有效:

[PXUIField(DisplayName = "View Sales Order")]
public virtual IEnumerable ViewSalesOrder(PXAdapter adapter)
{
    throw new PXRedirectRequiredException(PXGraph.CreateInstance<SOOrderEntry>(), "Document") { Mode = PXBaseRedirectException.WindowMode.NewWindow };
}

对于某些具有PXPrimaryGraph属性的DAC,您可以直接重定向到DAC对象:

PXRedirectHelper.TryRedirect(Base, dacObject, PXRedirectHelper.WindowMode.NewWindow);