Cómo utilizar código incrustado o ensamblados personalizados en Reporting Services

Columna de voz de soporte de SQL Server

Cómo utilizar código incrustado o ensamblados personalizados en Reporting Services

Para personalizar esta columna a sus necesidades, deseamos invitar a enviar sus ideas sobre temas que le interesan los problemas que desea ver y abordaron en próximas columnas de voz de soporte y artículos de Knowledge Base. Puede enviar sus ideas y comentarios mediante el Preguntar para el formulario. También hay un vínculo al formulario en la parte inferior de esta columna.
¡Bienvenido! Soy Sandy Yakob junto con el equipo de contenido de Microsoft SQL Server. Yo soy su anfitriona para las columnas de voz de soporte de SQL Server. Una nota rápida acerca de mí: he estado con Microsoft durante 14 años. Durante los últimos tres años, he estado trabajando con el equipo de contenido de SQL Server.


Para la columna de este mes, John Sirmon le proporcionará los pasos para utilizar un ensamblado personalizado o un código incrustado en SQL Server 2000 Reporting Services y SQL Server 2005 Reporting Services. En este artículo se diseñó para dar los pasos básicos para poner en funcionamiento y ejecutar con un ensamblado personalizado en Reporting Services. Juan es un ingeniero de escalamiento de soporte con el equipo de soporte técnico de desarrolladores de SQL de Microsoft y ha trabajado para Microsoft desde marzo de 2001. Ha trabajado con SQL Server para más de 10 años y cuenta de desarrollo extensa experiencia con Microsoft Visual Studio. John es B. S. Licenciado en administración comercial de The Citadel. También posee una certificación Microsoft Certified Solution Developer (MCSD) y una certificación Microsoft Certified Database Administrator (MCDBA). Espero que disfrute de la columna y que resulte útil.

Crear un ensamblado personalizado

Para crear un ensamblado personalizado, siga estos pasos:
  1. Crear una biblioteca de clases de Visual Studio. En el menú archivo , elija nuevo, elija proyectoy, a continuación, haga clic en Biblioteca de clases.
  2. Especifique el nombre y la ubicación. Por ejemplo, he usado SimpleClassLibrary y C:\Documents and Settings\user1\My documentos\Visual Studio 2005\proyectos.
  3. Abra el archivo de clase (en mi caso, Class1.vb) y, a continuación, cree las funciones que desea utilizar en Reporting Services. En mi caso, simplemente cree una función compartida simple.

    Nota: Puesto que es una función compartida (estática en C#), no tenemos acceso a ella mediante una instancia de objeto. Téngalo en cuenta cuando esto tiene un efecto sobre cómo hacemos referencia nuestro ensamblado más adelante en el artículo.
    Public Class Class1
    Public Shared Function DoSomething() As String
    Return "string data returned from custom assembly"
    End Function

    End Class

  4. Una vez que haya terminado de agregar todo el código, haga clic en Generar SimpleClassLibrary en el menú Generar . Este paso crea el ensamblado o el archivo .dll administrado en la carpeta bin respectivos. En mi ejemplo, este paso crea el ensamblado, SimpleClassLibrary.dll, en la carpeta de Mis documentos\Visual Studio 2005\Projects\ SimpleClassLibrary\bin\Debug.

Copie el ensamblado personalizado en las carpetas de SQL Reporting Services

Realizar el ensamblado disponible en Diseñador de informes y el servidor de informes en Reporting Services. Para ello, debe copiar el archivo .dll en la carpeta del Diseñador de informes y en la carpeta del servidor de informes.

Nota: La ruta de acceso puede ser un poco diferente, dependiendo de la ruta de instalación.
  • Para Reporting Services 2005, copie el archivo .dll en las carpetas siguientes:
    • Programa de programa\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies
    • Programa de programa\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin
  • Para Reporting Services 2000, copie el archivo .dll en las carpetas siguientes:
    • Programa de programa\Microsoft SQL Server\80\Tools\Report Designer
    • Programa de programa\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin
Nota: Dado que se debe hacer esto cada vez que se cambia el código, puede ser un poco tediosa. Muchos desarrolladores crean archivos por lotes para controlar esta tarea. Aquí es un archivo por lotes de ejemplo que puede utilizar.
@ECHO OFFREM   Name: SRSDeploy.bat
REM
REM This batch files copies my custom assembly to my Reporting Services folders.
REM Run this from the directory where the customer assembly was compiled.
REM Be sure to close any applications that have your custom assembly open.
REM
REM This is the SQL Server 2005 version:
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin"

REM This is the SQL Server 2000 version:REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer"
REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin"

Normalmente controle esta tarea mediante la creación de un evento de generación posterior personalizado en mi proyecto. Para ello, vaya a las propiedades del proyecto. A continuación, haga clic en la ficha compilar y, a continuación, haga clic en Generar eventos. Se abrirá el cuadro de diálogo Eventos de generación . Elija la línea de comandos del evento de generación posteriory, a continuación, escriba lo siguiente:
Copiar "$(TargetPath)" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\"
Copiar "$(TargetPath)" "C:\Program Services\ReportServer\bin\ de Server\MSSQL.3\Reporting de SQL de programa\Microsoft"
Para especificar la ubicación de mi ensamblado utiliza una macro de generación posterior. Para obtener más información sobre cómo crear eventos de generación posterior, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):

