Riferimenti a codice personalizzato e ad assembly in espressioni in Progettazione report (SSRS)Custom Code and Assembly References in Expressions in Report Designer (SSRS)

È possibile aggiungere riferimenti a codice personalizzato incorporato in un report o ad assembly personalizzati compilati e salvati nel computer in uso e distribuiti nel server di report.You can add references to custom code embedded in a report or to custom assemblies that you build and save to your computer and deploy to the report server. Usare codice incorporato per costanti personalizzate, funzioni complesse o funzioni usate più volte in un singolo report.Use embedded code for custom constants, complex functions or functions that are used multiple times in a single report. Usare gli assembly di codice personalizzati per mantenere il codice in un'unica posizione e condividerne l'utilizzo in più report.Use custom code assemblies to maintain code in a single place and share it for use by multiple reports. Il codice personalizzato può includere nuove costanti, variabili, funzioni o subroutine personalizzate.Custom code can include new custom constants, variables, functions, or subroutines. È possibile includere riferimenti di sola lettura a raccolte predefinite come ad esempio Parameters.You can include read-only references to built-in collections such as the Parameters collection. Non è tuttavia possibile passare alle funzioni personalizzate set di valori di dati. In particolare, non sono supportate le aggregazioni personalizzate.However, you cannot pass sets of report data values to custom functions; specifically, custom aggregates are not supported.

Importante

Per i calcoli che dipendono dal tempo, valutati una volta sola in fase di esecuzione e di cui si desidera mantenere inalterato il valore durante tutta l'elaborazione del report, considerare se utilizzare una variabile di report o una variabile di gruppo.For time-sensitive calculations that are evaluated once at run-time and that you want to remain the same value throughout report processing, consider whether to use a report variable or group variable. Per altre informazioni, vedere Riferimenti a raccolte di variabili di report e di gruppo (Generatore report e SSRS).For more information, see Report and Group Variables Collections References (Report Builder and SSRS).

Progettazione report è l'ambiente di creazione preferito da usare per l'aggiunta di codice personalizzato a un report.Report Designer is the preferred authoring environment to use to add custom code to a report. Generatore report supporta l'elaborazione di report che dispongono di espressioni valide o in cui sono inclusi riferimenti agli assembly personalizzati in un server di report.Report Builder supports processing reports that have valid expressions, or that include references to custom assemblies on a report server. Generatore report non consente di aggiungere un riferimento a un assembly personalizzato.Report Builder does not provide a way to add a reference to a custom assembly.

Nota

Tenere presente che durante un aggiornamento di un server di report, i report che dipendono dagli assembly personalizzati potrebbero richiedere passaggi aggiuntivi per il completamento dell'aggiornamento.Be aware that during an upgrade of a report server, reports that depend on custom assemblies might require additional steps to complete the upgrade.

Nota

È possibile creare e modificare file di definizioni report impaginati (con estensione rdl) in Generatore report e in Progettazione report di SQL Server Data Tools.You can create and modify paginated report definition (.rdl) files in Report Builder and in Report Designer in SQL Server Data Tools. Ogni ambiente di creazione offre modalità differenti per creare, aprire e salvare report ed elementi correlati.Each authoring environment provides different ways to create, open, and save reports and related items.

Utilizzo di codice personalizzato in Generatore report Working with Custom Code in Report Builder

In Generatore report è possibile aprire un report da un server di report in cui sono inclusi riferimenti agli assembly personalizzati.In Report Builder, you can open a report from a report server that includes references to custom assemblies. Ad esempio, è possibile modificare report creati e distribuiti tramite Progettazione report in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT).For example, you can edit reports that are created and deployed by using Report Designer in SQL Server Data Tools (SSDT)SQL Server Data Tools (SSDT). Gli assembly personalizzati devono essere distribuiti nel server di report.The custom assemblies must be deployed to the report server.

Non è possibile effettuare le operazioni seguenti:You cannot do the following:

  1. Aggiungere riferimenti o istanze del membro della classe a un report.Add references or class member instances to a report.

  2. Visualizzare in anteprima un report con i riferimenti agli assembly personalizzati in modalità locale.Preview a report with references to custom assemblies in local mode.

Inclusione di riferimenti a funzioni usate di frequente Including References to Commonly Used Functions

