Saltar al contenido

Consejos para Trabajar con Columnas Binarias

Por el bien del rendimiento con App Builder en las aplicaciones, solo agregue una columna binaria a un objeto comercial si va a utilizar esa columna en un control de archivo. Si está creando un objeto comercial con una tabla que incluye columnas binarias, no seleccione el botón Todos para agregar todas las columnas a menos que ese objeto se vaya a utilizar para mostrar un control de archivo en un panel. Vale la pena crear objetos comerciales específicamente para utilizarlos en paneles donde se carga o descarga un archivo. Además, considere si es posible que haya agregado uno a una tabla de usuario/parámetro y podría haberlo agregado a otros objetos comerciales y luego haber seleccionado todas las columnas.

Si tiene un panel de varias filas (MRP) con 25 registros que se devuelven y hay un campo binario seleccionado en el objeto comercial detrás de ese panel, recuperará los 25 archivos cada vez que se represente ese panel. Si tiene 4 archivos binarios en ese objeto comercial, recuperará 100 archivos cada vez que se represente ese panel.

Si desea que un archivo se pueda descargar desde un MRP, considere llamar al botón de descarga en una página oculta para que no recupere el archivo como parte de la representación del panel MRP.

A continuación se muestra una consultar que puede ejecutar en su servidor y que encontrará ALGUNOS de los archivos en un objeto comercial detrás de un panel donde el archivo no se usa en un control:

SELECT        TOP (100) PERCENT Ui_Control_1.Name AS Page, dbo.Ui_Control.Name AS Panel, dbo.Db_Table.Name AS DataObjectName, dbo.Db_Column.Name AS ColumnName
FROM            dbo.Ui_Control INNER JOIN
                         dbo.Ui_Control AS Ui_Control_1 ON dbo.Ui_Control.RootControlId = Ui_Control_1.ControlId INNER JOIN
                         dbo.Db_Table ON dbo.Ui_Control.SourceTableId = dbo.Db_Table.TableId INNER JOIN
                         dbo.Db_Column ON dbo.Db_Table.TableId = dbo.Db_Column.TableId INNER JOIN
                         dbo.Db_Column AS Db_Column_1 ON dbo.Db_Column.TargetColumnId = Db_Column_1.ColumnId INNER JOIN
                         dbo.Db_StorageDataType ON Db_Column_1.StorageDataTypeId = dbo.Db_StorageDataType.StorageDataTypeId LEFT OUTER JOIN
                         dbo.Ui_Control AS Ui_Control_2 ON dbo.Ui_Control.ControlId = Ui_Control_2.PanelControlId AND dbo.Db_Column.ColumnId = Ui_Control_2.SourceColumnId
WHERE        (dbo.Ui_Control.ControlTypeId = '81d20b00-15b2-f8c3-7fe1-d889d9c7e95f') AND (dbo.Db_StorageDataType.Name = N'binary') AND (Ui_Control_2.ControlId IS NULL)
ORDER BY DataObjectName

Nota

Al recuperar los resultados del objeto comercial detrás de un panel, solo recuperará las columnas que se necesitan para los controles, A MENOS QUE esté usando formato condicional, en cuyo caso recuperará todas las columnas para la lógica condicional.