【问题标题】:Open custom Acumatica screen as popup from button on Bills and Adjustments screen从账单和调整屏幕上的按钮弹出自定义 Acumatica 屏幕
【发布时间】:2017-01-16 22:20:48
【问题描述】:

我有一个带有自己的 BLC 和 DAC 的完全自定义屏幕,我想通过放置在账单和调整屏幕上的按钮以弹出窗口的形式打开它。我将其编码如下:

public class APInvoiceEntryExt : PXGraphExtension<APInvoiceEntry>
{

    public PXAction<APInvoice> LaunchOpenSource;
    [PXButton(CommitChanges = true)]
    [PXUIField(DisplayName = "Open Source")]

    protected void launchOpenSource()
    {
        APInvoice apinvoice = (APInvoice)Base.Document.Current;

        if (apinvoice != null)
        {

            //var url = "http://localhost/AcumaticaDB2562/?ScreenId=AC302000&OpenSourceName=Bills+and+Adjustments&DataID=" + apinvoice.RefNbr;
            OpenSourceDataMaint graph = PXGraph.CreateInstance<OpenSourceDataMaint>();
            graph.OpenSourceDataHeader.Current = graph.OpenSourceDataHeader.Search<xTACOpenSourceHeader.openSourceName, xTACOpenSourceHeader.dataID>("Bills and Adjustments", apinvoice.RefNbr);

            if (graph.OpenSourceDataHeader.Current != null)
            {
                throw new PXRedirectRequiredException(graph, "Open Source")
                {
                    Mode = PXBaseRedirectException.WindowMode.NewWindow
                };
            }
        }
    }
}               

我已将我的自定义屏幕的所有相关 DAC 和 BLC 包含在我用来自定义添加按钮的“账单和调整”屏幕的类库项目中。

我遇到的问题是启动按钮时收到以下错误消息:

我已将使用 OpenSourceDataMaint BLC 的屏幕的所有相关权限设置为“按角色访问权限”、“按用户访问权限”和“按屏幕访问权限”中的“删除”。没有任何区别。

【问题讨论】:

    标签: acumatica


    【解决方案1】:

    看起来 DataSource 正在尝试在 SiteMap 中查找 GraphType 等于 OpenSourceDataMaint 类的全名的节点,但失败了:

    public class PXBaseDataSource : DataSourceControl, IAttributeAccessor, INamingContainer, ICompositeControlDesignerAccessor, ICommandSource, IPXCallbackHandler, IPXScriptControl, IPXCallbackUpdatable, IPostBackDataHandler
    {
        ...
    
        private static string getFormUrl(Type graphType)
        {
            PXSiteMapNode node = getSiteMapNode(graphType);
            if (node == null)
            {
                throw new PXException(string.Format(ErrorMessages.GetLocal(ErrorMessages.NotEnoughRightsToAccessObject), graphType.Name));
            }
            String url = node.Url;
            //if (url.Contains("unum=")) url = PXUrl.IgnoreQueryParameter(url, "unum");
            return PXUrl.TrimUrl(url);
        }
    
        ...
    }
    

    您能否检查一下您的自定义 Aspx 页面中是否为 PXDataSource 正确定义了 TypeName?另外,您能否检查一下您的自定义 Aspx 页面是否也存在于 Cst_Published 文件夹中,以及在 Pages 和 Cst_Published 文件夹中为 PXDataSource.TypeName 属性设置的值是否相同?

    还有一点需要检查,站点地图屏幕是否为您的自定义屏幕显示正确的 GraphName? - 如果您能提供屏幕截图以供验证,将会很有帮助。

    如果可能,请提供可以在本地发布的自定义包(即使是编译好的程序集)——这将大大加快调查过程。

    【讨论】:

    • Ruslan - 我找到了一个解决方案,就是将代码放在自定义管理器的代码窗口中,而不是放在网站引用的类库项目中。我不确定如何将其作为类库项目进行,因为它需要引用已发布的自定义(我们的自定义屏幕、BLC 和 DAC)。当您将其放入 Acumatica 中的代码窗口时,我们发布的自定义/新屏幕自定义已经存在,因此参考有效。
    【解决方案2】:

    对我来说,解决方案是将代码(如下所示)放在自定义窗口中,而不是 Visual Studio 中的类库项目中。由于代码需要引用另一个已发布的自定义项,因此将其放在 Acumatica 代码窗口中即可解决此问题。在我的类库项目中没有引用已发布的自定义屏幕自定义,这显然会导致问题 - 我不确定如何处理。

    public class APInvoiceEntryExt:PXGraphExtension<APInvoiceEntry>
    {
    
        public PXAction<APInvoice> LaunchOpenSource;
        [PXButton(CommitChanges = true)]
        [PXUIField(DisplayName = "Open Source")]
    
        protected void launchOpenSource()
        {
            APInvoice apinvoice = (APInvoice)Base.Document.Current;
    
            if (apinvoice != null)
            {
                AssistantController.OpenSourceDataMaint graph = PXGraph.CreateInstance<AssistantController.OpenSourceDataMaint>();
                graph.OpenSourceDataHeader.Current = graph.OpenSourceDataHeader.Search<AssistantController.xTACOpenSourceHeader.openSourceName
                                                                                      ,AssistantController.xTACOpenSourceHeader.dataID>("Bills and Adjustments", apinvoice.RefNbr);
    
                throw new PXRedirectRequiredException(graph, "Open Source")
                {
                    Mode = PXBaseRedirectException.WindowMode.NewWindow
                };
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 2019-03-30
      • 2018-11-29
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多