Acumatica 删除项目中的站点地图条目

Acumatica 删除项目中的站点地图条目,acumatica,Acumatica,有没有一种方法可以通过类似于添加自定义项目的自定义项目删除现有站点地图,或者我们需要使用自定义插件来删除它 更新: 我一直在尝试下面的解决方案,但我不断出错。我在代码中搜索了站点地图维护,并在向导逻辑中找到了一个例程,但在我的代码中它不起作用。我检查了所有的包裹,我有我需要的一切 下面的选择显示了一个错误,说明“非静态字段、方法或属性'PXSelectBase.select(params object[])需要对象引用” 使用定制; 使用PX数据; 使用PX.SM; 使用制度; ... ///

有没有一种方法可以通过类似于添加自定义项目的自定义项目删除现有站点地图,或者我们需要使用自定义插件来删除它

更新:

我一直在尝试下面的解决方案,但我不断出错。我在代码中搜索了站点地图维护,并在向导逻辑中找到了一个例程,但在我的代码中它不起作用。我检查了所有的包裹,我有我需要的一切

下面的选择显示了一个错误,说明“非静态字段、方法或属性'PXSelectBase.select(params object[])需要对象引用”

使用定制;
使用PX数据;
使用PX.SM;
使用制度;
...
/// 
///删除站点地图条目
/// 
///站点地图屏幕ID
受保护的虚拟站点地图(字符串screenID)
{
if(string.IsNullOrWhiteSpace(screenID))
{
抛出新的ArgumentNullException(“screenID”);
}
站点地图站点地图=PXSelect
.选择(此,屏幕ID);
返回;
//编辑:
//从2017R2开始,可能会有MUI*表引用站点地图。这些是新的工作区。
//最好检查这些表以参考删除屏幕。此脚本是在6.1中编写的,没有现代UI工作区。
}

我过去做这件事的唯一方法就是使用。您可以按屏幕id查询站点地图表,并在找到时将其删除

像这样的东西应该可以工作(尽管我还没有测试过)。我确实从我们的升级插件中提取了一些,以获得一个快速示例:

protected virtual void RemoveSiteMapEntry(PXGraph graph, string screenId)
{
    PX.SM.SiteMap siteMap = PXSelect<PX.SM.SiteMap,
        Where<PX.SM.SiteMap.screenID, Equal<Required<PX.SM.SiteMap.screenID>>>>.Select(graph, screenId);

    if (siteMap == null)
    {
        return;
    }

    graph.Caches[typeof(PX.SM.SiteMap)].PersistDeleted(siteMap);

    // Edit:
    // starting 2017R2 there could be MUI* tables witch references to the sitemap. These are the new workspaces. 
    // It would be a good idea to check these tables for reference to the deleting screen. This script was written in 6.1 which did not have the modern UI workspaces.
}
protected virtual void removesitemaentry(PXGraph图形,字符串screenId)
{
PX.SM.SiteMap SiteMap=PXSelect.Select(图形,屏幕ID);
如果(站点地图==null)
{
返回;
}
缓存[类型(PX.SM.SiteMap)]。持久删除(SiteMap);
//编辑:
//从2017R2开始,可能会有MUI*表引用站点地图。这些是新的工作区。
//最好检查这些表以参考删除屏幕。此脚本是在6.1中编写的,没有现代UI工作区。
}
或者,您可以编写
PXDatabase.Delete
语句,而不需要
PXGraph
。我仅在必要时使用
PXDatabase
升级逻辑或批量处理记录


所有这些选项都可以通过自定义插件调用。对于图形,您需要先创建一个新实例,然后才能将其用于我的示例。

我过去这样做的唯一方法是使用一个新实例。您可以按屏幕id查询站点地图表,并在找到时将其删除

像这样的东西应该可以工作(尽管我还没有测试过)。我确实从我们的升级插件中提取了一些,以获得一个快速示例:

protected virtual void RemoveSiteMapEntry(PXGraph graph, string screenId)
{
    PX.SM.SiteMap siteMap = PXSelect<PX.SM.SiteMap,
        Where<PX.SM.SiteMap.screenID, Equal<Required<PX.SM.SiteMap.screenID>>>>.Select(graph, screenId);

    if (siteMap == null)
    {
        return;
    }

    graph.Caches[typeof(PX.SM.SiteMap)].PersistDeleted(siteMap);

    // Edit:
    // starting 2017R2 there could be MUI* tables witch references to the sitemap. These are the new workspaces. 
    // It would be a good idea to check these tables for reference to the deleting screen. This script was written in 6.1 which did not have the modern UI workspaces.
}
protected virtual void removesitemaentry(PXGraph图形,字符串screenId)
{
PX.SM.SiteMap SiteMap=PXSelect.Select(图形,屏幕ID);
如果(站点地图==null)
{
返回;
}
缓存[类型(PX.SM.SiteMap)]。持久删除(SiteMap);
//编辑:
//从2017R2开始,可能会有MUI*表引用站点地图。这些是新的工作区。
//最好检查这些表以参考删除屏幕。此脚本是在6.1中编写的,没有现代UI工作区。
}
或者,您可以编写
PXDatabase.Delete
语句,而不需要
PXGraph
。我仅在必要时使用
PXDatabase
升级逻辑或批量处理记录


所有这些选项都可以通过自定义插件调用。对于图形,您需要先创建一个新实例,然后才能将其用于我的示例。

据我所知,在2017+Acumatica版本中,这仍然是一种方法。此外,为了进行更彻底的清理,您可以删除前缀为MUI的表格中的条目,这些表格用于Acumatica 2017+中的新UI。Good point@HB_Acumatica。我执行此操作的升级脚本是6.1版。确保从2017或更高版本开始删除包含此屏幕ID的任何工作区。如前所述,这些表格以MUI开头。最好的解决方案可能是使用站点地图图并从中删除,因为(我假设)它将自动处理对MUI表的关系删除。如果有人有一个使用站点地图图删除站点地图的示例,这对于2017R2+来说是一个很好的答案,只要它也删除MUI*表项。Brendan,请参阅我对上述问题的更新。我正在尝试选择站点地图,但出现错误。我正在镜像我在WZSetupMaint.cs中找到的代码,我猜您的错误是您没有将图形作为第一个参数传递给PXSelect.Select(此)。你在一个新的图表中吗?否则,如果您在图形扩展中,您使用“Base”作为您的图形,如PXSelect.Select(Base…)据我所知,在2017+Acumatica版本中,这仍然是这样做的。此外,为了进行更彻底的清理,您可以删除前缀为MUI的表格中的条目,这些表格用于Acumatica 2017+中的新UI。Good point@HB_Acumatica。我执行此操作的升级脚本是6.1版。确保从2017或更高版本开始删除包含此屏幕ID的任何工作区。如前所述,这些表格以MUI开头。最好的解决方案可能是使用站点地图图并从中删除,因为(我假设)它将自动处理对MUI表的关系删除。如果有人有一个使用站点地图图删除站点地图的示例,这对于2017R2+来说是一个很好的答案,只要它也删除MUI*表项。Brendan,请参阅我对上述问题的更新。我正在尝试选择站点地图,但出现错误。我正在镜像我在WZSetupMaint.cs中找到的代码,我猜您的错误是您没有将图形作为第一个参数传递给PXSelect.Select(此)。你在一个新的图表中吗?其他