Добрый день всем. Что-то голова не варит уже... Объясните пожалуйста, почему нельзя к одному датасорсу подсоединить несколько других. Пытаюсь через OuterJoin взять информацию о клиенте. Версия AX4.
X++:
Query q = new SysQuery();
QueryBuildDataSource qbdsCustTable = q.addDataSource(tablenum(CustTable));
QueryBuildDataSource qbds;
;
qbds = qbdsCustTable.addDataSource(tablenum(CustTable_APM));
qbds.joinMode(JoinMode::OuterJoin);
qbds.fetchMode(QueryFetchMode::One2Many);
qbds.relations(true);
qbds = qbdsCustTable.addDataSource(tablenum(CustTable_ACM));
qbds.joinMode(JoinMode::OuterJoin);
qbds.fetchMode(QueryFetchMode::One2Many);
qbds.relations(true);
info(q.dataSourceNo(1).toString());
Инфолог выдаёт только: SELECT * FROM CustTable.
Если оставить соединение только с одной таблицей, все отрабатывает замечательно.
И почему запрос подобной сложности отрабатывает к примеру в SysSecurityFormSetup.buildSecurityIdMenuAccessQuery(), где на один DS накидывают OuterJoin и ExistsJoin? См. переменную accessRightsListDataSource:
X++:
securityFormDataSource = accessRightsListDataSource.addDataSource(tablenum(SysSecurityFormTable));
securityFormDataSource.joinMode(JoinMode::OuterJoin);
securityFormDataSource.fetchMode(QueryFetchMode::One2Many);
securityFormDataSource.relations(true);
queryBuildRange = securityFormDataSource.addRange(fieldnum(SysSecurityFormTable, FormName));
queryBuildRange.value(_formName);
queryBuildDataSource = accessRightsListDataSource.addDataSource(tablenum(UserGroupList));
queryBuildDataSource.joinMode(JoinMode::ExistsJoin);
queryBuildDataSource.fetchMode(QueryFetchMode::One2One);
queryBuildDataSource.addLink(fieldnum(AccessRightsList, GroupId), fieldnum(UserGroupList, GroupId));