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