2013-09-14 2 views
0

Я создаю приложение MVC, которое использует веб-службу отчетов (2010) для программного управления отчетами и источниками данных.SSRS - Загрузить источник данных после отчета

Около месяца назад, когда я впервые реализовал эту функциональность, я смог сначала загрузить отчеты (.rdl-файлы), а затем загрузить его источник данных. Затем я смог просмотреть отчет с помощью средства просмотра отчетов на веб-странице.

Однако, через неделю или около того, этот поток сломался, то есть если я сначала загружу отчет, а затем источник данных, отчет не будет отображаться в элементе управления просмотра отчета. Он дает следующую ошибку.

The report server cannot process the report or shared dataset. 
The shared data source 'AW' for the report server or SharePoint site is not valid. 
Browse to the server or site and select a shared data source. 

Источник данных - это общий источник данных, который определен в файле rdl следующим образом.

<DataSources> 
    <DataSource Name="AW"> 
    <DataSourceReference>AW</DataSourceReference> 
    </DataSource> 
</DataSources> 

Если я обратный поток, т.е. загрузить источник данных первого, а затем отчет, он начинает работать! Но я на 100% уверен, другой поток работал, когда я впервые его реализовал.

Я в тупике, почему исходный поток прекратил работать. Оба отчета и источник данных загружаются в определенную папку.

Может кто-то пролить свет на это. Имеет ли смысл первоначальный поток? Я имею в виду, он должен работать, или я представляю вещи?

Кстати, источник данных, загруженный в следующем формате

<?xml version="1.0" encoding="utf-8"?> 
<DataSourceDefinition xmlns="http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource"> 
    <Extension>SQLAZURE</Extension> 
    <ConnectString>Data Source=xxx;Initial Catalog=AdventureWorks2012</ConnectString> 
    <UseOriginalConnectString>false</UseOriginalConnectString> 
    <OriginalConnectStringExpressionBased>false</OriginalConnectStringExpressionBased> 
    <CredentialRetrieval>Store</CredentialRetrieval> 
    <WindowsCredentials>false</WindowsCredentials> 
    <ImpersonateUser>false</ImpersonateUser> 
    <UserName>user</UserName> 
    <Password>pass</Password> 
    <Enabled>True</Enabled> 
</DataSourceDefinition> 

и я использую метод ReportingService2010.CreateCatalogItem для создания как отчета и источника данных.

Любая помощь очень ценится.

+0

Я не знаю об использовании веб-службы, но программно при проектировании отчетов и развертывания на сервере отчетов с использованием Visual Studio, пытаясь развернуть отчет, когда источник данных не существует, приведет к ошибке. Было бы бессмысленно разрешать загрузку отчетов, когда источник зависимых данных не существовал, иначе RS пришлось бы реализовать логику для обновления метаданных отчета после того, как вы загрузили источник данных. Возможно, ранее вы не удаляли источник данных между загрузками? – Nathan

+0

Когда я загружаю отчет с помощью веб-службы, я получаю предупреждение 'rsDataSourceReferenceNotPublished' ** **. Повторяю, это предупреждение, а не ошибка. Поэтому по дизайну, похоже, все должно быть хорошо. Может быть, я где-то пропустил какой-то шаг.Но потом я задаюсь вопросом, как и почему он работал ранее. – 1nfected

+0

Согласно MSDN rsDataSourceReferenceNotPublished - это некритическая ошибка. Я не могу объяснить, почему это работало ранее, но мне кажется, что для этого подхода к работе вам нужно будет исправить ссылку на источник данных после развертывания отчета с использованием методов GetItemDataSources и SetItemDataSources. – Nathan

ответ

0

Возможно, мой случай может пригодиться вам. У меня была задача загрузить отчеты из rdl-файлов в SSRS2012 до запуска сервера приложений. Я решил использовать API веб-сервисов, а не rs.exr. После загрузки отчета по методу CreateCatalogItem класса ReportingService2010 Я попытался выполнить отчеты в браузере и получил ошибку. SSRS не смог найти общий источник данных для загруженного отчета. Когда я публиковал отчеты VS2013, отчеты работали правильно. Я не мог использовать метод SetItemDataSources, потому что не смог получить ссылку на существующий источник данных как экземпляр класса DataSource. Вот почему я нашел следующее решение. Идея в том, что rdl-файл имеет только имя общего источника данных, а не путь. Поэтому, если отчет и его источник данных находятся в другой папке, отчет не видит источника данных. В моем случае мой источник данных находится в папке «Источники данных», поэтому необходимо исправить RDL-файл перед загрузкой ,, как показано ниже:

Warning[] warnings = null; 

string name = "ProductList"; 

string dsName = "DB_CORE"; 

string dsFolderPath = "/Data Sources"; 

byte[] definition = null; 

// correct rdl 

XmlDocument rdlDoc = new XmlDocument(); 

rdlDoc.Load(+ name + ".rdl"); 

XmlNodeList dsRefmodes = rdlDoc.GetElementsByTagName("DataSourceReference"); 

dsRefmodes[0].InnerText = dsFolderPath + "/" + dsName; 

definition = Encoding.UTF8.GetBytes(rdlDoc.OuterXml); 

// upload 

CatalogItem report = rs.CreateCatalogItem("Report", name, "/" + parent, 
          true, definition, null, out warnings); 
Смежные вопросы