Acumatica侧面板链接到详细信息

时间:2020-06-12 12:59:15

标签: acumatica

我正在使用Acumatica 2020R1,并添加了侧面板。无论如何,例如在PO表单(PO301000)上,单击文档详细信息时我可以链接侧面板以进行更新吗?

2 个答案:

答案 0 :(得分:0)

这是一个新功能。侧面板仅限于通用查询。在2020版中,您仍然需要通用查询来配置侧面板,但也可以在数据输入表单中查看它们。

enter image description here

该功能是通过向导实现的,因此其功能有限。当前,您仅限于导航参数中的可用选项。似乎无法在此处添加详细信息实体。也许有办法,但我不知道。

检查User Interface: Side Panels for Data Entry Forms的文档参考链接(内容复制如下): https://help-2020r1.acumatica.com/Help?ScreenId=ShowWiki&pageid=a11aa71b-5f18-4c8f-9c69-350f2c7a89f4

在数据输入表单中添加侧面板 定制程序可以将多个侧面板导航路径添加到数据输入表单。

要添加侧面板,定制器将导航到“定制项目”(SM204505)表单并创建一个新项目。

在“定制项目编辑器”中,定制器选择计划为其添加侧面板的屏幕。

在“屏幕”>“表单ID”>“操作”上,定制程序添加导航操作:

侧面板类型(1),指定常规设置(2),添加目标屏幕(3)并指定参数(4)(如果需要)(例如,在下面的屏幕截图中,选择了Business Account作为参数,因此侧面板显示在数据输入表单上选择的特定客户的案例。

“客户”表单上的侧面板示例 enter image description here 要应用更改,定制器必须发布创建的定制项目。

答案 1 :(得分:0)

我实际上发现了一种在 Acumatica 2020R1 上执行此操作的方法。我是这样做的:

编辑:我为 SOOrderEntry 屏幕执行此操作,创建了一个查看 SOOrder 但使用 SOLine 参数的侧面板。通过相应地替换 SOOrder 和 SOLine,此方法适用于具有主从关系的任何两个表。

A 部分:

  1. 在 SOOrder DAC 上创建与您需要的 SOLine 参数相关的虚拟字段
  2. 在使用事件处理程序选择/更新行时更新这些
  3. 像往常一样将这些字段作为参数传递给侧面板操作

虽然它似乎是单独的,侧面板在选择新的讽刺时实际上不会刷新。我们将不得不发挥创造力来解决这个问题。

B 部分:

  1. 在 SOOrder DAC 上创建一个额外的虚拟字段,以跟踪上次打开哪个侧面板(稍后我将解释如何跟踪)。我使用字符串字段来执行此操作。如果您的屏幕上有多个侧面板,这一点尤其重要。

  2. 接下来,您要定义将更新此字段的标准图形操作。使其 Visible = false,因为您实际上并不希望显示此按钮。我们稍后会在幕后打电话。这是我使用的方法:

public PXAction<SOOrder> SidePanelCallback;
[PXButton]
[PXUIField(DisplayName = "SidePanelCallback", Visible = false)]
public virtual IEnumerable sidePanelCallback(PXAdapter adapter)
{
    SOOrder doc = Base.Document.Current;
    if (doc == null) return adapter.Get();

    var docExt = doc.GetExtension<SOOrderExt>();
    docExt.UsrSidePanelDetailParamsRefresh = adapter.CommandArguments;

    return adapter.Get();
}

*注:docExt.UsrSidePanelDetailParamRefresh是上一步的变量I

  1. 现在,您需要一种在调用侧面板操作时触发代码的方法。为此,我们将使用以下 JavaScript
function commandResult(ds, context) {
    var ds = px_alls['ds'];
    switch (context.command) 
    {
        case ('JustAction'):
            ds.executeCallback('GraphAction', 'parameter value');
            break;
    }
}

您想用侧面板操作的内部名称替换 JustAction。它应该是这样的:NavigateToLayer$DB000028 其中 DB000028 是侧面板的目标 ScreenID。如果您想确保您的操作遵循相同的命名约定,您可以通过添加断点并使用调试器进行检查来进行检查。 您应该将 GraphAction 替换为您在上一步中创建的图形操作的名称。在我们的例子中,SidePanelCallback 然后最后为参数值传递任何你想用来识别打开的侧面板的东西。这将存储在 UsrSidePanelDetailParamRefresh 或您的等效项中。 您可以为要使用此功能的每个侧面板创建一个 case 语句,因此您只需为每个图形执行一次! 最后,将您的脚本附加到数据源上的客户端事件“commandPerformed”。

  1. 接下来,我们将定义另一个图形操作来执行侧面板的实际刷新。我的看起来像这样:
public PXAction<SOOrder> SidePanelRefresh;
[PXButton]
[PXUIField(DisplayName = "SidePanelRefresh", Visible = false)]
public virtual IEnumerable sidePanelRefresh(PXAdapter adapter)
{
    SOOrder doc = Base.Document.Current;
    if (doc == null) return adapter.Get();

    var docExt = doc.GetExtension<SOOrderExt>();

    Dictionary<string, string> parameters = new Dictionary<string, string>();
    string[] args = adapter.CommandArguments.Split('*');
    switch (docExt.UsrSidePanelDetailParamsRefresh)
    {
        case ("Component Inventory"):
            parameters.Add("Kit", args[0]);
            parameters.Add("SiteID", args[1]);
            throw new PXRedirectToGIRequiredException("Component Inventory", parameters) { Mode = PXBaseRedirectException.WindowMode.Layer };
    }
    return adapter.Get();
}

请注意,对于我的用例,我传递的参数不能包含字符“*”,因此我将其用作分隔符 同样,您可以根据需要为每个动态侧面板定义任意数量的 case 语句。

  1. 现在终于我们再次需要javascript来调用这个动作。使用事件处理程序对于这种类型的刷新来说太慢了,它们将始终传递旧的 SOLine 参数。如果你知道一种避免 javascript 的方法,我很想听听它,因为做这样的回调确实有很大的开销。因此,请注意将此脚本附加到的位置,出于这个原因,我实际上将它附加到网格的 RowSelectorClick 客户端事件而不是 AfterRowChange,并训练我的用户以这种方式选择行(通过单击每个行),因此我们不会对使用此功能的少数人影响公司的其他部门。如果您在 SO301000 等高流量屏幕上工作,我会推荐这个。 无论如何,这是 javascript:
function Side_Panel_Refresh() {
    px_alls["ds"].executeCallback("SidePanelRefresh", this.func.caller.arguments[2].row.getCell("InventoryID").getValue() + "*" + this.func.caller.arguments[2].row.getCell("SiteID").getValue());
}

SidePanelRefresh:上一步中图形操作的名称。 InventoryID 和 SiteID 是我的参数。 再次,使用“*”作为分隔符。

无论如何,我希望这可以帮助任何想要制作动态侧面板的人。如果有人对此方法有改进,我很乐意听到建设性的反馈。

开发愉快!