如何在PXRedirectRequiredException调用后获取创建的条目

时间:2016-11-18 02:36:40

标签: acumatica

我有这个自定义,我希望用户点击名为Create Project的商机屏幕中的新操作菜单,在该屏幕中重定向或弹出项目输入屏幕,一旦保存,重定向回机会屏幕在项目字段中选择的已创建项目。

到目前为止,这是我的代码,我试图从其他类似的模块中复制,但问题是在“创建项目”弹出窗口中保存并关闭后,它不会在Oppurtunity屏幕中更新项目字段。

public class OpportunityMaint_Extension:PXGraphExtension<OpportunityMaint> {

    public override void Initialize() { 
        Base.Action.AddMenuAction(createProject);
        createSalesOrder.SetVisible(false);
        createSalesOrder.SetEnabled(false);  
    }

    public PXAction<PX.Objects.CR.CROpportunity> createSalesOrder;

    [PXUIField(Visible = false)]
    public IEnumerable CreateSalesOrder(PXAdapter adapter) {
        return null;
    }


    public PXAction<PX.Objects.CR.CROpportunity> createProject;

    [PXUIField(DisplayName = "Create Project", MapEnableRights = PXCacheRights.Update, MapViewRights = PXCacheRights.Select)]
    [PXButton()]
    public IEnumerable CreateProject(PXAdapter adapter) {
        List<CROpportunity> opportunities = new List<CROpportunity>(adapter.Get().Cast<CROpportunity>());

        foreach (CROpportunity opp in opportunities) {
            Base.Save.Press(); 
            PXLongOperation.StartOperation(Base, () => ConvertToProject(opp)); 
        }

        return opportunities;
    }

    public static void ConvertToProject(CROpportunity opportunity) {
        ProjectEntry projectEntry = PXGraph.CreateInstance<ProjectEntry>();
        PMProject proj = new PMProject {
            ContractCD = (string)"<NEW>",
            CustomerID = opportunity.BAccountID,
            Description = opportunity.OpportunityName,
            OwnerID = opportunity.OwnerID
        };

        proj = projectEntry.Project.Insert(proj);
        opportunity.ProjectID = proj.ContractID; 

        throw new PXRedirectRequiredException(projectEntry , "Create Project", true); 
    }

    protected void CROpportunity_RowSelected(PXCache cache, PXRowSelectedEventArgs e) {
        var row = (CROpportunity)e.Row;
        if (row == null) return;

        //createProject.SetEnabled(true);
        createSalesOrder.SetVisible(false);
        createSalesOrder.SetEnabled(false);
    }
}

2 个答案:

答案 0 :(得分:0)

尝试将弹出命令取消添加到页面的.aspx文件中。 将类似<px:PXDSCallbackCommand Name="YourAction" Visible="True" CommitChanges="True" PopupCommand="Cancel" PopupCommandTarget="ds" />的内容添加到aspx中的操作声明中。

答案 1 :(得分:0)

我们碰到了类似的事情。问题是,一旦您在浏览器中将页面作为新选项卡/页面打开,就没有真正的链接返回到上一页。我们所做的是通过使用以下方法之一在调用图中弹出对另一个图的调用:

  • PXRedirectHelper.TryRedirect(graph,PXRedirectHelper.WindowMode.Popup)
  • 抛出新的PXPopupRedirectException(graph,string.Empty,true)

唯一的缺点是默认弹出式面板尺寸很小,并且在页面或代码文件中无法动态调整。您可以使用我在此处找到的固定值来增加大小:

Changing the height/width when calling another graph as an in-page popup using PXPopupRedirectException

如果您可以在调用之前将机会传递给项目图表,则可以使用它来更新保存新项目时的机会。当面板关闭时,它应该使用新值刷新您的机会。