Vous appelez un assembly .Net à partir d'un rapport SQL Server 2005 Reporting Services?

StackOverflow https://stackoverflow.com/questions/71488

  •  09-06-2019
  •  | 
  •  

Question

Je dispose actuellement d'un ensemble de rapports contenant un certain nombre de fonctions communes placées dans des blocs de code dans les fichiers .rdl. Cela pose évidemment un problème de maintenabilité et je me demande si quelqu'un connaissait le moyen pour ces différents rapports de partager une bibliothèque de code commun?

Idéalement, j'aimerais associer un assembly .Net à mon projet Reporting Services, auquel tous mes rapports peuvent accéder et appeler des fonctions. Vous éviterez ainsi d’essayer de mettre à jour et de redéployer environ 100 rapports chaque fois qu’une modification doit être apportée à une fonction commune.

Des suggestions?

Était-ce utile?

La solution

Dans Visual Studio, dans les propriétés du rapport, dans l'onglet "Références", ajoutez les détails de l'assembly contenant le code managé. Ce code peut être appelé à partir d'expressions contenues dans des rapports en utilisant le nom d'instance spécifié.

Cet assemblage peut être stocké dans le répertoire GAC ou dans le répertoire PrivateAssemblies de Visual Studio et être déployé dans le répertoire "Service" de Report Service sur le serveur Reporting Services. Pour plus d'informations, consultez Comment utiliser des assemblys personnalisés ou du code intégré dans Reporting Services

Autres conseils

J'avais beaucoup de douleur avec cela, alors j'espère que cela aidera quelqu'un. Vous pouvez l'obtenir à partir de l'article MSDN, mais il y a quelques points ci-dessous qui, je pense, peuvent aider à accélérer quelqu'un un peu plus rapidement.

N'oubliez pas d'ajouter ceci dans votre fichier rssrvpolicy.config:

<CodeGroup class="UnionCodeGroup"
   version="1"
   PermissionSetName="FullTrust"
   Name="MyCodeGroup"
   Description="Code group for my data processing extension">
      <IMembershipCondition class="UrlMembershipCondition"
         version="1"
         Url="C:\pathtocustomassembly\customassembly.dll"
       />
</CodeGroup>

J'ai oublié de le faire et je le haïssais pendant un moment.

De plus, n'oubliez pas de cliquer sur les deux dossiers suivants pour 2005 avec votre nouvelle DLL:

Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies 
Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin

De plus, n'utilisez pas log4net avec votre assembly. Je ne pouvais pas le faire fonctionner. Peut-être que quelqu'un peut, mais pas moi.

De plus, si vous vous trompez comme avant, vous ne pourrez pas supprimer les fichiers tant que vous ne fermerez pas Visual Studio.

De plus, rendez vos méthodes partagées ou statiques. C'est plus facile.

Créez un fichier de commandes de déploiement. Quelque chose comme:

@ECHO OFF
REM   Name: SRSDeploy_Local.bat
REM
REM   This batch files copies my custom assembly to my Reporting Services folders.
REM
REM   This is the SQL Server 2005 version:
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin"  

Enfin, créez votre rapport avant la prévisualisation.

Si cela se construit, vous êtes sur la bonne voie.

Sauf ...

Vous ne pouvez pas le déployer sur votre serveur de rapports de production car vous obtiendrez toujours le message d'erreur suivant:

Erreur lors du chargement du module de code

C'est ce sur quoi je travaille en ce moment.

L'article suivant répertorie à peu près toutes les différentes façons d'appeler du code .Net à partir d'un rapport SSRS. Extension de Microsoft SQL Server 2000 Reporting Services avec code personnalisé

Si tous ces rapports sont exécutés sur le même serveur, une autre option à envisager serait d'utiliser des procédures stockées .Net dans la base de données pour contenir votre code.

Merci beaucoup les gars, je peux maintenant appeler mon assemblée à partir de mes rapports.

Question supplémentaire: Existe-t-il un espace de noms que je peux inclure lors de la création de mon assemblage et le rendant conscient des objets du concepteur de rapports tels que les champs et les paramètres? Ce serait vraiment bien si je pouvais transmettre, par exemple, une collection de champs de manière très typée à mon assemblage.

Et la réponse: Quelques heures de recherche révèlent que l'ajout de \ Program Files \ Microsoft Visual Studio 8 \ Common7 \ IDE \ PrivateAssemblies \ Microsoft.ReportingServices.ProcessingObjectModel.dll dans mon assembly me permet d'accéder aux différents types de Reporting Services, tels que les champs et les paramètres. Notez que dans Reporting Services 2008, les modifications apportées à l'espace de nom .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top