Domanda

Al momento dispongo di una serie di report con una serie di funzioni comuni contenute in blocchi di codice all'interno dei file .rdl.Ciò presenta ovviamente un problema di manutenibilità e mi chiedo se qualcuno conoscesse un modo per consentire a questi diversi report di condividere una libreria di codice comune?

Idealmente mi piacerebbe avere un assembly .Net allegato al mio progetto Reporting Services, a cui tutti i miei report possono accedere e da cui chiamare funzioni.Ciò eviterebbe il problema di dover aggiornare e ridistribuire circa 100 report ogni volta che è necessario apportare una modifica a una funzione comune.

Eventuali suggerimenti?

È stato utile?

Soluzione

Da Visual Studio nelle proprietà del report, nella scheda "Riferimenti" aggiungere i dettagli per l'assembly che contiene il codice gestito.Questo codice può essere chiamato da espressioni all'interno dei report utilizzando il nome dell'istanza specificato.

Questo assembly può essere archiviato nella directory GAC o PrivateAssemblies di Visual Studio ed essere distribuito nella directory "bin" di Report Service sul server Reporting Services.Per ulteriori informazioni fare riferimento a Come utilizzare assembly personalizzati o codice incorporato in Reporting Services

Altri suggerimenti

Ho avuto molto dolore con questo, quindi spero che questo aiuti qualcuno.Puoi ottenerlo dall'articolo di MSDN, ma ci sono alcuni punti di seguito che penso possano aiutare qualcuno a velocizzare questo processo un po' più velocemente.

Non dimenticare di aggiungere questo al tuo file 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>

Ho dimenticato di farlo e l'ho odiato per un po'.

Inoltre, non dimenticare di accedere a entrambe le seguenti cartelle per il 2005 con la tua nuova DLL:

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

Inoltre non utilizzare log4net con il tuo assembly.Non sono riuscito a farlo funzionare.Forse qualcuno può ma non io.

Inoltre, se sbagli come ho fatto io, non sarai in grado di eliminare i file finché non chiudi Visual Studio.

Inoltre, rendi i tuoi metodi condivisi o statici.È più facile.

Creare un file batch di distribuzione.Qualcosa di simile a:

@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"  

Infine, crea il tuo report prima di visualizzarne l'anteprima.

Se si costruisce probabilmente sei sulla buona strada.

Tranne...

Non puoi distribuirlo sul server di report di produzione perché riceverai sempre il seguente errore:

Errore durante il caricamento del modulo di codice

Ed è quello su cui sto lavorando adesso.

Il seguente articolo elenca quasi tutti i diversi modi per richiamare il codice .Net da un report SSRS. Estensione di Microsoft SQL Server 2000 Reporting Services con codice personalizzato

Se tutti questi report vengono eseguiti sullo stesso server, un'altra opzione da considerare sarebbe quella di utilizzare le procedure memorizzate .Net nel database per conservare il codice.

Molte grazie ragazzi, ora posso convocare la mia assemblea dai miei rapporti.

Domanda supplementare:Esiste uno spazio dei nomi che posso includere quando creo il mio assembly che lo renda consapevole degli oggetti nella finestra di progettazione del report come campi e parametri?Sarebbe davvero fantastico se potessi passare, ad esempio, una raccolta di campi in modo fortemente tipizzato al mio assembly.

E la risposta: Un paio d'ore di ricerca rivelano che l'aggiunta di \Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\Microsoft.ReportingServices.ProcessingObjectModel.dll come riferimento nel mio assembly mi consente di accedere ai vari tipi di Reporting Services, come Fields e parametri.Si noti che in Reporting Services 2008, il modifiche dello spazio dei nomi.

È necessario eseguire la distribuzione al GAC.http://www.developerdotstar.com/community/node/333

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top