Agregar un botón para exportar datos de tablas XFC a CSV
Dim strLabelText As String = "Hola, este es un montón de texto para" & vbCr & "ilustrar un punto sobre el ajuste de texto"
En un blog anterior, “Creación de un dashboard para mostrar tablas XFC”, expliqué cómo crear un dashboard que muestre el contenido de las tablas XFC de su aplicación usando un SQL Table Editor. Esto se basaba en una solicitud de un cliente para que los administradores de la aplicación pudieran ver rápidamente esas tablas desde un grupo de dashboards que ya utilizaban.
El inconveniente de este enfoque es que un SQL Table Editor, por razones de rendimiento, pagina los datos que devuelve. Para conjuntos de datos grandes puede haber muchas páginas de datos que solo se recuperan cuando el usuario navega hasta esa página.
Entonces, ¿qué pasa si sus usuarios quieren exportar el contenido completo de la tabla seleccionada a un archivo CSV? Hay una solución, como suele ocurrir en OneStream. Esto puede lograrse mediante un botón y una Dashboard Extender Rule.
Paso 2. Configure el botón para ejecutar un Dashboard Extender, pasando como par nombre-valor el parámetro que contiene el nombre de la tabla seleccionada en la Combo Box.
Paso 3. Cree un Dashboard Extender que consulte la base de datos de la aplicación para la tabla seleccionada, obtenga todo su contenido, lo cargue en un Data Table y luego escriba ese contenido en un archivo CSV.
'Obtener el nombre de la tabla seleccionada
Dim strTableName = args.NameValuePairs.XFGetValue("SelectedTable")
Paso 5. Necesitará una consulta SQL que use el nombre de la tabla seleccionada para devolver todo su contenido a un Data Table.
'Crear consulta SQL que obtendrá todo el contenido de la tabla seleccionada
Dim sql As New System.Text.StringBuilder
sql.AppendLine($"
SELECT * FROM {strTableName}
")
'Retornar la consulta SQL
En este punto ya tendrá un Data Table en memoria. El siguiente paso será escribir el contenido de ese Data Table en un archivo CSV. El código que utilizo creará múltiples archivos CSV si hay más de un millón de filas para evitar archivos excesivamente grandes.
'Crear las variables que definirán el nombre y la ruta del archivo de exportación
'Tenga en cuenta que la ruta incluye el nombre del usuario y elimina espacios
Dim strFileName As String = strTableName
Dim strFilePath As String = $"Documents/Users/{StringHelper.RemoveWhiteSpace(si.UserName, False)}"
Paso 7. Cree un objeto String Builder que contendrá el contenido del Data Table. Ese objeto se usará para crear el archivo CSV. Luego, usando AppendLine, agregue el registro de encabezado del archivo al String Builder.
'Objeto String Builder que contendrá el contenido del Data Table poblado por la consulta SQL Table
Dim fileAsString As New System.Text.StringBuilder
'Crear la fila de encabezado para el archivo de exportación según los nombres de las columnas
fileAsString.AppendLine(String.Join(",", dt.Columns.Cast(Of DataColumn).Select(Function(col) col.ColumnName)))
Paso 8. Ahora debe recorrer el contenido del Data Table y agregarlo al String Builder usando el método ItemArray del Data Table. Al anexar cada registro con una nueva línea, irá formando el archivo CSV completo.
'Recorrer todas las filas del Data Table, anexándolas al String Builder
For Each dr As DataRow In dt.Rows
fileAsString.AppendLine(String.Join(",", dr.ItemArray()))
Paso 9. El paso final es escribir el contenido del String Builder en la base de datos de la aplicación, dentro de la carpeta Users. En este ejemplo, la escritura ocurre cuando se ha agregado un millón de registros al String Builder o cuando se ha alcanzado el final del Data Table.
'Comprobar si se ha agregado un millón de registros al String Builder
'O si se ha alcanzado el final del Data Table
'En cualquiera de los dos casos, el String Builder se escribe en el Application File System
El código completo
Public Function Export_XFC_Table_Data(ByVal si As SessionInfo, ByVal globals As BRGlobals, ByVal api As Object, ByVal args As DashboardExtenderArgs) as Object
Try
'Obtener nombre de la tabla seleccionada
Dim strTableName = args.NameValuePairs.XFGetValue("SelectedTable")
'... código completo del exportador XFC ...
Catch ex As Exception
Throw ErrorHandler.LogWrite(si, New XFException(si, ex))
End Try
End Function
Ahora, cuando se hace clic en el botón del dashboard, se ejecuta el dashboard extender y se crea un archivo CSV en la carpeta Application Database, dentro de la carpeta Users. Si el usuario luego selecciona el archivo y hace clic en descargar, tendrá una exportación completa de la tabla.
Contacto
MindStream Analytics
¿Quiere saber más sobre OneStream Software? Los consultores de MindStream Analytics están aquí para ayudarle a llevar sus consolidaciones y reportes al siguiente nivel.
