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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.05.2015, 11:36   #1  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
? QueryBuildDataSource
Добрый день!
Я только начинаю работать с Dynamics AX и многого еще не знаю.
Особенно тяжело дается QueryBuildDataSource
Если у кого случайно завалялась литература по нему, очень-очень прошу поделиться.

Сейчас я вношу поправки в чужом коде, но застряла в тупике и никак не могу решить как поступить.

PHP код:
public void init()
{
    
QueryBuildDataSource    queryBuildDataSource;
    ;

   
super();

    
// Cache the display methods
    //
    
this.cacheAddMethod(tablemethodstr(smmActivitiesshowFollowUpIcon));
    
this.cacheAddMethod(tablemethodstr(smmActivitiesshowDocHanIcon));

    
// The query on any related datasource should only depend on the currently
    // active business relation. So, clear any automaticaly created dynalinks.
    //
    
this.query().dataSourceNo(1).clearDynalinks();

    
queryBuildDataSource this.query().dataSourceNo(1).addDataSource(tablenum(smmActivityParentLinkTable));
    
queryBuildDataSource.relations(true);
    
queryBuildDataSource.addRange(fieldnum(smmActivityParentLinkTableParentType)).value(queryValue(smmActivityParentType::BusRel));
    
queryBuildDataSource.addRange(fieldnum(smmActivityParentLinkTableParentType)).value(queryValue(smmActivityParentType::QuotationLine_ZTR));
    
queryBuildDataSource.addRange(fieldnum(smmActivityParentLinkTableParentType)).value(queryValue(smmActivityParentType::Quotation));
    
queryBuildDataSource.addDynalink(fieldnum(smmActivityParentLinkTableRefRecId), smmBusRelTablefieldnum(smmBusRelTable,RecId));
    
queryBuildDataSource.addDynalink(fieldnum(smmActivityParentLinkTableRefRecId), SalesQuotationLine_ztrfieldnum(SalesQuotationLine,RecId));
    
queryBuildDataSource.addDynalink(fieldnum(smmActivityParentLinkTableRefRecId), SalesQuotationfieldnum(SalesQuotationTable,RecId));

   if (
element.args() && element.args().record() && element.args().dataset() == tablenum(smmLeadTable))
    {
        
smmLeadTable element.args().record();
        
queryBuildRange queryBuildDataSource.addRange(fieldnum(smmActivityParentLinkTableRefRecId));
    }

Связь, которую я создала, возвращает такой SQL запрос

PHP код:
SELECT FIRSTFAST FROM smmActivities 
USING INDEX ActivityNumberIdx 
JOIN FIRSTFAST 
FROM smmActivityParentLinkTable 
WHERE smmActivities
.ActivityNumber smmActivityParentLinkTable.ActivityNumber 
      
AND ((ParentType 2) OR (ParentType 17) OR (ParentType 5)) 
      AND 
smmBusRelTable.RecId=smmActivityParentLinkTable.RefRecId 
      
AND SalesQuotationLine.RecId=smmActivityParentLinkTable.RefRecId 
      
AND SalesQuotationTable.RecId=smmActivityParentLinkTable.RefRecId 
Мне же необходимо добиться такого результата:

PHP код:
SELECT FIRSTFAST FROM smmActivities 
USING INDEX ActivityNumberIdx 
JOIN FIRSTFAST 
FROM smmActivityParentLinkTable 
WHERE smmActivities
.ActivityNumber smmActivityParentLinkTable.ActivityNumber 
      
AND ((ParentType AND smmBusRelTable.RecId=smmActivityParentLinkTable.RefRecId 
      OR (
ParentType 17 AND SalesQuotationLine.RecId=smmActivityParentLinkTable.RefRecId 
      OR (
ParentType AND SalesQuotationTable.RecId=smmActivityParentLinkTable.RefRecId)) 
Ума не приложу как это сделать
Старый 06.05.2015, 11:40   #2  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Пробовала делать по примеру, через executeQuery править связь. Но толи что то напутала, то ли это совсем не в тему

PHP код:
public void executeQuery()
{
//   QueryBuildRange     parentTypeRange;
    
QueryBuildDataSource    qbdS;
    
str                 queryExpression '(';
                 
queryExpression += strfmt('((%1 == %2) && (%3 == %4)) || ((%5 == %6) && (%7 == %8)) || ((%9 == %10) && (%11 == %12))',
                    
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableParentType)),
                    
queryValue(enum2int(smmActivityParentType::Customer)),
                    
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableRefRecId)),
                    
queryValue(CustTable::findByPartyId(smmBusRelTable.PartyId).RecId),
                    
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableParentType)),
                    
queryValue(enum2int(smmActivityParentType::Quotation)),
                    
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableRefRecId)),
                    
fieldstr(SalesQuotationTableRecId),
                     
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableParentType)),
                    
queryValue(enum2int(smmActivityParentType::QuotationLine_ZTR)),
                    
fieldid2name(tablenum(smmActivityParentLinkTable), fieldnum(smmActivityParentLinkTableRefRecId)),
                    
fieldstr(SalesQuotationTableRecId));
                    
//queryValue(CustTable::findByPartyId(SalesQuotationLine.PartyId).RecId));

//                    this.query().dataSourceTable(tablenum(smmActivityParentLinkTable)).clearDynalinks();
//           this.query().dataSourceTable(tablenum(smmActivityParentLinkTable)).clearRange(fieldnum(smmActivityParentLinkTable, ParentType));

            
queryExpression += ')';
 
qbdS this.query().dataSourceNo(1);
              
queryBuildRange.value(queryExpression);

    
super();

     
// Set button states
    //
    
activityButtonGroup.setButtons();

Старый 06.05.2015, 11:44   #3  
axm2013
Гость
 
n/a
http://www.axaptapedia.com/Expressions_in_query_ranges
раздел Conditional joins
вам может поможет
и делать такие связи лучше на init
За это сообщение автора поблагодарили: Emka (1).
Старый 06.05.2015, 11:51   #4  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Связи и написаны в init . Это мне посоветовали в executeQuery попробовать изменить, что бы я получила то что хочу.

Спасибо за совет, постараюсь разобраться в разделе Conditional joins
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Создать объект Query из QueryBuildDataSource Андрей К. DAX: Программирование 7 19.03.2012 19:35
Kashperuk Ivan: Tutorial: AX2012 - A new way of accessing the QueryBuildDataSource for a particular FormDataSource Blog bot DAX Blogs 0 24.10.2011 23:11
QueryBuildDataSource - динамически if_maks DAX: Программирование 6 07.04.2006 13:39
Вопрос по QueryBuildDataSource, QueryBuildRange и QueryRun Paul_ST DAX: Программирование 9 11.02.2004 17:13
Помогите разобраться с QueryBuildDataSource raz DAX: Программирование 10 04.09.2003 12:03

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:43.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.