2010-01-26 7 views
0

J'ai un cas où mon serveur de rapports doit être plus ou moins accessible au public, car nous utilisons le contrôle ReportViewer dans une application Web ASP.NET et des groupes d'utilisateurs accèdent à divers rapports.Comment définir les paramètres de rapport SSRS pour un rapport lié à l'aide de l'API SOAP?

Ceci fonctionnera avec SQL Server 2008 Standard Edition. La sécurité sera gérée par la création de rapports liés (un pour chaque utilisateur, publié au moment de l'exécution lorsqu'ils demandent le rapport de notre application Web) mais j'ai des difficultés à définir par programmation les valeurs du paramètre de rapport lié. En résumé, un rapport a un petit nombre de noms de paramètres réservés (par exemple, UserID et LanguageID). Lors de l'exécution, l'application Web vérifie si l'utilisateur possède un rapport lié (en utilisant des noms de rapports liés uniques pour chaque rapport/utilisateur) et en crée un s'il n'existe pas.

Ceci est fait en utilisant l'API SOAP SSRS et fonctionne très bien. Le problème que j'ai est dans la définition des paramètres de rapport pour un rapport lié. Par exemple, si je me connecte en tant qu'administrateur système, je veux juste voir le rapport et avoir un contrôle complet sur les paramètres dans le visualiseur de rapports. Si je me connecte en tant qu'utilisateur "faible", je m'attends à ce que le paramètre UserID soit défini sur mon ID dans le rapport lié, et ne puisse pas modifier l'identifiant utilisateur pour surveiller les rapports d'autres utilisateurs. Ceci peut être accompli manuellement dans le Gestionnaire de rapports en ouvrant les propriétés du rapport lié et en définissant les valeurs par défaut du paramètre et en décochant la case "Inviter l'utilisateur".

Maintenant, j'essaie de faire cela par programmation en utilisant l'API SOAP et n'arrive pas à trouver la bonne façon de le faire.

Je lis des indices dans quelques endroits que la méthode CreateLinkedReport peut définir des paramètres, mais je commence à penser que c'est juste un malentendu de la part des auteurs. Bien que cette méthode accepte les propriétés Property [], ces propriétés semblent uniquement fournir des métadonnées de rapport (telles que le nom du rapport lié).

Y a-t-il un balisage spécial que je dois utiliser avec le/les nom (s) de propriété pour indiquer que la propriété est un paramètre de rapport?

Toutes les idées sont grandement appréciées.

Répondre

0

Ah! Je l'ai!

Il existe 2 méthodes SOAP: GetReportParameters et SetReportParameters

Ils sont documentés comme des rapports de travail, qui sont des rapports très non liés, mais ce bit de fonctionnalité dans l'API semble fonctionner à la fois.

Pour les chercheurs futurs: J'ai écrit une méthode pour recevoir un ReportParameter [] (le résultat de GetReportParameters appelé sur le rapport lié ) et itérer à travers eux. Pseudo/presqueC# code:

ReportParameter[] reportParameters = ReportingService2005.GetReportParameters(LinkedReportName); 
foreach(ReportParameter reportParameter in reportParameters) 
{ 
    switch(reportParameter.Name) 
    { 
     case "ReservedParam1": 
     reportParameter.DefaultValues = new string[1]; 
     reportParameter.DefaultValues[0] = CalculateReservedParam1(); 
     reportParameter.PromptUser = false; 
     //etc 
    } 
} 
try 
{ 
    ReportingService2005.SetReportParameters(reportParameters); 
} 
catch (Exception e) 
{ 
    // if error occurs while replacing params, delete linked report so user can't specify parameters they aren't entitled to 
    ReportingService2005.DeleteItem(LinkedReportName); 
    throw e; 
} 
Questions connexes