【问题标题】:How to get created entry after PXRedirectRequiredException callPXRedirectRequiredException 调用后如何获取创建的条目
【发布时间】:2016-11-18 21:07:40
【问题描述】:

我有这个自定义项,我希望用户单击名为 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);
    }
}

【问题讨论】:

    标签: acumatica


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      • 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

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

      【讨论】:

        猜你喜欢
        • 2014-09-09
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        相关资源
        最近更新 更多