Быстренько сделал простейший примерчик лукапа из двух табличек, типа паказать пользователей из группы админов.
Код:
public void lookup()
{
SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNUm(UserInfo),this);
Query query = new Query();
QueryBuildDataSource queryBuildDataSource;
QueryBuildRange queryBuildRange;
;
queryBuildDataSource = query.addDataSource(tableNum(UserInfo));
queryBuildDataSource = queryBuildDataSource.addDataSource(tableNum(UserGroupList));
queryBuildDataSource.joinMode(JoinMode::InnerJoin);
queryBuildDataSource.fetchMode(QueryFetchMode::One2One);
queryBuildDataSource.relations(true);
queryBuildRange = queryBuildDataSource.addRange(fieldNum(UserGroupList, groupId));
queryBuildRange.value("Admin");
sysTableLookup.addLookupfield(fieldNum(UserInfo, Id));
sysTableLookup.addLookupfield(fieldNum(UserInfo, Name));
sysTableLookup.addLookupfield(fieldNum(UserInfo, Enable));
sysTableLookup.addLookupfield(fieldNum(UserGroupList, groupId));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();
}
в лукапе в четвертом столбце вывелось совсем не код группы, а поле из таблицы UserInfo. Посмотрел на сформированный SQL запрос, отладчике:
Код:
SELECT * FROM UserGroupList WHERE UserInfo.id = UserGroupList.userId AND ((groupId = Admin))

стало еще интересней
не поленился, посмотрел в профайлере сиквела что получает сервер:
Код:
exec sp_cursorprepexec @P1 output, @P2 output, N'@P1 varchar(1000)', N'SELECT A.ID,A.NAME,
A.ENABLE,A.RECVERSION,101090,B.USERID,B.GROUPID,B.MODIFIEDDATE,B.MODIFIEDTIME,
B.MODIFIEDBY,B.CREATEDDATE,B.CREATEDTIME,B.CREATEDBY,B.RECVERSION,B.RECID
FROM USERINFO A WITH( NOLOCK),USERGROUPLIST B WITH( NOLOCK)
WHERE ((B.GROUPID=@P1) AND (A.ID=B.USERID)) ORDER BY A.ID OPTION(FAST 1)',
@P3 output, @P4 output, @P5 output, 'Admin'
вроде в селекте возвращаются поля обеих таблиц. так вот вопрос, почему код группы не выводится с раскрытом списке локапа???