Фильтрация по связанной таблице в Axapta / Dynamics Axe

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

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

13.12.2008 10:15:42
2 ОТВЕТА
РЕШЕНИЕ

Вы можете использовать «Внешнее соединение» вместо «Задержка», а затем программно изменить режим соединения, когда есть поиск полей в 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 с внешними объединениями .

5
10.03.2014 13:32:42

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

1
28.12.2008 09:03:17