Agregar una referencia al ensamblado personalizado en Reporting Services

Para agregar una referencia al ensamblado personalizado, abra el informe de Reporting Services en Report Designer. Para ello, siga estos pasos:
  1. Abra el informe que hará referencia el ensamblado personalizado.
  2. En el menú informe , haga clic en Propiedades del informe.
  3. En el cuadro de diálogo Propiedades del informe , haga clic en la ficha referencias .
  4. En las referencias, haga clic en el botón de puntos suspensivos (...) que está junto al encabezado de columna de nombre de ensamblado .



    Nota: La sección clases es sólo para miembros basados en instancias. No es para los miembros estáticos. Static (también denominado "compartido" en la parte de la documentación de Reporting Services) significa que el miembro está disponible para cada instancia de la clase y cada instancia utiliza la misma ubicación de almacenamiento. Los miembros estáticos se declaran mediante la palabra clave shared en Microsoft Visual Basic y la palabra clave static en C#. Esto puede resultar un poco confuso. Lo que esto significa es que si el ensamblado personalizado contiene a miembros de instancia debe tener acceso a, tendrá que especificar el nombre de clase y el nombre de la instancia en la sección clases . Porque el método que se va llamando desde Reporting Services se ha definido como static utilizando la palabra clave shared en Visual Basic, usaré la sección referencias en lugar de la sección de clases .
  5. En el cuadro de diálogo Agregar referencias , haga clic en Examinar. (En SQL Server 2005, haga clic en la ficha Examinar .)
  6. Busque y, a continuación, haga clic en el ensamblado personalizado. Haga clic en Abrir. (En SQL Server 2005, haga clic en Agregar en lugar de Abrir).
  7. En el cuadro de diálogo Agregar referencias , haga clic en Aceptar.
  8. En el cuadro de diálogo Propiedades del informe , haga clic en Aceptar.
Ahora estamos listos para utilizar el ensamblado personalizado en Reporting Services.
  1. Abra el informe (un archivo .rdl) en el Diseñador de informes.
  2. Para demostrar cómo se utiliza el ensamblado personalizado en Reporting Services, agregue un cuadro de texto. Para ello, arrastre un cuadro de texto en blanco del cuadro de herramientas al informe.
  3. En las propiedades del cuadro de texto, haga clic en la propiedad Value y, a continuación, llamar a una función utilizando la sintaxis siguiente.
    =ClassLibraryName.ClassName.MethodName or Namespace.ClassName.MethodName
    En mi ejemplo, especifiqué.
    =SimpleClassLibrary.Class1.DoSomething()
    Otros formatos se utilizan para hacer referencia a código en Reporting Services. Por ejemplo, utilice el siguiente formato si se llama a código incrustado.
    =Code.MethodName()
    Si se llama a un método no estático o basado en la instancia de un ensamblado personalizado mediante una instancia, utilice el formato siguiente.
    =Code.InstanceName.Method
    Nota: Habría configurado su referencia diferente si desea utilizar un método de instancia. Para ello, se necesita ir a Propiedades del informe, haga clic en la ficha referencias y a continuación, especifique el nombre de clase y el nombre de instancia en la sección clases .

