D365中显示菜单项中的复制来电查询属性有什么用?

What is the usage of the copy caller query property in display menu item in D365?

有一个链接到显示菜单项的表单。我正在检查菜单项的 属性 并看到两个属性具有 yes 值,(1) neededRecord 和 (2) CopyCallerQuery。我发现当 copyCallerQuery 属性 为真时,从其他表单跳转到此表单失败并出现此错误:

Cannot apply initial query because no form root data source table matches the query root data source table..

另一方面,在某些情况下,此表单由助手 class 中的代码打开,如下所示:

  private void openMyForm(MyTable _myTable)
    {
        MenuFunction    _menuFunction;
        Args            _args;
        _args           = new Args();

        _args.record(_myTable);
        _args.caller(this);
        _menuFunction   = new MenuFunction(menuItemDisplayStr(MyFormDisplayMenu),MenuItemType::Display);
        _menuFunction.openMode(OpenMode::Edit);
        _menuFunction.run(_args);
    }

当我将 copyCallerQuery 设置为 No 时,打开的表单记录错误,但是当我设置为 yes 时,打开的表单记录正确。 所以我想知道 CopyCallerQuery 属性 的用法是什么?我使用正确吗?

copyCallerQuery 将指定是否应将调用表单的查询复制到目标表单,例如将列表页面查询复制到详细信息表单。

您可以通过

亲眼看到并更好地理解这一点
  1. 创建表单(Form1
  2. 向其中添加一个 SalesTable 数据源
  3. \Forms\Form1\Methods\init 处覆盖 init 方法并在 super(); 调用之后放置 info(SalesTable_ds.query().toString());
  4. 使用 属性 Object = Form1CopyCallerQuery = Yes 创建一个 Display 菜单项 (\Menu Items\Display\Form1)。
  5. 转到 \Forms\SalesTableSalesTable 表单,然后在 SalesTable 在操作窗格中形成一个按钮,并将数据源 属性 设置为 SalesTable
  6. 打开 SalesTable 表格并按下按钮。将信息日志复制到某处的记事本。
  7. 修改 \Menu Items\Display\Form1 并设置 CopyCallerQuery = No 然后再次打开 SalesTable 表格并将查询复制到记事本中并比较两者。

您收到的错误是因为调用方表单的根数据源需要与目标表单的根数据源匹配才能复制它。