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

问题描述 投票:0回答:1

有一个表单与显示菜单项相连。我在检查菜单项的属性时,看到有两个属性的值为 "是",(1) neededRecord和(2) CopyCallerQuery。我发现当copyCallerQuery属性为真时,从其他表单跳转到这个表单失败,并出现这个错误。

Cannot apply initial query because no form root data source table matches the query root data source table.不能应用初始查询,因为没有表单根数据源表匹配查询根数据源表。

另一方面,在某些情况下,这个表单是通过一个帮助类的代码打开的,如图所示。

  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属性的用法是什么?我是否正确使用了它?

axapta x++ dynamics-365-operations
1个回答
0
投票

copyCallerQuery 会指定是否要把调用表单的查询复制到目标表单中,例如把列表页的查询复制到详情表单中。

你可以通过以下方式查看并更好地理解这一点。

  1. 创建一个表单(Form1)
  2. 增加一个 SalesTable 数据源到它
  3. 覆盖 init 办法 \Forms\Form1\Methods\init 并在 super(); 看涨 info(SalesTable_ds.query().toString());
  4. 创建一个 Display 菜单项(\Menu Items\Display\Form1),具有 Object = Form1CopyCallerQuery = Yes.
  5. SalesTable 形成 \Forms\SalesTable 然后添加新的菜单项(Form1) 任何地方 在...上 SalesTable 表格作为动作窗格中的按钮,并将数据源属性设置为 SalesTable
  6. 打开 SalesTable 表格并按下按钮。复制信息记录到记事本中。
  7. 修改 \Menu Items\Display\Form1 并设置 CopyCallerQuery = No 而后开 SalesTable 再将查询复制到记事本中,并将两者进行比较。

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

© www.soinside.com 2019 - 2024. All rights reserved.