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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2007, 13:07   #1  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
Есть два запроса

такой:

[codebox]StrRange = '(((OutlookTaskTable.Ot = "%1") || (OutlookTaskTable.User = "%2")))';
rq = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable)).addRange(FieldNum
(OutlookTaskTable, RecId));
rq.value(strfmt(StrRange, CurUserId(), CurUserId()));[/codebox]
и такой:



[codebox]ds = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable));

ds2 = OutlookTaskTable_q.dataSourceTable(TableNum(EmplTable));
if (!ds2)
{
ds2 = ds.addDataSource(TableNum(EmplTable));
ds2.addLink(FieldNum(OutlookTaskTable, User), FieldNum(EmplTable, EmplId));
ds2.joinMode(JoinMode::ExistsJoin);
ds2.addRange(FieldNum(EmplTable, HRMOrganizationId)).value(ArrayStr);
}
else ds2.findRange(FieldNum(EmplTable, HRMOrganizationId)).value(ArrayStr);[/codebox]
Если я их пишу вместе, то получается они работают как условие"И". Как сделать, чтобы второй запрос присоединялся к первому как условие"ИЛИ"?

Второй запрос смотрит поле User из таблицы OutlookTaskTable и проверяет по таблице EmplTable принадлежность к подразделению CurUserId().


Мне нужно реализовать в аксапте вот такой запрос:



[codebox]SELECT * FROM OutlookTaskTable A
INNER JOIN EmplTable B ON A.User = B.EmplId
WHERE A.USER = 'ANV' OR B.HRMORGANIZATIONID = 'IS'[/codebox]
Проблема как добавить условие по OR
Старый 21.03.2007, 23:25   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от moid Посмотреть сообщение
Проблема как добавить условие по OR
Это не проблема. FAQ: Как написать AND или OR в критерии запроса (query)
__________________
полезное на axForum, github, vk, coub.
Старый 22.03.2007, 10:59   #3  
moid is offline
moid
Участник
 
84 / 10 (1) +
Регистрация: 05.02.2007
Вот так:

[codebox] ds = OutlookTaskTable_q.dataSourceTable(TableNum(OutlookTaskTable));

ds2 = OutlookTaskTable_q.dataSourceTable(TableNum(EmplTable));
if (!ds2)
{
ds2 = ds.addDataSource(TableNum(EmplTable));
StrRange = '((((OutlookTaskTable.Ot = "%1") || (OutlookTaskTable.User = "%2") || (HRMOrganizationId = "%3")) && (EmplId = OutlookTaskTable.User)))';
ds2.addRange(FieldNum(EmplTable, RecId)).value(strfmt(StrRange, CurUserId(), CurUserId(), "ИС"));
}[/codebox]
Старый 22.03.2007, 11:38   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Да, примерно так.
Вместо метода ds2.addRange()
лучше использовать метод SysQuery::findOrCreateRange(...)

Дело в том, что range по этому полю уже может присутствовать (например, пользователь добавил или где-то в коде программист)
addRange безусловно добавит range. Но результат нескольких range будет совсем не тот, что вы ожидаете.
__________________
полезное на axForum, github, vk, coub.
Старый 22.03.2007, 11:48   #5  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Сергей, в данном случае это не верно.
Перед добавлением рейнжа moid добавляет датасоурс. По-этому таких проблем не возникнет
__________________
Axapta v.3.0 sp5 kr2
Старый 22.03.2007, 11:54   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от AndyD Посмотреть сообщение
Сергей, в данном случае это не верно.
Перед добавлением рейнжа moid добавляет датасоурс. По-этому таких проблем не возникнет
Согласен, в "данном".
Но через некоторое время код будет дополняться и разрастаться.
Нет никакой гарантии, что кто-нибудь ради каких-нибудь целей не вклинится в середину.

Согласен, что это уже не очень существенно.
__________________
полезное на axForum, github, vk, coub.
 


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

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

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