Мы использовали отличный RSBuild для массовой загрузки отчетов в службы отчетов SQL Server (SSRS), но я не нашел способа загрузить изображения. Глупо использовать диспетчер отчетов для загрузки одного изображения за раз. Сложность заключается в том, что веб-служба SQL Server Reporting, которую использует RSBuild, не поддерживает загрузку изображений. Есть ли способ массовой загрузки изображений в SSRS каким-либо другим способом?
Массовая загрузка изображений в SSRS
Ответы (2)
Сначала вам нужно будет загрузить одно изображение вручную, чтобы прочитать содержимое таблицы Catalog для строки изображения, вставленной в базу данных ReportServer, и использовать ParentId, PolicyId, CreatedById и ModifiedById в следующем сценарии.
Конечно, это можно абстрагировать в приложение и сделать его еще более удивительным.
BEGIN TRAN
DECLARE @ReportFolderPath NVARCHAR(MAX)
DECLARE @ImageFolderPath NVARCHAR(MAX)
DECLARE @ImageFileName NVARCHAR(MAX)
DECLARE @ImageFullFileName NVARCHAR(MAX)
DECLARE @ImageFileExtension NVARCHAR(MAX)
DECLARE @ImageMime NVARCHAR(MAX)
DECLARE @ImageFullPath NVARCHAR(MAX)
DECLARE @ParentId NVARCHAR(MAX)
DECLARE @PolicyId NVARCHAR(MAX)
DECLARE @CreatedModifiedId NVARCHAR(MAX)
DECLARE @SqlToGetImageContent NVARCHAR(MAX)
DECLARE @ImageContent VARBINARY(MAX)
SET @ReportFolderPath = '/MyReports/'
SET @ImageFolderPath = 'C:\Users\jdoe\Desktop\Reports\images\'
SET @ImageFileName = 'logo'
SET @ImageFileExtension = 'bmp'
SET @ImageFullFileName = @ImageFileName + '.' + @ImageFileExtension
SET @ImageFullPath = @ImageFolderPath + @ImageFileName
SET @ParentId = '0AAFF0D8-0616-4E63-9B1D-EBF99153B443'
SET @PolicyId = '8632B07A-EE75-4097-970C-18BE9958F7A2'
SET @CreatedModifiedId = 'C6121121-D0E4-4B25-BD4E-177EDA709ECB'
SET @SqlToGetImageContent = 'SELECT @ImageContent = BulkColumn FROM Openrowset(Bulk '''+ @ImageFolderPath + @ImageFullFileName +''', Single_Blob) AS ImageData'
IF(@ImageFileExtension = 'jpg')
BEGIN
SET @ImageMime = 'image/jpeg'
END
ELSE
BEGIN
SET @ImageMime = 'image/' + @ImageFileExtension
END
EXEC SP_EXECUTESQL
@Query = @SqlToGetImageContent
, @Params = N'@ImageContent VARBINARY(MAX) OUTPUT'
, @ImageContent = @ImageContent OUTPUT
INSERT INTO [ReportServer$DEV2012].[dbo].[Catalog] (ItemID, [Path], Name, ParentID, [Type], Content, [Intermediate], SnapshotDataID, LinkSourceID, Property, [Description], Hidden, CreatedByID, CreationDate, ModifiedByID, ModifiedDate, MimeType, SnapshotLimit, Parameter, PolicyID, PolicyRoot, ExecutionFlag, ExecutionTime, SubType, ComponentID)
VALUES(
NEWID(),
@ReportFolderPath + @ImageFullFileName,
@ImageFullFileName,
@ParentId,
3,
(SELECT @ImageContent),
NULL,
NULL,
NULL,
'<Properties />',
NULL,
0,
@CreatedModifiedId,
GETDATE(),
@CreatedModifiedId,
GETDATE(),
@ImageMime,
NULL,
NULL,
@PolicyId,
0,
1,
NULL,
NULL,
NULL
)
COMMIT TRAN
Чтобы загрузить несколько изображений в решение SSRS, я использовал следующий метод. Это довольно просто. Сначала создайте новую папку «Изображения» в диспетчере отчетов, в которую вы хотите связать внешние изображения в отчете.
- Откройте визуальную студию
- Перейти к файлу
- Выберите Открыть
- Выбрать файл
- Создайте новую папку под названием «Изображения» или что-то еще
- Вставьте все нужные изображения в эту папку
- Теперь перейдите к обозревателю решений.
- Выберите «Отчеты» и щелкните правой кнопкой мыши.
- Выберите «Добавить», затем «Существующий элемент».
- Перейдите в только что созданную новую папку
- Измените тип файла внизу на «Все файлы».
- Выберите все нужные изображения. Ярлык для выбора всего — это клавиша Ctrl плюс буква A.
- Нажмите «добавить»
- Все изображения будут добавлены под любыми отчетами в обозревателе решений.
Перейдите в меню «Отладка» и выберите свойства решения, как показано здесь Свойства решения.
Временно измените TargetReportFolder, чтобы оно соответствовало имени новой папки изображений, которую вы создали в диспетчере отчетов.
- В обозревателе решений щелкните правой кнопкой мыши все изображения (не отчеты).
- Выберите «Развернуть»
Убедитесь, что развертывание прошло успешно в Visual Studio, затем перейдите в папку диспетчера отчетов и убедитесь, что изображения там!
НЕ ЗАБУДЬТЕ: сбросьте TargetReportFolder до предыдущего значения!
Папка изображений диспетчера отчетов