2017-08-15 112 views
0

我正在尝试将多个查询放在一起用于某些数据验证的SSRS报告中。一目了然,我想显示一些地址/联系信息,项目信息,客户信息,供应商信息和资源信息。我已经开始在地址/联系信息,但似乎已经被卡住了...SSRS X ++联系人查询

我得到一个无效的字段组合错误的逻辑电子地址表,我也试图返回定位器字段两次基于不同的连接。

我知道如何做到这一点在SQL中很容易使用左连接和别名字段,但我是X ++的初学者,不知道如何做到这一点。

public class DataValidation extends SRSReportDataProviderBase 
{ 

TmpAddresses TmpAddresses; 
TmpProjects TmpProjects; 
TmpSuppliers TmpSuppliers; 
TmpCustomers TmpCustomers; 
TmpResources TmpResources; 

[SRSReportDataSetAttribute('TmpAddresses')] 
public TmpAddresses getAddresses() 
{ 
    select TmpAddresses; 
    return TmpAddresses; 
} 

public void processReport() 
{ 

    Query     q; 
    QueryRun    qr; 
    QueryBuildDataSource qbds; 
    QueryBuildRange   qbr; 

    // Declare a table buffer 
    DirPartyTable    dirPartyTable; 
    LogisticsLocation   logisticsLocation; 
    LogisticsPostalAddress  logisticsPostalAddress; 
    LogisticsElectronicAddress logisticsElectronicAddress; 

    q = new Query(); 

    qbds = q.addDataSource(tableNum(DirPartyTable)); 
    qbr = qbds.addRange(fieldNum(DirPartyTable, Name)); 
    qbr.value('!""'); 

    qbds = qbds.addDataSource(tableNum(LogisticsPostalAddress)); 
    qbds.addLink(fieldNum(DirPartyTable, PrimaryAddressLocation),fieldNum(LogisticsPostalAddress, Location)); 
    qbds.joinMode(JoinMode::OuterJoin); 

    qbds = qbds.addDataSource(tableNum(LogisticsElectronicAddress)); 
    qbds.addLink(fieldNum(DirPartyTable, PrimaryContactEmail),fieldNum(LogisticsElectronicAddress, RecId)); 
    qbds.joinMode(JoinMode::OuterJoin); 

    qbds = qbds.addDataSource(tableNum(LogisticsElectronicAddress)); 
    qbds.addLink(fieldNum(DirPartyTable, PrimaryContactPhone),fieldNum(LogisticsElectronicAddress, RecId)); 
    qbds.joinMode(JoinMode::OuterJoin); 

    qbds = qbds.addDataSource(tableNum(LogisticsLocation)); 
    qbds.relations(true); 
    qbds.joinMode(JoinMode::OuterJoin); 


    qr = new QueryRun(q); 
    while(qr.next()) 
    { 

     dirPartyTable = qr.get(tableNum(DirPartyTable)); 
     logisticsLocation = qr.get(tableNum(LogisticsLocation)); 
     logisticsPostalAddress = qr.get(tableNum(LogisticsPostalAddress)); 
     logisticsElectronicAddress = qr.get(tableNum(LogisticsElectronicAddress)); 

     TmpAddresses.clear(); 
     TmpAddresses.Name = dirPartyTable.Name; 
     TmpAddresses.Address = logisticsPostalAddress.Address; 
     TmpAddresses.Description = logisticsLocation.Description; 
     TmpAddresses.Email = logisticsElectronicAddress.Locator; 
     TmpAddresses.Phone = logisticsElectronicAddress.Locator; 
     TmpAddresses.insert(); 
    } 
} 

} 
+0

考虑接受答案,或者提供更多信息。 –

回答

1

你的孩子应的数据源都指DirParty

qbdsPrimary = q.addDataSource(tableNum(DirPartyTable)); 
qbr = qbdsPrimary.addRange(fieldNum(DirPartyTable, Name)); 
qbr.value('!""'); 

qbds = qbdsPrimary.addDataSource(tableNum(LogisticsPostalAddress)); 
qbds.addLink(fieldNum(DirPartyTable, PrimaryAddressLocation),fieldNum(LogisticsPostalAddress, Location)); 
qbds.joinMode(JoinMode::OuterJoin); 

qbds = qbdsPrimary.addDataSource(tableNum(LogisticsElectronicAddress)); 
qbds.addLink(fieldNum(DirPartyTable, PrimaryContactEmail),fieldNum(LogisticsElectronicAddress, RecId)); 
qbds.joinMode(JoinMode::OuterJoin); 

qbds = qbdsPrimary.addDataSource(tableNum(LogisticsElectronicAddress)); 
qbds.addLink(fieldNum(DirPartyTable, PrimaryContactPhone),fieldNum(LogisticsElectronicAddress, RecId)); 
qbds.joinMode(JoinMode::OuterJoin); 

qbds = qbdsPrimary.addDataSource(tableNum(LogisticsLocation)); 
qbds.relations(true); 
qbds.joinMode(JoinMode::OuterJoin); 

// Verify the query 
info(qbdsPrimary.toString());