AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2008, 13:36   #1  
dawl is offline
dawl
Участник
 
3 / 10 (1) +
Регистрация: 05.12.2008
Не получается сформировать lookup по запросу с outer join
Здравствуйте.
Может кто-нибудь подсказать, как реализовать лукап, для такого запроса:


while select EmployeeTable
where EmployeeTable.IsNotInUse == NoYes::No &&
EmployeeTable.EmployeeId != FCurrentEmployeeId /* var */
outer join TimeSheetTable
where TimeSheetTable.EmployeeId == EmployeeTable.EmployeeId &&
TimeSheetTable.CurrentDate == FCurrentDate /* var */
{
if ((!TimeSheetTable) || (EmploymentTable::find(TimeSheetTable.EmploymentAssessment).Value == 0)
{
// Нужно получить эти значения
}
}

Условно схема такая:
Таблица сотрудников: EmployeeTable; // EmployeeId, FullName
Табель учета сотрудников: TimeSheetTable; // EmployeeId, EmploymentId, CurrentTime
Таблица оценок занятости: EmploymentTable; // EmploymentId, Value

Проблема состоит в том, что я не знаю, как отфильтровать условие ...if (!TimeSheetTable),
которое в данном случае является необходимым.

Пример кода:

// 1
query = new Query();
masterSource = query.addDataSource(tableNum(EmployeeTable));
masterSource.orderMode(OrderMode::GroupBy);
masterSource.addSortField(fieldNum(EmployeeTable, EmployeeId));
masterSource.addSortField(fieldNum(EmployeeTable, ScheduledNumber));
masterSource.addSortField(fieldNum(EmployeeTable, FullName));
masterSource.addRange(fieldNum(EmployeeTable, IsNotInUse)).value(StrFmt('%1', NoYes::No));
filterString = StrFmt('(%1 != "%2")', fieldStr(EmployeeTable, EmployeeId), TimeSheetTable.EmployeeId); // TimeSheetTable = ds
masterSource.addRange(fieldNum(EmployeeTable, EmployeeId)).value(filterString);

// 2
slaveSource = masterSource.addDataSource(tableNum(TimeSheetTable));
slaveSource.orderMode(OrderMode::GroupBy);
slaveSource.joinMode(JoinMode::OuterJoin);
slaveSource.addLink(fieldNum(EmployeeTable, EmployeeId), fieldNum(TimeSheetTable, EmployeeId));
filterString = Date2Str(FCurrentDate, 123, 2, 2, 2, 2, 2);
slaveSource.addRange(fieldNum(TimeSheetTable, CurrentDate)).value(filterString);
filterString = StrFmt('(%1 != "")', fieldStr(TimeSheetTable, EmploymentAssessment));
while select tEmploymentTable
where (tEmploymentTable.Value == 0)
{
filterString += StrFmt(' || (%1 == "%2")', fieldStr(TimeSheetTable, EmploymentAssessment), tEmploymentTable.EmploymentId);
}
// Получается, что этот фильтр не работает...
slaveSource.addRange(fieldNum(TimeSheetTable, EmploymentAssessment)).value(filterString);

// 3
sysTableLookup = SysTableLookup::newParameters(tableNum(EmployeeTable), _formControl);
sysTableLookup.addLookupfield(fieldNum(EmployeeTable, EmployeeId));
sysTableLookup.addLookupfield(fieldNum(EmployeeTable, ScheduledNumber));
sysTableLookup.addLookupfield(fieldNum(EmployeeTable, FullName));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

Возможно я в чем-то ошибаюсь...
Заранее спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Несколько outer join в запросе _scorp_ DAX: Программирование 2 11.04.2008 10:56
Данные в Grid из таблиц, связанных по Outer Join cherv DAX: Программирование 2 17.02.2007 01:36
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42
Outer Join и группировка Jackal DAX: Программирование 0 26.05.2004 12:19
outer join для трех таблиц r25 DAX: Программирование 4 29.04.2004 15:42
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:19.