Usare la finestra di dialogo Espressione per visualizzare un elenco per categoria di funzioni comuni predefinite di Reporting ServicesReporting Services.Use the Expression dialog box to view a categorized list of common functions built-in to Reporting ServicesReporting Services. Quando si espande Funzioni comuni e fa clic su una categoria, nel riquadro Elemento viene visualizzato l'elenco di funzioni da includere in un'espressione.When you expand Common Functions and click a category, the Item pane displays the list of functions that you include in an expression. Le funzioni comuni includono classi degli spazi dei nomi .NET Framework.NET Framework Math e Convert e funzioni della libreria run-time di Visual BasicVisual Basic .The common functions include classes from the .NET Framework.NET Framework Math and Convert namespaces and Visual BasicVisual Basic run-time library functions. Per praticità, è possibile visualizzare le funzioni usate più di frequente nella finestra di dialogo Espressione , in cui sono elencate per categoria: Testo, Data e ora, Matematiche, Ispezione, Flusso programma, Aggregazione, Finanziarie, Conversione e Varie.For convenience, you can view the most commonly used functions in the Expression dialog box, where they are listed by category: Text, Date and Time, Math, Inspection, Program Flow, Aggregate, Financial, Conversion, and Miscellaneous. Le funzioni usate meno di frequente non sono riportate nell'elenco, ma possono comunque essere usate in un'espressione.Less commonly used functions do not appear in the list but can still be used in an expression.

