Cómo agregar un botón para exportar datos de la tabla XFC a CSV
Dim strLabelText As String = "Hello this is a bunch of text to" &vbCr & "illustrate a point about text wrapping"
En un blog anterior, "Creación de un panel para mostrar tablas XFC", expliqué cómo crear un panel que mostrara el contenido de las tablas XFC de sus aplicaciones mediante un editor de tablas SQL. Esto se basó en la solicitud de un cliente. Tras ver el panel, el cliente quería exportar los datos de la tabla a un archivo CSV. Sí, es posible hacer clic derecho en un editor de tablas SQL y seleccionar "Exportar a CSV", lo que exportará los datos a un archivo CSV.
El problema con este enfoque es que, por razones de rendimiento, el Editor de Tablas SQL pagina los datos devueltos. Para conjuntos de datos grandes, puede haber muchas páginas de datos que solo se recuperan al navegar a ellas en el Editor de Tablas SQL. Al hacer clic derecho y exportar a CSV, solo se exportan los datos de la pestaña en la que se encuentra.
¿Qué ocurre si los usuarios desean exportar todo el contenido de la tabla que seleccionaron a un archivo CSV? Existe una solución, generalmente disponible en OneStream. Esto se puede lograr mediante un botón y un extensor de panel.
Paso 1. Agrega un botón a tu panel. En esta captura de pantalla, estoy agregando un botón a un panel que creé para un blog anterior.
Paso 2. Configure el botón para ejecutar un extensor de panel y pase el parámetro que contiene el nombre de la tabla seleccionada en el cuadro combinado, como un par de nombre y valor.
Paso 3. Cree un extensor de panel que consultará la base de datos de la aplicación para la tabla seleccionada, obtendrá todo el contenido de esa tabla, lo cargará en una tabla de datos y luego escribirá el contenido de esa tabla de datos en un archivo CSV en la base de datos de la aplicación, accesible a través del Explorador de archivos.
Los siguientes pasos se realizan todos dentro del Dashboard Extender que acaba de crear.
Paso 4. Cree una variable para almacenar el valor del nombre de la tabla seleccionada
'Obtener el nombre de la tabla seleccionada
Dim strTableName = args.NameValuePairs.XFGetValue("SelectedTable")
Paso 5. Necesitará una consulta SQL que utilice el nombre de la tabla seleccionada para devolver todo el contenido de la tabla seleccionada a una tabla de datos.
'Cree una consulta SQL que obtendrá todo el contenido de la tabla seleccionada
Dim sql As New System.Text.StringBuilder
sql.AppendLine($"
SELECT * FROM {strTableName}
")
'Return the SQL table and load the contents into a Data Table in memory
Dim dt As new DataTable()
Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDBConnInfo(si)
dt = BRApi.Database.ExecuteSql(dbConnApp, sql.ToString, False)
End Using
En este punto, tendrá una tabla de datos en memoria. El siguiente paso será escribir el contenido de esa tabla en un archivo CSV. El código que utilizo creará varios archivos CSV si hay más de un millón de registros en la tabla de datos. En este caso, esto se hizo porque los usuarios abrían el archivo CSV en Excel y necesitaba tener en cuenta las limitaciones de filas de Excel.
Paso 6. Defina el nombre del archivo CSV y la ruta del archivo. En este caso, uso el nombre de la tabla como nombre del archivo. Observe cómo defino la ruta del archivo con el nombre del usuario. La función si.UserName devuelve el nombre del usuario con un espacio entre el nombre y el apellido. Este espacio debe eliminarse, ya que la ruta del archivo de la base de datos de la aplicación no contiene ningún espacio.
'Crea las variables que definirán el nombre del archivo y la ruta de exportación
'Nota: La ruta del archivo de inicio incluye el nombre de usuario y elimina los espacios del nombre de usuario.
Dim strFileName As String = strTableName
Dim strFilePath As String = $"Documents/Users/{stringhelper.RemoveSystemCharacters(si.UserName,false,false)}"
Paso 7. Cree un objeto del Generador de Cadenas que contendrá el contenido de la Tabla de Datos. Este objeto se utilizará para crear el archivo CSV. A continuación, mediante la línea de anexión, agregue el registro de encabezado del archivo al Generador de Cadenas utilizando los Nombres de Columna de la Tabla de Datos. Esto es opcional, dependiendo de si desea o no el registro de encabezado en el archivo CSV.
'Objeto generador de cadenas que contendrá el contenido de la tabla de datos que se completó a partir de la consulta de tabla SQL
Dim fileAsString As New System.Text.StringBuilder
'Create the Header row for the export file based on the Column Names in the Data Table
fileAsString.AppendLine(String.Join(","dt.Columns.Cast(Of DataColumn).Select(Function(x) x.ColumnName)))
Paso 8. Ahora debe recorrer el contenido de la tabla de datos y agregarlo al generador de cadenas mediante el método de matriz de elementos de la tabla de datos. Agregue cada registro al generador de cadenas con una coma entre cada campo. La coma se debe a que estamos creando un archivo CSV, delimitado por comas.
'Recorrer todas las filas de la tabla de datos y agregarlas al objeto generador de cadenas
For Each dr As DataRow In dt.Rows
fileAsString.AppendLine(String.Join(",",dr.ItemArray()))
Paso 9. El último paso es escribir el contenido del Generador de Cadenas en la Base de Datos de la Aplicación, en la Carpeta de Usuarios. Tenga en cuenta que, en este ejemplo, la escritura se produce al alcanzar el final de la Tabla de Datos o al alcanzar un millón de registros (para gestionar el tamaño del archivo). La escritura utiliza brapi.filesystem.insertorupdateFile. Para usar esta función, el Generador de Cadenas debe convertirse a byte y luego pasarse a un objeto XFile.
'Verificar si se ha agregado un millón de registros al objeto generador de cadenas
'o si se ha alcanzado el final de la tabla de datos
'En cualquier caso, el objeto generador de cadenas se escribe en la carpeta de archivos de la aplicación mediante brapi.FileSystem.InserOrUpdateFile
'Si la tabla de datos contiene más de un millón de registros, el proceso crea archivos CSV separados para cada grupo de un millón
If (intY + 1) Mod 1000000 = 0 Or intY = dt.Rows.Count = 1 Then
Dim fileAsByte() As Byte = Sytem.Text.Encoding.Unicode.GetBytes(fileAsString.ToString)
Dim xfFileDataInfo As New XFFileInfor(fileSystemLocation.ApplicationDatabase,$"{strFileName}{intWriteCount}.csv",strFilePath)
Dim xFFileData As New XFFile(xfFileDataInfo,String.Empty,fileAsByte)
brapi.FileSystem.InsertOrUpdateFile(si,XfFileData)
intWriteCount = intWriteCount + 1
FileAsString.AppendLine(String.Join(",",dt.Columns.Cast(Of DataColumn).Select(Function(x) x.ColumnName)))
End If
intY = intY + 1
El código en su totalidad.
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 el nombre de la tabla seleccionada
Dim strTableName = args.NameValuePairs.XFGetValue("SelectedTable")
'Cree una consulta SQL que obtendrá todo el contenido de la tabla seleccionada
Dim sql As New System.Text.StringBuilder
sql.AppendLine($"
SELECT * FROM {strTableName}
")
'Devuelve la tabla SQL y carga el contenido en una tabla de datos en la memoria
Dim dt As new DataTable()
Using dbConnApp As DbConnInfo = BRApi.Database.CreateApplicationDBConnInfo(si)
dt = BRApi.Database.ExecuteSql(dbConnApp, sql.ToString, False)
End Using
'Cree las variables que definirán el nombre del archivo de exportación y la ruta
'Nota: La ruta del archivo de inicio incluye el nombre de usuario y elimina los espacios del nombre de usuario.
Dim strFileName As String = strTableName
Dim strFilePath As String = $"Documents/Users/{stringhelper.RemoveSystemCharacters(si.UserName,false,false)}"
'Objeto generador de cadenas que contendrá el contenido de la tabla de datos que se completó a partir de la consulta de tabla SQL
Dim fileAsString As New System.Text.StringBuilder
'Cree la fila de encabezado para el archivo de exportación según los nombres de columna en la tabla de dato
fileAsString.AppendLine(String.Join(","dt.Columns.Cast(Of DataColumn).Select(Function(x) x.ColumnName)))
Dim intWriteCount As Integer = 1
Dim intY As Integer = 0
For Each dr As DataRow In dt.Rows
fileAsString.AppendLine(String.Join(",",dr.ItemArray()))
'Comprueba si se ha añadido un millón de registros al objeto generador de cadenas.
'O si se ha alcanzado el final de la tabla de datos.
'En cualquier caso, el objeto generador de cadenas se escribe en la carpeta de archivos de la aplicación mediante brapi.FileSystem.InserOrUpdateFile.
'Si la tabla de datos contiene más de un millón de registros, el proceso crea archivos CSV separados para cada grupo de un millón.
If (intY + 1) Mod 1000000 = 0 Or intY = dt.Rows.Count = 1 Then
Dim fileAsByte() As Byte = Sytem.Text.Encoding.Unicode.GetBytes(fileAsString.ToString)
Dim xfFileDataInfo As New XFFileInfor(fileSystemLocation.ApplicationDatabase,$"{strFileName}{intWriteCount}.csv",strFilePath)
Dim xFFileData As New XFFile(xfFileDataInfo,String.Empty,fileAsByte)
brapi.FileSystem.InsertOrUpdateFile(si,XfFileData)
intWriteCount = intWriteCount + 1
FileAsString.AppendLine(String.Join(",",dt.Columns.Cast(Of DataColumn).Select(Function(x) x.ColumnName)))
End If
intY = intY + 1
Next
Ahora, al hacer clic en el botón del panel, se ejecuta la extensión del panel y crea un archivo CSV en la carpeta de la base de datos de la aplicación, dentro de la carpeta Usuarios. Si el usuario selecciona el archivo y hace clic en el botón de descarga (en el Explorador de archivos), este se descargará en su escritorio local.
Socio Destacado
OneStream se alinea con las necesidades de su negocio y cambia más rápida y fácilmente que cualquier otro producto al ofrecer una plataforma y un modelo para todas las soluciones financieras de CPM. OneStream emplea guiado Flujos de trabajo, validaciones y mapeo flexible para brindar confianza en la calidad de los datos para todas las recopilaciones y análisis al tiempo que se reduce el riesgo a lo largo de todo el proceso financiero auditable.
Nuestra compañía
El personal senior de MindStream Analytics estuvo presente en el nacimiento de Business Intelligence. Hemos sido parte de la construcción de Business Intelligence a nivel nacional desde su humilde estado de producto de nicho hasta el ubicuo herramienta analítica que es hoy. Los consultores de MindStream están bien versados en informes y gestión de información y están listos para ayudarlo a aprovechar el poder de múltiples proveedores de nivel 1. Desde Oracle Hyperion a IBM Cognos, podemos ayudarlo a seleccionar e integrar las herramientas adecuadas para comprender mejor su información. MindStream Analytics tiene experiencia en una amplia variedad de industrias: servicios comerciales, Productos de Consumo, Energía, Servicios Financieros, Salud, Manufactura, Transporte y Telecomunicaciones. Tenemos la profundidad y la amplitud de la experiencia para ayudarlo a brindar información procesable a los usuarios
Ya sea que necesite una implementación de Oracle BI Enterprise Edition (OBIEE) para toda la empresa, una implementación de Oracle BI Apps o una implementación de IBM Cognos ReportNet, MindStream Analytics está aquí para ayudarlo a tener éxito.
Estudios de caso
Accumen
Gracias a la intervención de MindStream Analytics, el departamento de Finanzas de Accumen ahora puede modelar su negocio con una estructura nueva y más organizada que no está disponible convencionalmente en NetSuite.
Acme Brick
Acme Brick recurrió a MindStream Analytics en busca de ayuda para implementar OneStream para reemplazar su obsoleta solución TM1.
Alterra
Alterra buscó la experiencia de MindStream para abordar los desafíos que enfrentaron en su proceso de planificación de capital.
ATCO Group
El conglomerado energético ATCO opera en todo el mundo en servicios públicos, generación de energía y servicios relacionados.
Avalon
Al trabajar con MindStream Analytics, Avalon Healthcare Solutions adopta NetSuite Planning and Budgeting para acelerar los procesos de presupuestación y previsión.
Bayer Health Care
Bayer Healthcare implementó Hyperion Planning y Workforce Planning en 10 semanas para optimizar drásticamente su presupuesto de declaración de ingresos y su proceso de planificación de la fuerza laboral.
BluEarth
La asociación de MindStream Analytics con BluEarth Renewables personifica el poder de la tecnología y la colaboración.
Celgene
Una actualización de planificación de Oracle Hyperion proporciona optimización y estabilización de la aplicación Hyperion de organizaciones multinacionales.
Cleaver Brooks
Se eligió OneStream XF como la plataforma que transformaría los procesos financieros de Cleaver-Brooks.
CoorsTek
La colaboración entre CoorsTek y MindStream dio como resultado mejoras significativas en los procesos de informes y consolidación financiera de CoorsTek.
Elite Body Sculpture
La colaboración de MindStream Analytics con Elite Body Sculpture resume el potencial transformador de las soluciones tecnológicas específicas para agilizar los procesos administrativos.
Enlyte
Enlyte, una fusión de Mitchell, Genex y Coventry, enfrentó desafíos con soluciones financieras dispares y la necesidad de informes combinados.
Flanders
MindStream Analytics colaboró con Flanders para implementar la solución OneStream Consolidation and Reporting.
Productos Foley
Foley Products se enfrentaba a un desafío importante con su sistema de informes de gestión real basado en Excel.
Harte Hanks
La colaboración entre MindStream Analytics y Harte Hanks culminó en una implementación de NetSuite altamente personalizada y fácil de usar.
Interface
La interfaz utilizó un proceso de FP&A complejo, manual y basado en Excel para la revisión mensual, y los datos resumidos se cargaron en OneStream.
Kymera Internacional
Gracias a la asistencia de Mindstream Analytics, Kymera pudo cargar todos sus datos en OneStream y validarlos exitosamente.
MacLean Fogg
MacLean-Fogg se asoció con MindStream, un implementador líder que se especializa en modernizar y optimizar sistemas empresariales.
MEPPI
Se buscaron los conocimientos y la experiencia de MindStream para llevar a cabo una iniciativa de selección de proveedores centrada en el proceso de planificación F2023 de MEPPI.
OUAI
La colaboración de MindStream Analytics y OUAI muestra el poder transformador de la intervención tecnológica estratégica.
Plaskolite
Al migrar a OneStream, Plaskolite logró una reducción sustancial en el tiempo de consolidación y el ciclo general de cierre financiero, eliminó las horas dedicadas a compilar y verificar datos en Excel, agilizó su modelo de planificación, presupuestación y previsión y entregó informes flexibles y oportunos que permiten un análisis más estratégico de sus datos financieros.
Redwire
Al comprender los matices de los desafíos de Redwire, MindStream Analytics ideó un enfoque holístico para superarlos. La implementación de NetSuite fue sólo el comienzo.
Simon
La aplicación de producción corporativa Hyperion Financial Management (HFM) existente de Simon se estaba consolidando a un ritmo de siete horas, un problema de rendimiento que causaba un gran dolor de cabeza a la contabilidad corporativa.
Source Code
La transición exitosa a OneStream revolucionó los informes financieros de Source Code.
Subway
Subway colaboró con MindStream Analytics para la implementación de NetSuite Analytics Warehouse.
UPenn
Los miembros del equipo de MindStream Consulting y AppCare están orgullosos de trabajar codo con codo con la Universidad de UPenn para lograr esta implementación y continuar con nuestros servicios de AppCare después de su puesta en marcha.
USG
USG era un cliente de Oracle Hyperion y se dio cuenta de que necesitaba soporte más especializado para sus diversas aplicaciones de Oracle Hyperion.
Vantiv
¿Dividir una aplicación de planificación de Hyperion y ampliar la huella de Hyperion para pronosticar el negocio? Categorías de clientes.
Versant Health
Versant Health contrató a MindStream para ayudar a resolver los desafíos que estaban experimentando con sus procesos de consolidación, cierre e informes financieros.
Virginia Space Authority
El equipo de MindStream implementó Standard + Workforce NetSuite Planning & Budgeting.
WeWork
MindStream Analytics determinó que la mejor solución era implementar Oracle Essbase Cloud como parte de la plataforma como servicio Oracle Analytics Cloud (OAC).
WindStream
Uso innovador de essbase para optimizar y conectar la gestión financiera de Hyperion para mejorar el análisis financiero.
XY Planning
MindStream Analytics, experto en abordar estos desafíos, presentó una solución integral de Netsuite para XY Planning.