IronPython调用SSRS - 如何处理可变数组

时间:2011-06-23 16:16:44

标签: .net reporting-services ironpython

我正在尝试将以下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)按照Jeff Hardy的建议克服了即时调用,但它仍然会因为“太多的值而崩溃”解包'错误。任意扩展数组的大小或添加额外的参数不会改变这个错误 - 而且很难看出出现了什么问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

关于第一个问题,请参阅the documentation on ref and out parameters。基本上,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))