2011-06-23 5 views
1

je tente de traduire le code C# suivant dans IronPython mais je ne sais pas comment gérer les tableaux mutables fortement typé. Le code est un code de test pour écrire un rapport Server Side SSRS sur un fichier PDF local et s'exécute correctement en C#.appel IronPython à SSRS - comment gérer les tableaux mutables

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); 
      } 
     } 
    } 
} 

Si je mets les tableaux comme

streamids = Array.CreateInstance(String, 1) 

donc mon appel ressemble à ceci

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

Je reçois cette exception non gérée plutôt énigmatique retourné

attendu StrongBox [str], obtenu str

Comment dois-je coder cela?

Le rapport ci-dessus ne prend aucun paramètre, mais en C# ceux-ci sont ajoutées à l'aide

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

dans un rapport connexe qui fonctionne encore bien pour moi - comment puis-je ajouter ceci IronPython? UPDATE: en utilisant les octets, mimeType, encoding, filenameExtension, streamids, warnings = report.Render ("PDF", null) comme suggéré par Jeff Hardy récupère l'appel immédiat, mais il se bloque toujours avec un 'trop de valeurs pour décompresser l'erreur. Arbitrer arbitrairement la taille des tableaux ou ajouter des paramètres supplémentaires ne change pas cette erreur - et il est difficile de voir ce qui ne va pas. Des idées?

Répondre

1

Pour le premier problème, voir the documentation on ref and out parameters. Fondamentalement, les paramètres out deviennent une partie d'un tuple retourné. Cela ressemblerait à quelque chose comme (non testé):

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

Pour la seconde, essayez:

from System.Collections.Generic import List 

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

Merci, donc ce serait le premier aspect de la pièce comme dans le code? (juste l'initialisation de la variable et l'appel) – Cruachan

+0

J'ai ajouté un exemple, mais ne l'ai pas testé. –

Questions connexes