GrialAttach
De GrialWIKI
(→Traer Datos (preparar la Transacción)) |
|||
Línea 25: | Línea 25: | ||
Donde se indica 1) La tabla TRONCAL y el ID del registro al cual se han de adjuntar los archivos. Con esta información el GrialAttach prepara un query de consulta sobre la tabla SYS_FUNC_30 donde se encuentra la información de todos los adjuntos. | Donde se indica 1) La tabla TRONCAL y el ID del registro al cual se han de adjuntar los archivos. Con esta información el GrialAttach prepara un query de consulta sobre la tabla SYS_FUNC_30 donde se encuentra la información de todos los adjuntos. | ||
- | Luego ha de incluirse el GrialAttach en la carga de datos como se haría con cualquier GrialQuery o Control Registrado, por Ejemplo: | + | Luego ha de incluirse el GrialAttach en la carga de datos como se haría con cualquier [[GrialQuery]] o Control Registrado, por Ejemplo: |
GrialCont.LoadData SysFunc20grq, SysFunc21grq, SysFunc21_scb, GrialAttach''' | GrialCont.LoadData SysFunc20grq, SysFunc21grq, SysFunc21_scb, GrialAttach''' |
Revisión de 04:17 29 sep 2009
Introducción al Framework Grial |
|
El GrialAttach permite relacionar archivos con cualquier registro de cualquier tabla troncal del sistema. Y posteriormente adjuntar, almacenar y recuperar estos archivos desde el servidor.
Contenido |
Forma de Uso
Inicializacion
En el UserDocument_Show llamar a:
GrialAttach.Initialize GrialCont, "CORREO"
Donde el string “CORREO” representa el path para el almacenamiento de los archivos. El String no es arbitrario, debe estar configurado en la tabla SYS_FUNC_28_TAB_PATHS_STORAGE, campo SYSFUNC28_RELPATH
Traer Datos (preparar la Transacción)
En el momento de preparar la transacción llamar a :
GrialAttach.SetFilters "SYS_FUNC_20", IDSysFunc20
Donde se indica 1) La tabla TRONCAL y el ID del registro al cual se han de adjuntar los archivos. Con esta información el GrialAttach prepara un query de consulta sobre la tabla SYS_FUNC_30 donde se encuentra la información de todos los adjuntos.
Luego ha de incluirse el GrialAttach en la carga de datos como se haría con cualquier GrialQuery o Control Registrado, por Ejemplo:
GrialCont.LoadData SysFunc20grq, SysFunc21grq, SysFunc21_scb, GrialAttach
Luego de la carga es posible limitar las acciones que el usuario puede realizar, por ejemplo:
With GrialAttach .AllowAddNew = Not ModoConsulta .AllowDelete = Not ModoConsulta .AllowUpdate = Not ModoConsulta End With
BottomButton_Click ACEPTAR, Incorporar en la Transacción
En el momento de grabar la transacción llamar a: GrialAttach.AppendToTransaction, como un detalle de la cabecera a la cual los archivos se adjuntan:
Txn.Add SF20Grq.Rst, “Name=SF02:ID_SYSFUNC20” Txn.Add SF21Grq.Rst, “ID_SYSFUNC21;RELA_SYSFUNC20” GrialAttach.AppendToTransaction Txn, "SF20"
Mediante esta llamada el GrialAttach incorpora a la transacción el registro de la SYS_FUNC_30 con los cambios que haya realizado el usuario. El parámetro “SF20” es el NOMBRE DEL ITEM en la transacción que contiene el registro al cual se adjuntan los archivos. Estos es necesario ya que la tabla SYS_FUNC_30 posee un RELA al ID del registro cabecera, que puede ser un alta. En el ejemplo dado, el GrialAttach agregará internamente:
Txn.AddItem SYSFUNC30.Rst, “Header=SF20:ID_SYSFUNC30, RELA_TRONCAL”
GRABAR los Datos (GrialCont.Apply Txn)
GrialCont.Apply Txn If GrialCont.LastButton = BUTTON_NEW Then IDSysFunc20 = SqlArea.NewIDValue End If
En el momento de grabar la transacción se grabará únicamente la información de los archivos adjuntos, pero aún estos archivos no han sido enviados al servidor.
ENVIAR finalmente los archivos al Servidor
Luego de grabar la transacción se procederá a enviar los archivos al servidor mediante la función StoreFiles. Se debe pasar como parámetro el ID del registro o el Nuevo ID en caso de alta (para recuperar la lista de adjuntos pendientes)
If GrialCont.LastButton = BUTTON_NEW Then IDSysFunc20 = SqlArea.NewIDValue End If 'almaceno attachments en el servidor GrialAttach.StoreFiles IDSysFunc20
En este proceso se envían los archivos nuevos y se eliminan del servidor los que se hayan eliminado. La tabla SYS_FUNC_30 posee un campo SYSFUCN30_PENDIENTE que indica que archivos serán procesados.
En caso de algún error en la transferencia (el archivo ahora no existe por ejemplo), el campo SYSFUCN30_PENDIENTE quedara con un valor diferente de cero. En caso de error, GrialAttach.StoreFiles le mostrará el error al usuario y retornará FALSE. GrialAttach.StoreFiles NO RAISEA UN ERROR, dado que la transacción (con otros datos que el modulo maneje) ya ha sido aplicada correctamente.
Métodos Adicionales
Adjuntos Específicos, por ejemplo, Foto de un Legajo
Ubicar
Luego de cargar los datos, se puede buscar una adjunto mediante un codigo especifico, recuperarlo y mostrarlo (una imagen en este ejemplo)
'Pongo la foto si esta adjunta img_foto = LoadPicture("") 'clear LbFileName = "" With GrialAttach If .SelectAttachment("FOTOPPAL") Then LbFileName = .SelectedAttachmentInfo Dim TempFile As String If .GetSelectedAttachmentFile(TempFile) Then On Error Resume Next img_foto = LoadPicture(TempFile) End If End If End With
El Método SelectAttachment selecciona uno de los adjuntos presentes, como parámetro se puede pasar un ID_SYSFUNC30 o un string, para el campo SYSFUNC30_COD [string(10)]
La función SelectedAttachmentInfo devuelve un string descriptivo con la descripción del adjunto, el nombre del archive original y el tamaño del archivo en KB. Es útil para mostrar en un label la información del archivo adjunto.
La función GetSelectedAttachmentFile(TempFileName) recupera el archivo seleccionado del servidor y retorna el path completo local donde se grabó el archive recuperado en el parámetro TempFileName. Si no puede recuperar el archive retorna FALSE.
Crear
Para adjuntar un archivo con un codigo específico (“FOTOPPAL” en el ejemplo) se debe colocar un botón específico en el modulo y llamar a: GrialAttach.StartAttachByCode
Ejemplo:
Private Sub AdjuntarFotoCmd_Click() On Error GoTo ErrH If Not GrialAttach.StartAttachByCode("FOTOPPAL", “Foto Principal”) then Rem EL USUARIO CANCELO (No selecciono el archivo por ejemplo) End If Exit sub ErrH: MsgError GrialCont End Sub
La función StartAttachByCode inicial el proceso de adjuntar un Nuevo archivo si no encuentra el código en la lista o inicia el proceso de reemplazar un adjunto si el código ya existiera. Retorna FALSE si el usuario cancela el proceso. En caso seleccionar un archivo exitosamente, se dispara el evento GrialAttach_FileAttached. En este evento se debe codificar la carga en pantalla o muestra de los archivos de ser necesario. Por ejemplo:
Private Sub GrialAttach_FileAttached() With GrialAttach If .SelectedAttachment_Value("SYSFUNC30_COD") = "FOTOPPAL" Then 'si est adjuntando la foto LbFileName = .SelectedAttachmentInfo img_foto = LoadPicture(.SelectedFileName) End If End With End Sub
La Function SelectedAttachment_Value retorna el valor de cualquiera de los campos del registro de la SYS_FUNC_30 actualmente seleccionado en la lista de adjuntos. En este caso se usa para confirmar que el adjunto sea el del código específico (en este caso la foto principal)
Eliminar
Por ultimo, si se desea incluir un botón para remover un adjunto específico se debe utilizar el metodo DeleteAttachment luego de ubicar el adjunto especifico mediante SelectAttachment. Por Ejemplo:
Private Sub RemoverFotoCmd _Click() With GrialAttach If .SelectAttachment("FOTOPPAL") Then .DeleteAttachment img_foto.Picture = LoadPicture("") LbFileName = ”” End If End With
Cache de Descargas
Cada vez que se descarga un archivo, el control guarda el nombre del archivo temporal descargado en un campo del recordset llamado “LOCAL_FILE”. Mientras el campo .SelectedAttachment_value(“LOCAL_FILE”) tenga valor, la función GetSelectedAttachmentFile devolverá ese archivo sin ir a buscarlo nuevamente al servidor. El campo “LOCAL_FILE” se limpia con cada carga del control GrialAttach (GrialCont.LoadData GrialAttach)
Descargar Todos los Archivos
Para descargar todos los archivos adjuntos, se puede llamar a la function GetAllFiles que devuelve el número de archivos descargados correctamente. Ejemplo:
' Me bajo todos los archivos adjuntos GrialAttach.GetAllFiles
Filtros para seleccionar un tipo de archivo
Si se desea filtrar por tipo los archivos que el usuario ve al adjuntar, puede utilizar el método AddFileFilter. Este método va adicionando filtros a la variable string: FileFilters. Para restaurar el valor default: All Files (*.*) puede poner FileFilters = “”
Adjuntar un archivo manualmente
Ejemplo:
Dim FSize As Long FSize = (FileLen(SelectedFileName) + 1023) \ 1024 ' calculo filesize SF30DEscri = "foto de xxxx" SelectedFileName = “C:\FotoASubir.jpg” SF30Cod = “FOTO” 'Agrego adjunto GrialAttach.AddNew SF30Descri, SelectedFileName, FSize, SF30Cod, 1
Donde:
- SF30DEscri
- es la descripcion, por ejemplo: "foto de xxxx"
- SelectedFileName
- es el path al archivo local
- SF30Cod
- es un harcode para diferenciar el adjunto de otros adjuntos al mismo registro, por ejemplo: "FOTO"