我有一个完全自定义的屏幕,有自己的BLC和DAC,我想从“Bills and Adjustments”屏幕上的按钮打开它作为弹出窗口。我把它编码如下:
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
};
}
}
}
}
我已经在我用于自定义&#39; Bills and Adjustments&#39;的班级图书馆项目中为我的自定义屏幕添加了所有相关的DAC和BLC。屏幕我添加按钮。
我遇到的问题是,启动按钮时出现以下错误消息:
我已为使用OpenSourceDataMaint BLC的屏幕设置了所有相关权限,以便删除&#39; “按角色访问权限”,“按用户访问权限”和“按屏幕访问权限”#39;访问权限按用户&#39;没有任何区别。
答案 0 :(得分:0)
看起来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页面中TypeName
是否已正确定义PXDataSource
?您也可以检查一下您的自定义Aspx页面是否也存在于Cst_Published文件夹中,并且如果在{和1}}属性中设置的值在Pages和Cst_Published文件夹中是否相同?
还有一件事要检查,“站点地图”屏幕是否为您的自定义屏幕显示正确的GraphName? - 如果您可以提供屏幕截图进行验证,将会很有用。
如果可能,请提供可在本地发布的自定义包(即使是已编译的程序集) - 这将大大加快调查过程。
答案 1 :(得分:0)
对我来说,解决方案是将代码(如下所示)放在自定义窗口中,而不是Visual Studio中的类库项目中。由于代码需要引用另一个已发布的自定义,因此将其置于Acumatica代码窗口中可以解决此问题。在我的类库项目中没有引用已发布的自定义屏幕自定义,这显然会导致问题 - 我不知道如何处理它。
<div id="container"></div>
<script type="text/javascript">
$.ajax({
url: 'https://YourBlog/feeds/posts/default',
type: 'get',
dataType: 'xml',
success: function (xml) {
$(xml).find('entry').each(function(t) {
$('#container').append('<div>' + $(this).find('title').text() + '</div>');
});
}
});
</script>