如何进行多选以便父数据源上的多个选择将显示组合的子数据源

Ale*_*tny 5 x++ axapta dynamics-ax-2012 dynamics-ax-2012-r2

为了进行讨论,我将使用SalesTable/SalesLine 。

我有一个简单的表单,其中包含两个数据源SalesTableSalesLine,其中SalesLine连接到SalesTable。有一个标题和行网格。标题网格有属性MultiSelect = Yes

当我从网格中选择 3 个SalesTable记录时,有没有办法让它以某种本机样式显示下部网格中三个选定的SalesTable记录中的所有SalesLine记录?

我知道我可以通过某种代码以某种方式完成此任务,但我认为这可以通过设计模式以某种方式通过表单和数据源属性来完成?对我来说,您可以选择/突出显示三个标题记录,并且 AX 只会使行网格仅显示标题:子行对之一,这对我来说没有意义。

Jan*_*sen 5

您必须编码,标准 dynalink 行为不支持这一点有充分的理由。

请注意,非标准表单行为可能会让用户感到困惑。另外,选择标头表中的所有记录很容易,但性能不佳!

像往常一样,将数据源JoinSource的属性设置SalesLineSalesTableLinkTypeDelayed),然后重写数据源linkActive的方法SalesLine

public void linkActive()
{
    SalesTable table;
    QueryBuildDataSource ds = this.query().dataSourceNo(1);
    ds.clearDynalinks();
    ds.clearRanges();
    for (table = salesTable_ds.getFirst(1) ? salesTable_ds.getFirst(1) : salesTable_ds.cursor(); table; table = salesTable_ds.getNext())
    {
        ds.addRange(fieldNum(SalesLine,SalesId)).value(queryValue(table.SalesId));
    }
    super();
}
Run Code Online (Sandbox Code Playgroud)

动态链接被清除,并通过代码添加标记或当前记录的范围。

如果标记的标头超过几百个,SQL 表达式可能会溢出。如果选择了太多标头,您可能应该尝试通过抛出更用户友好的错误来避免这种情况。