Per utilizzare una funzione predefinita, fare doppio clic sul relativo nome nel riquadro Elemento.To use a built-in function, double-click the function name in the Item pane. Nel riquadro Descrizione verrà visualizzata una descrizione della funzione e nel riquadro Esempio un esempio della chiamata alla funzione.A description of the function appears in the Description pane and an example of the function call appears in the Example pane. Nel riquadro del codice, quando si digita il nome della funzione seguito da una parentesi aperta (, tramite IntelliSense verranno visualizzate tutte le sintassi valide per la chiamata alla funzione.In the code pane, when you type the function name followed by a left parenthesis (, the IntelliSense help displays each valid syntax for the function call. Ad esempio per calcolare il valore massimo per un campo denominato Quantity in una tabella, aggiungere l'espressione semplice =Max( nel riquadro del codice, quindi usare gli smart tag per visualizzare tutte le possibili sintassi valide per la chiamata alla funzione.For example, to calculate the maximum value for a field named Quantity in a table, add the simple expression =Max( to the Code pane, and then use the smart tags to view all possible valid syntaxes for the function call. Per completare questo esempio, digitare =Max(Fields!Quantity.Value).To complete this example, type =Max(Fields!Quantity.Value).

Per altre informazioni su ogni funzione, vedere Math, Converte la pagina relativa ai membri delle librerie run-time di Visual Basic in MSDN.For more information about each function, see Math, Convert, and Visual Basic Runtime Library Members on MSDN.

Inclusione di riferimenti a funzioni usate meno di frequente Including References to Less Commonly Used Functions

Per includere un riferimento ad altri spazi dei nomi CLR usati meno di frequente, è necessario usare un riferimento completo, ad esempio StringBuilder.To include a reference to other less commonly used CLR namespaces, you must use a fully qualified reference, for example, StringBuilder. IntelliSense non è supportato nel riquadro del codice della finestra di dialogo Espressione per queste funzioni usate meno di frequente.IntelliSense is not supported in the code pane of the Expression dialog box for these less commonly used functions.

Per altre informazioni, vedere la pagina relativa ai membri delle librerie di runtime di Visual Basic in MSDN.For more information, see Visual Basic Runtime Library Members on MSDN.

Inclusione di riferimenti ad assembly esterni Including References to External Assemblies

Per includere un riferimento a una classe in un assembly esterno, è necessario identificare l'assembly per il componente Elaborazione report.To include a reference to a class in an external assembly, you must identify the assembly for the report processor. Usare la pagina Riferimenti della finestra di dialogo Proprietà report per specificare il nome completo dell'assembly da aggiungere al report.Use the References page of the Report Properties dialog box to specify the fully qualified name of the assembly to add to the report. Nell'espressione è necessario usare il nome completo per la classe nell'assembly.In your expression, you must use the fully qualified name for the class in the assembly. Le classi di un assembly esterno non vengono visualizzate nella finestra di dialogo Espressione ; è necessario fornire il relativo nome corretto.Classes in an external assembly do not appear in the Expression dialog box; you must provide the correct name for the class. Un nome completo include lo spazio dei nomi, il nome della classe e il nome del membro.A fully qualified name includes the namespace, the class name, and the member name.

Inclusione di codice incorporato Including Embedded Code

Per aggiungere codice incorporato a un report, usare la scheda Codice della finestra di dialogo Proprietà report .To add embedded code to a report, use the Code tab of the Report Properties dialog box. Il blocco di codice creato può contenere più metodi.The code block you create can contain multiple methods. È necessario che i metodi del codice incorporato siano scritti in MicrosoftMicrosoft Visual BasicVisual Basic e siano basati su istanze.Methods in embedded code must be written in MicrosoftMicrosoft Visual BasicVisual Basic and must be instance-based. Tramite il componente Elaborazione report, vengono aggiunti automaticamente i riferimenti per gli spazi dei nomi System.Convert e System.Math.The report processor automatically adds references for the System.Convert and System.Math namespaces. Usare la pagina Riferimenti della finestra di dialogo Proprietà report per aggiungere altri riferimenti ad assembly.Use the References page of the Report Properties dialog box to add additional assembly references. Per altre informazioni, vedere Aggiungere un riferimento a un assembly in un report (SSRS).For more information, see Add an Assembly Reference to a Report (SSRS).

I metodi nel codice incorporato sono disponibili tramite un membro Code definito a livello globale.Methods in embedded code are available through a globally defined Code member. Per accedere ai metodi, fare riferimento al membro Code e al nome del metodo.You access these by referring to the Code member and the method name. L'esempio seguente consente di chiamare il metodo ToUSDper la conversione del valore del campo StandardCost in un valore in dollari:The following example calls the method ToUSD, which converts the value in the StandardCost field to a dollar value:

=Code.ToUSD(Fields!StandardCost.Value)  

Per fare riferimento a raccolte predefinite nel codice personalizzato, includere un riferimento all'oggetto Report predefinito:To reference built-in collections in your custom code, include a reference to the built-in Report object:

=Report.Parameters!Param1.Value  

Negli esempi seguenti viene illustrato come definire alcune variabili e costanti personalizzate.The following examples show how to define some custom constants and variables.

Public Const MyNote = "Authored by Bob"  
Public Const NCopies As Int32 = 2  
Public Dim  MyVersion As String = "123.456"  
Public Dim MyDoubleVersion As Double = 123.456  

Sebbene le variabili e le costanti personalizzate non siano presenti nella categoria Costanti nella finestra di dialogo Espressioni , in cui vengono visualizzate solo costanti predefinite, è possibile farvi riferimento da qualsiasi espressione, come illustrato negli esempi seguenti.Although custom constants do not appear in the Constants category in the Expression dialog box (which only displays built-in constants), you can add references to them from any expression, as shown in the following examples. In un'espressione una costante personalizzata viene considerata come un elemento Variant.In an expression, a custom constant is treated as a Variant.

=Code.MyNote  
=Code.NCopies  
=Code.MyVersion  
=Code.MyDoubleVersion  

Nell'esempio seguente sono inclusi sia il riferimento al codice sia l'implementazione del codice della funzione FixSpellingche consente la sostituzione del testo "Bicycle" per tutte le occorrenze del testo "Bike" nel campo SubCategory .The following example includes both the code reference and the code implementation of the function FixSpelling, which substitutes the text "Bicycle" for all occurrences of the text "Bike" in the SubCategory field.

=Code.FixSpelling(Fields!SubCategory.Value)

Il codice seguente, se incorporato nel blocco di codice di una definizione del report, indica un'implementazione del metodo FixSpelling .The following code, when embedded in a report definition code block, shows an implementation of the FixSpelling method. Questo esempio illustra come usare un riferimento completo alla classe MicrosoftMicrosoft .NET Framework.NET Framework StringBuilder class.This example shows you how to use a fully qualified reference to the MicrosoftMicrosoft .NET Framework.NET Framework StringBuilder class.

Public Function FixSpelling(ByVal s As String) As String  
   Dim strBuilder As New System.Text.StringBuilder(s)  
   If s.Contains("Bike") Then  
      strBuilder.Replace("Bike", "Bicycle")  
      Return strBuilder.ToString()  
      Else : Return s  
   End If  
End Function  

Per altre informazioni sulle raccolte di oggetti predefiniti e sull'inizializzazione, vedere Riferimenti alle raccolte predefinite Globals e Users (Generatore report e SSRS) e Inizializzazione di oggetti assembly personalizzati.For more information about built-in object collections and initialization, see Built-in Globals and Users References (Report Builder and SSRS) and Initializing Custom Assembly Objects.

Inclusione di riferimenti ai parametri da codice Including References to Parameters from Code

È possibile fare riferimento alla raccolta globale di parametri tramite codice personalizzato in un blocco di codice della definizione del report oppure in un assembly personalizzato specificato dall'utente.You can reference the global parameters collection via custom code in a Code block of the report definition or in a custom assembly that you provide. La raccolta di parametri è di sola lettura e non include iteratori pubblici.The parameters collection is read-only and has no public iterators. Non è possibile usare un costrutto Visual BasicVisual Basic di per esaminare la raccolta parametro per parametro.You cannot use a Visual BasicVisual Basic For Each construct to step through the collection. È necessario conoscere il nome del parametro definito nella definizione del report per potervi fare riferimento nel codice personalizzato.You need to know the name of the parameter defined in the report definition before you can reference it in your code. È tuttavia possibile scorrere tutti i valori di un parametro multivalore.You can, however, iterate through all the values of a multi value parameter.

Nella tabella seguente sono inclusi esempi di riferimenti alla raccolta predefinita Parameters da codice personalizzato:The following table includes examples of referencing the built-in collection Parameters from custom code:

Passaggio di un'intera raccolta globale di parametri al codice personalizzato.Questa funzione restituisce il valore di un parametro di report MyParameterspecifico.Passing an entire global parameter collection to custom code.This function returns the value of a specific report parameter MyParameter.

Riferimento nell'espressione =Code.DisplayAParameterValue(Parameters)Reference in Expression =Code.DisplayAParameterValue(Parameters)

Definizione del codice personalizzatoCustom Code definition

Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object  
Return parameters("MyParameter").Value  
End Function  

Passaggio di un singolo parametro al codice personalizzato.Passing an individual parameter to custom code.

Riferimento nell'espressione =Code.ShowParametersValues(Parameters!DayOfTheWeek)Reference in Expression =Code.ShowParametersValues(Parameters!DayOfTheWeek)

In questo esempio viene restituito il valore del parametro passato.This example returns the value of the parameter passed in. Se il parametro è un parametro multivalore, la stringa restituita è una concatenazione di tutti i valori.If the parameter is a multivalue parameter, the return string is a concatenation of all the values.

Definizione del codice personalizzatoCustom Code definition

Public Function ShowParameterValues(ByVal parameter as Parameter)  
 as String  
   Dim s as String   
   If parameter.IsMultiValue then  
      s = "Multivalue: "   
      For i as integer = 0 to parameter.Count-1  
         s = s + CStr(parameter.Value(i)) + " "   
      Next  
   Else  
      s = "Single value: " + CStr(parameter.Value)  
   End If  
   Return s  
End Function  

Inclusione di riferimenti al codice da assembly personalizzati Including References to Code from Custom Assemblies

Per usare assembly personalizzati in un report, è innanzitutto necessario creare l'assembly, renderlo disponibile in Progettazione report, aggiungere un riferimento all'assembly nel report e quindi usare un'espressione nel report per fare riferimento ai metodi contenuti in tale assembly.To use custom assemblies in a report, you must first create the assembly, make it available to Report Designer, add a reference to the assembly in the report, and then use an expression in the report to refer to the methods contained in that assembly. Quando il report viene distribuito al server di report, è necessario distribuire anche l'assembly personalizzato al server di report.When the report is deployed to the report server, you must also deploy the custom assembly to the report server.

Per informazioni su come creare un assembly personalizzato e renderlo disponibile per Reporting ServicesReporting Services, vedere Uso di assembly personalizzati con i report.For information about creating a custom assembly and making it available to Reporting ServicesReporting Services, see Using Custom Assemblies with Reports.

Per fare riferimento al codice personalizzato in un'espressione, è necessario chiamare il membro di una classe nell'assembly.To refer to custom code in an expression, you must call the member of a class within the assembly. La modalità di esecuzione di tale operazione dipende dal tipo di metodo, ovvero statico o basato su istanze.How you do this depends on whether the method is static or instance-based. I metodi statici all'interno di un assembly personalizzato sono disponibili globalmente all'interno del report.Static methods within a custom assembly are available globally within the report. È possibile accedere ai metodi statici nelle espressioni specificando lo spazio dei nomi, la classe e il nome del metodo.You can access static methods in expressions by specifying the namespace, class, and method name. Nell'esempio seguente viene chiamato il metodo ToGBP, che consente di convertire il valore del campo StandardCost da dollari a sterline:The following example calls the method ToGBP, which converts the value of the StandardCost value from dollar to pounds sterling:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)  

I metodi basati su istanze sono disponibili tramite un membro Code definito a livello globale.Instance-based methods are available through a globally defined Code member. Per accedere ai metodi, fare riferimento al membro Code , aggiungendo l'istanza e il nome del metodo.You access these by referring to the Code member, followed by the instance and method name. Nell'esempio seguente viene chiamato il metodo di istanza ToEUR, che consente di convertire il valore del campo StandardCost da dollari a euro:The following example calls the instance method ToEUR, which converts the value of StandardCost from dollar to euro:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)  
Nota

In Progettazione report un assembly personalizzato viene caricato una volta e non viene scaricato finché non si chiude Visual StudioVisual Studio.In Report Designer, a custom assembly is loaded once and is not unloaded until you close Visual StudioVisual Studio. Se si visualizza in anteprima un report, si apportano modifiche a un assembly personalizzato usato nel report e quindi si visualizza di nuovo il report in anteprima, le modifiche non compariranno nella seconda anteprima.If you preview a report, make changes to a custom assembly used in the report, and then preview the report again, the changes will not appear in the second preview. Per ricaricare l'assembly, chiudere e riaprire Visual StudioVisual Studio , quindi visualizzare l'anteprima del report.To reload the assembly, close and reopen Visual StudioVisual Studio and then preview the report.

Per altre informazioni sull'accesso al codice, vedere Accessing Custom Assemblies Through Expressions.For more information about accessing your code, see Accessing Custom Assemblies Through Expressions.

Passaggio di raccolte predefinite in assembly personalizzati Passing Built-in Collections into Custom Assemblies

Se si vuole passare raccolte predefinite, ad esempio la raccolta Globals o Parameters , in un assembly personalizzato per l'elaborazione, è necessario aggiungere nel progetto di codice un riferimento all'assembly che definisce le raccolte predefinite e accede allo spazio dei nomi corretto.If you want to pass built-in collections, such as the Globals or Parameters collection, into a custom assembly for processing, you must add an assembly reference in your code project to the assembly that defines the built-in collections and access the correct namespace. A seconda del fatto che l'assembly personalizzato venga sviluppato per un report eseguito in un server di report (report del server) o un report eseguito localmente in un'applicazione .NET (report locale), l'assembly a cui è necessario fare riferimento è diverso.Depending on whether you are developing the custom assembly for a report that is run on a report server (server report) or a report that is run locally in a .NET application (local report), the assembly you need to reference is different. Per informazioni dettagliate, vedere di seguito.See below for details.

  • Spazio dei nomi: Microsoft.ReportingServices.ReportProcessing.ReportObjectModelNamespace: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • Assembly (report locale): Microsoft.ReportingServices.ProcessingObjectModel.dllAssembly (local report): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • Assembly (report del server): Microsoft.ReportViewer.ProcessingObjectModel.dllAssembly (server report): Microsoft.ReportViewer.ProcessingObjectModel.dll

    Poiché il contenuto delle raccolte Fields e ReportItems può cambiare dinamicamente in fase di esecuzione, non è consigliabile mantenere i riferimenti tra diverse chiamate nell'assembly personalizzato (ad esempio in una variabile membro).Since the content of the Fields and ReportItems collections can change dynamically at runtime, you should not hold onto them across calls into the custom assembly (for example, in a member variable). Lo stesso consiglio si applica in genere a tutte le raccolte predefinite.The same recommendation applies generally to all built-in collections.

Vedere ancheSee Also

Aggiungere codice a un Report ( SSRS ) Add Code to a Report (SSRS)
Utilizzo di assembly personalizzati con i report Using Custom Assemblies with Reports
Aggiungere un riferimento all'Assembly per un Report ( SSRS ) Add an Assembly Reference to a Report (SSRS)
Reporting Services Tutorials ( SSRS ) Reporting Services Tutorials (SSRS)
Esempi di espressioni ( Generatore report e SSRS ) Expression Examples (Report Builder and SSRS)
Esempi di report (Generatore report e SSRS)Report Samples (Report Builder and SSRS)