Фильтрация по связанной таблице в Axapta / Dynamics Axe - PullRequest
3 голосов
/ 13 декабря 2008

У меня есть форма в Axapta / Dynamics Ax (EmplTable), которая имеет два источника данных (EmplTable и HRMVirtualNetworkTable), где второй источник данных (HRMVirtualNetworkTable) связан с первым включенным с типом ссылки «Задержка».

Есть ли способ установить фильтр для записей на основе второго источника данных, не меняя тип ссылки на "InnerJoin"?

Ответы [ 2 ]

5 голосов
/ 08 июля 2009

Вы можете использовать «Внешнее соединение» вместо «Отложено», а затем программно изменить режим соединения, когда есть поиск полей в HRMVirtualNetworkTable.

Добавьте этот метод в класс SysQuery:

static void updateJoinMode(QueryBuildDataSource qds)
{
    Counter r;
    if (qds)
    {
        qds.joinMode(JoinMode::OuterJoin);
        for (r = 1; r <= qds.rangeCount(); r++)
        {
            if (qds.range(r).value() && qds.range(r).status() == RangeStatus::Open)
            {
                qds.joinMode(JoinMode::InnerJoin);
                break;
            }
        }
    }
}

В executeQuery () источника данных EmplTable:

public void executeQuery()
{;
    SysQuery::updateJoinMode(this.queryRun() ? this.queryRun().query().dataSourceTable(tableNum(HRMVirtualNetworkTable)) : this.query().dataSourceTable(tableNum(HRMVirtualNetworkTable)));    
    super();
}

Иногда this.queryRun () возвращает null, поэтому используйте this.query ().

Обновление:

Обратите внимание, что вышеприведенное не относится к AX 2012 и более поздним версиям, где вы можете использовать фильтры запросов во внешних соединениях. См. Как использовать класс QueryFilter с внешними объединениями .

1 голос
/ 28 декабря 2008

Вы можете сделать это программно, присоединившись к QueryBuildDataSource или с помощью расширенного фильтра (Alt + F3, щелкните правой кнопкой мыши на datasorce, 1: n и найдите sev \ condary DS)

...