IronPython вызов SSRS - как обрабатывать изменяемые массивы - PullRequest
1 голос
/ 23 июня 2011

Я пытаюсь перевести следующий код C # в IronPython, но я не знаю, как обращаться со строго типизированными изменяемыми массивами.Код является тестовым кодом для записи отчета SSRS на стороне сервера в локальный PDF-файл и отлично работает в C #.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Drawing.Imaging;
using System.Drawing.Printing;
using System.Collections.Generic;
using Microsoft.Reporting.WinForms;

namespace ConsoleBooking
{
    class Program
    {
        static void Main(string[] args)
        {
            ServerReport report = new ServerReport();
            report.ReportServerUrl = new Uri("http://192.168.1.29/ReportServer");
            report.ReportPath = "/Report Project Media Bookings/Business";

            Warning[] warnings;
            string[] streamids;
            string mimeType;
            string encoding;
            string filenameExtension;

            byte[] bytes = report.Render(
                "PDF", null, out mimeType, out encoding, out filenameExtension,
                 out streamids, out warnings);

            string filename = Path.Combine(Path.GetTempPath(), "business.pdf");
            using (FileStream fs = new FileStream(filename, FileMode.Create))
            {
                fs.Write(bytes, 0, bytes.Length);
            }
        }
    }
}

Если я настрою массивы как

streamids = Array.CreateInstance(String, 1)

, так что мойвызов выглядит следующим образом

bytes = report.Render("PDF", None, mimeType, encoding, filenameExtension, streamids, warnings)

Затем я получаю это загадочное необработанное исключение, возвращаемое

ожидаемое StrongBox [str], полученное str

Как следуетЯ кодирую это?

Приведенный выше отчет не принимает никаких параметров, но в C # они добавляются с использованием

        List<ReportParameter> paramList = new List<ReportParameter>();
        paramList.Add(new ReportParameter("pBookingID", "6761", false));
        report.SetParameters(paramList);

, что снова хорошо работает для меня в связанном отчете - как мне это сделать?добавить это в IronPython?

ОБНОВЛЕНИЕ: использование байтов, mimeType, кодировки, filenameExtension, streamids, warnings = report.Render ("PDF", null), как предложено Джеффом Харди, преодолевает немедленный вызов, но все равновылетает с ошибкой «слишком много значений для распаковки».Произвольное расширение размера массивов или добавление дополнительных параметров не изменяет эту ошибку - и трудно понять, что происходит не так.Есть идеи?

1 Ответ

1 голос
/ 23 июня 2011

По первой проблеме см. документацию по ref и out параметрам .По сути, наши параметры становятся частью возвращаемого кортежа.Это будет выглядеть примерно так (не проверено):

bytes, mimeType, encoding, filenameExtension, streamids, warnings = report.Render("PDF", null)

Для второго, попробуйте:

from System.Collections.Generic import List

params = [ReportParameter("pBookingID", "6761", False), ...]
report.SetParam(List[ReportParameter](params))
...