A veces enfrento situaciones cuando tengo que configurar informes web a otra fuente de datos. Esta necesidad puede aparecer si el desarrollo del informe se ha realizado con el uso de una base de datos demo o cuando la base de datos ya tiene otro lugar. O quizás, al contrario, tengo que conectar un finrome a un conjunto de datos de test. De todas formas, la posibilidad de configurar la cadena de conexión es muy útil. Y hacerlo en FastReport .Net es muy fácil. Voy a explicárselo.
Vamos a tomar algunas aplicaciones ASP.Net Core en un ejemplo. Le recuerdo que nuestro objetivo es pasar una cadena de conexión a un informe desde el servidor del cliente. Se lo puede implementar de las dos siguientes maneras: pasar un parámetro a un informe y en el script del informe restablecer la cadena de conexión o restablecer la cadena de conexión directamente en el controlador de un informe web. La segunda es más racional, por lo cual es esta que voy a demostrarle.
En el controlador vamos a utilizar el método Index. Precisamente en este creamos un objeto de informe y establecemos una nueva cadena de conexión. Por lo tanto, el método tomará un parámetro, cadena de conexión.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class HomeController : Controller { public IActionResult Index(string connstring) { WebReport webReport = new WebReport(); if (connstring is null) { webReport.Report.Load("reports/Empty.frx"); } else { webReport.Report.Load("reports/Master-Detail.frx"); webReport.Report.Dictionary.Connections[0].ConnectionString = connstring; } ViewBag.WebReport = webReport; return View(); } } |
El método Index toma el parámetro connstring que desde el principio (al arrancar) equivale null. Para que el objeto del informe web no tenga errores al mostrar la pagína, hay que cargar en él un modelo de informe. Ya que no sabemos la cadena de conexión, dejemos que sea un modelo en blanco. Si la cadena de conexión está establecida, cargamos el modelo de informe que necesitamos y restablecemos en él la cadena de conexión. Todo es muy fácil.
Si el modelo de informe desde el principio no tiene conexión a una fuente de datos, podemos añadirla. Aquí tiene un ejemplo de cómo conectarse a un SGBD MSSQL:
1 2 3 4 5 6 |
RegisteredObjects.AddConnection(typeof(MsSqlDataConnection)); MsSqlDataConnection sqlConnection = new MsSqlDataConnection(); sqlConnection.ConnectionString = connstring; sqlConnection.CreateAllTables(); webReport.Report.Dictionary.Connections.Add(sqlConnection); webReport.Report.Load("reports/CoreMSSQL.frx"); |
El método Index debe tener una representación correspondiente. Vamos a añadir a él el siguiente código::
Aquí hemos utilizado un formulario que hace referencia al método Index. En esta hay un campo de texto con el nombre connstring y un botón. El contenido del campo de texto se pasa al método como parámetro.
Y ahora echemos un vistazo a lo que tenemos:
Al principio la cadena de conexión no está establecida, por lo tanto se ha cargado un modelo de informe en blanco. Introducimos la cadena de conexión para la base de datos XML:
«XsdFile=;XmlFile=C:\\Users\\Dimon\\source\\repos\\PassConnectionstring\\PassConnectionstring\\reports\\nwind.xml»
Y aquí tenemos el informe:
De este modo siempre puede econtrar una solución cuando el informe no puede conectarse a la fuente de datospor su indisponibilidad..