有一个表单与显示菜单项相连。我在检查菜单项的属性时,看到有两个属性的值为 "是",(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属性的用法是什么?我是否正确使用了它?
copyCallerQuery
会指定是否要把调用表单的查询复制到目标表单中,例如把列表页的查询复制到详情表单中。
你可以通过以下方式查看并更好地理解这一点。
Form1
)SalesTable
数据源到它init
办法 \Forms\Form1\Methods\init
并在 super();
看涨 info(SalesTable_ds.query().toString());
Display
菜单项(\Menu Items\Display\Form1
),具有 Object = Form1
和 CopyCallerQuery = Yes
.SalesTable
形成 \Forms\SalesTable
然后添加新的菜单项(Form1
) 任何地方 在...上 SalesTable
表格作为动作窗格中的按钮,并将数据源属性设置为 SalesTable
SalesTable
表格并按下按钮。复制信息记录到记事本中。\Menu Items\Display\Form1
并设置 CopyCallerQuery = No
而后开 SalesTable
再将查询复制到记事本中,并将两者进行比较。你收到的错误是因为调用者表单的根数据源需要与目标表单的根数据源相匹配才能复制。