Массовая загрузка изображений в SSRS

Мы использовали отличный RSBuild для массовой загрузки отчетов в службы отчетов SQL Server (SSRS), но я не нашел способа загрузить изображения. Глупо использовать диспетчер отчетов для загрузки одного изображения за раз. Сложность заключается в том, что веб-служба SQL Server Reporting, которую использует RSBuild, не поддерживает загрузку изображений. Есть ли способ массовой загрузки изображений в SSRS каким-либо другим способом?


person Adam Caviness    schedule 01.06.2012    source источник
comment
Вы используете RSBuild только для публикации отчетов? Или вы используете его для чего-то еще? Я спрашиваю, потому что у нас есть много серверов в более низких средах, где нам нужно регулярно развертывать отчеты и поддерживать их синхронизацию. Вы бы порекомендовали использовать RSBuild в этом случае?   -  person VoodooChild    schedule 15.10.2012
comment
@VoodooChild Мы используем RSBuild только для публикации отчетов. Вы можете автоматизировать развертывание через RSBuild на своем сервере сборки. Я полагаю, что с использованием TFS это будет прямолинейно. Сделайте шаблон процесса сборки для этого на регулярной основе с расписанием. Создайте свою собственную сборку CustomProcess, используя элементы рабочего процесса для выполнения RSBuild, а затем загрузите свои изображения через пользовательскую сборку. Кроме того, вы можете просто вызвать ту же веб-службу, что и RSBuild.   -  person Adam Caviness    schedule 16.10.2012


Ответы (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
person Adam Caviness    schedule 01.06.2012

Чтобы загрузить несколько изображений в решение SSRS, я использовал следующий метод. Это довольно просто. Сначала создайте новую папку «Изображения» в диспетчере отчетов, в которую вы хотите связать внешние изображения в отчете.

  1. Откройте визуальную студию
  2. Перейти к файлу
  3. Выберите Открыть
  4. Выбрать файл
  5. Создайте новую папку под названием «Изображения» или что-то еще
  6. Вставьте все нужные изображения в эту папку
  7. Теперь перейдите к обозревателю решений.
  8. Выберите «Отчеты» и щелкните правой кнопкой мыши.
  9. Выберите «Добавить», затем «Существующий элемент».
  10. Перейдите в только что созданную новую папку
  11. Измените тип файла внизу на «Все файлы».
  12. Выберите все нужные изображения. Ярлык для выбора всего — это клавиша Ctrl плюс буква A.
  13. Нажмите «добавить»
  14. Все изображения будут добавлены под любыми отчетами в обозревателе решений.
  15. Перейдите в меню «Отладка» и выберите свойства решения, как показано здесь Свойства решения.

  16. Временно измените TargetReportFolder, чтобы оно соответствовало имени новой папки изображений, которую вы создали в диспетчере отчетов.

  17. В обозревателе решений щелкните правой кнопкой мыши все изображения (не отчеты).
  18. Выберите «Развернуть»

Убедитесь, что развертывание прошло успешно в Visual Studio, затем перейдите в папку диспетчера отчетов и убедитесь, что изображения там!

НЕ ЗАБУДЬТЕ: сбросьте TargetReportFolder до предыдущего значения!

Папка изображений диспетчера отчетов

person EasyMoney    schedule 07.07.2017