Seguridad de acceso del código si el ensamblado personalizado requiere permisos adicionales

Si el ensamblado personalizado requiere más permisos que los permisos de nivel de ejecución predeterminado, debe realizar algunos cambios de seguridad de acceso a código. Si se produce un problema de permisos con la seguridad de acceso del código, probablemente verá "#Error" desde el ensamblado personalizado en lugar de los resultados esperados. Para unos pasos rápidos que se pueden realizar para determinar si se está produciendo este problema y para obtener instrucciones detalladas acerca de cómo conceder permisos adicionales al ensamblado personalizado, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
842419 cómo conceder permisos a un ensamblado personalizado que se hace referencia en un informe en Reporting Services

Nota: El siguiente enfoque es una prueba para determinar si se están produciendo problemas de seguridad de acceso a código. No se recomienda utilizar el siguiente enfoque porque otorga permisos de plena confianza al ensamblado personalizado.



Crear un nuevo grupo de códigos para el ensamblado personalizado y, a continuación, conceda permisos de plena confianza. Para ello, abra el archivo de programa de programa\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rssrvpolicy.config y, a continuación, agregue el código siguiente.
<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>

Recomendamos que cree un conjunto en lugar de asignar este conjunto de permisos para el grupo de código de permisos más específicos. Este artículo está prevista para poner en funcionamiento y en ejecución con ensamblados personalizados, y esto requiere más detalle.

Nota: Ensamblados personalizados suelen funcionan bien en Report Designer. Sin embargo, es posible que al implementar y, a continuación, intente ejecutar el ensamblado personalizado en el servidor de informes, los permisos de nivel de ejecución predeterminado son insuficientes. La razón de esto es, de forma predeterminada, el Diseñador de informes se ejecuta ensamblados personalizados con permisos "FullTrust". Sin embargo, al implementar los informes al servidor de informes, el permiso predeterminado que se concede en el servidor de informes se establece en el nivel de ejecución. Si se produce este problema, probablemente verá "#Error" en el control de informe en lugar de los resultados esperados desde el ensamblado personalizado.

Código incrustado

Código incrustado es código que se escribe en la sección de código del cuadro de diálogo Propiedades del informe . Código incrustado es una buena elección para código que se llamará varias veces en el informe. Si desea reutilizar el código en varios informes, un ensamblado personalizado es probablemente la mejor opción. Para crear una función incrustada, siga estos pasos:
  1. En el menú informe , haga clic en Propiedades del informe.
  2. En el cuadro de diálogo Propiedades del informe , haga clic en la ficha de código
  3. Agregue la siguiente función y, a continuación, haga clic en Aceptar.
    Public Function EmbeddedFunction() as String Return "this is from embedded code function"
    End Function

  4. En el informe, agregar un nuevo cuadro de texto.
  5. Agregue lo siguiente a la propiedad Value .
    =code.EmbeddedFunction
Me gustaría agradecer a John por su trabajo en este artículo. Ha detallada experiencia en SQL Server y varios idiomas de Microsoft Development y disfruta trabajando con los clientes y resolver problemas complejos. Espero que haya disfrutado el tema de este mes. Gracias por leer. Como siempre, no dude en enviar ideas sobre temas que desea dirigidos en futuras columnas o en Knowledge Base utilizando la solicite para el formulario.
Propiedades

Id. de artículo: 920769 - Última revisión: 9 ene. 2017 - Revisión: 1

Comentarios