Показать сообщение отдельно
Старый 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)) 
Ума не приложу как это сделать