GrialFileStorage

De GrialWIKI

(Diferencias entre revisiones)
(Paso 4) Incorporar en BottomButton_Click BUTTON_CANCEL)
(Métodos Adicionales)
Línea 98: Línea 98:
===Adjuntos Específicos, por ejemplo, Foto de un Legajo===
===Adjuntos Específicos, por ejemplo, Foto de un Legajo===
-
 
-
====Ubicar y mostrar un adjunto especifico====
 
-
 
-
Luego de cargar los datos, se puede buscar una adjunto mediante un codigo especifico, recuperarlo y mostrarlo (una imagen en este ejemplo)
 
-
 
-
<code>
 
-
'Muestro la foto si esta adjunta
 
-
img_foto = LoadPicture("") 'clear
 
-
LbFileName = ""
 
-
With GrialFileStorage
 
-
  If .SelectAttachment("FOTOPPAL") Then
 
-
      LbFileName = .SelectedAttachmentInfo 'Muestro info del adjunto
 
-
      Dim TempFile As String
 
-
      If .GetSelectedAttachmentFile(TempFile) Then 'Descargo el archivo
 
-
          On Error Resume Next
 
-
          img_foto = LoadPicture(TempFile)
 
-
      End If
 
-
    End If
 
-
End With
 
-
</Code>
 
-
 
-
El Método''' SelectAttachment '''selecciona uno de los adjuntos presentes, como parámetro se puede pasar un ID_SYSFUNC30 específico o un string para buscar (usando el campo SYSFUNC30_COD [string(10)])
 
-
 
-
La función '''SelectedAttachmentInfo '''devuelve un string descriptivo con la descripción del adjunto, el nombre del archivo 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 archivo recuperado en el parámetro '''TempFileName'''. Si no puede recuperar el archivo la función retorna FALSE.
 
====Crear un adjunto con un código específico====
====Crear un adjunto con un código específico====
-
Para adjuntar un archivo con un codigo específico (“FOTOPPAL” en el ejemplo) se debe colocar un botón en el modulo y llamar a: '''GrialFileStorage.StartAttachByCode'''
+
Para adjuntar un archivo con un codigo específico (“FOTO” en el ejemplo) se debe usar la función '''GrialFileStorage.StartAttachByCode'''
Ejemplo:
Ejemplo:
Línea 133: Línea 107:
  Private Sub AdjuntarFotoCmd_Click()
  Private Sub AdjuntarFotoCmd_Click()
  On Error GoTo ErrH  
  On Error GoTo ErrH  
-
  'Inicio un adjunto, con codigo "FOTOPPAL"
+
  'Inicio un adjunto, con codigo "FOTO"
-
  If Not GrialFileStorage.StartAttachByCode("FOTOPPAL", “Foto Principal”) then  
+
  If GrialFileStorage.StartAttachByCode("FOTO", “Foto Principal”) then  
-
         Rem EL USUARIO CANCELO (No selecciono el archivo por ejemplo)
+
         Rem OK, EL USUARIO selecciono un archivo y los adjuntó con el código "FOTO"
  End If
  End If
  Exit sub
  Exit sub
Línea 143: Línea 117:
</code>
</code>
-
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.  
+
La función '''StartAttachByCode '''inicial el proceso de adjuntar un Nuevo archivo.
 +
Se ya se encuentra el código en la lista, al mismo momento de adjuntar el nuevo archivo, el archivo anterior pasa a tener ''Fecha de Baja'' y pasará al histórico de adjuntos para este registro.
El código siempre es único en la lista de adjuntos.
El código siempre es único en la lista de adjuntos.
Línea 149: Línea 124:
La función retorna FALSE si el usuario cancela el proceso.
La función retorna FALSE si el usuario cancela el proceso.
 +
====Ubicar y mostrar un adjunto especifico====
-
En caso seleccionar un archivo exitosamente, se dispara el evento '''GrialFileStorage_FileAttached. '''
+
Luego de cargar los datos, se puede buscar una adjunto mediante un código especifico, recuperarlo y mostrarlo
-
Este evento se puede utilizar para mostrar en pantalla el archivo adjunto, por ejemplo, si fuera una imagen.
+
 
-
Por ejemplo:
+
'''Caso 1 - Imágenes'''
<code>
<code>
-
  Private Sub GrialFileStorage_FileAttached()
+
  'Decargo y muestro la foto si esta adjunta
 +
if Not GrialFileStorage.DownloadImage("FOTO", ImageFoto) Then MsgBox "No se halló Foto"
 +
</code>
 +
 
 +
La Función DownloadImage permite descargar un archivo y asignarlo a un objeto '''Image''' de Visual Basic. Si el código indicado no está entre los adjuntos, la función devuelve false.
 +
 
 +
 
 +
'''Caso 2 - Descargar otros archivos automáticamente:'''
 +
 
  With GrialFileStorage
  With GrialFileStorage
-
    If .SelectedAttachment_Value("SYSFUNC30_COD") = "FOTOPPAL" Then
+
  If .SelectAttachment("DOCUMENTO") Then 'Existe
-
        'si est adjuntando la foto
+
      Dim TempFile As String
-
        LbFileName = .SelectedAttachmentInfo
+
      If .GetSelectedAttachmentFile(TempFile) Then 'Descargo el archivo
-
        img_foto = LoadPicture(.SelectedFileName)
+
          If MsgBox("Desea abrir " &  .SelectedAttachmentInfo(), VbOkCancel) = VbOk then
 +
              GrialFileStorage.StartDoc(TempFile) 'Abro el archivo con el programa asociado
 +
          End If
 +
      End If
     End If
     End If
  End With
  End With
-
End Sub
+
</Code>
-
</code>
+
-
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)
+
El Método '''SelectAttachment''' busca un código específico dentro de los adjuntos presentes, el parámetro corresponde al valor del campo SYSFUNC30_COD [string(10)]
 +
 
 +
La función '''SelectedAttachmentInfo''' devuelve un string descriptivo con la descripción del adjunto, el nombre del archivo 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 archivo recuperado en el parámetro '''TempFileName'''. Si no puede recuperar el archivo la función retorna FALSE.
 +
 
 +
La función '''StartDoc(TempFileName) ''' abre el archivo indicado con el programa asociado según la extensión del archivo.
 +
 
 +
En caso seleccionar un archivo exitosamente, se dispara el evento '''GrialFileStorage_FileAttached. '''
====Eliminar un adjunto con un código específico====
====Eliminar un adjunto con un código específico====
Línea 181: Línea 175:
     End If
     End If
  End With
  End With
 +
 +
 +
====Funciones y Métodos de Utilidad ====
 +
 +
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)
 +
===Cache de Descargas===
===Cache de Descargas===
Línea 206: Línea 206:
Para restaurar el valor default: All Files (*.*)  puede poner '''FileFilters = “”'''
Para restaurar el valor default: All Files (*.*)  puede poner '''FileFilters = “”'''
-
===Adjuntar un archivo manualmente===
+
===Descargar un Archivo por ID_SYSFUNC30===
Ejemplo:
Ejemplo:
-
  SF30DEscri = "foto del usuario"
+
  GrialFileStorage.SelectAttachment_IDSF30( IDSysFunc30 )
-
SelectedFileName = “C:\FotoASubir.jpg”
+
  Dim TempFileName as string
-
  SF30Cod = “FOTO”
+
  GrialFileStorage.GetSelectedAttachmentFile(TempFileName)
-
   
+
  GrialFileStorage.StartDoc TempFileName
-
  'Agrego adjunto
+
-
''' GrialFileStorage.AddFile SF30DEscri, SelectedFileName, SF30Cod
+
-
Donde:
 
-
;SF30DEscri: es la descripcion, por ejemplo: "foto de xxxx"
 
-
;SelectedFileName: es el path al archivo local
 
-
;SF30Cod: es un codigo  para diferenciar el adjunto de otros adjuntos al mismo registro, por ejemplo: "FOTO"
 
[[Category: Manual de Programación|1]]
[[Category: Manual de Programación|1]]
{{Hierarchy footer}}
{{Hierarchy footer}}

Revisión de 18:25 31 oct 2012

Introducción al Framework Grial

Índice


El GrialFileStorage permite relacionar archivos con cualquier registro de cualquier tabla troncal del sistema. Y posteriormente adjuntar, almacenar y recuperar estos archivos desde el servidor.

Archivo:GrialFileStorage.png

Contenido

Como Incorporar GrialFileStorage a un módulo

Paso 1) Incorpore el Control GrialFileStorage a su proyecto

Coloque el control en el formulario. El control es una grilla de adjuntos, con botones para agregar, dar de baja, descargar y consultar el histórico.

Dentro del control el usuario podrá ver los archivos que ha adjuntado, tendrá la posibildad de adjuntar nuevos o dar de baja adjuntos existentes.

También dispondrá en el mismo espacio de la posibilidad de ver un "histórico" que le permitirá acceder a los adjunto agregados y dados de baja anterioremente. (Auditoría)

El control también puede funcionar en modo "invisible" (Visible=False), pudiéndose adjuntarse y recuperarse archivos mediante código.

Paso 2) Incorporar en la preparación de la Transacción

En el momento de preparar la transacción llamar a GrialFileStorage.Init:

SocuUsua01_grq.Init "select * from soc_usua_01 where id_socusua01=" & IdSocUsua01
SocuUsua02_grq.Init "select * from soc_usua_02 where rela_socusua01=" & IdSocUsua01
GrialFileStorage.Init GrialCont, "RRHH\LEGAJOS\FOTOS", "SOC_USUA_01", IdSocUsua01

En la llamada a GrialFileStorage.Init se indica:

El GrialCont principal de la transacción, el Path para almacenamiento en el server, la tabla TRONCAL y el ID del registro al cual se han de adjuntar los archivos. Con esta información el GrialFileStorage prepara un query de consulta sobre la tabla SYS_FUNC_30, recuperando la información de los archivos adjuntos al troncal e ID indicado.

Path para almacenamiento: El string “"RRHH\LEGAJOS\FOTOS"” del ejemplo 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

Paso 3) Incorporar en la carga de datos de la Transacción

Luego ha de incluirse el objeto GrialFileStorage en la carga de datos junto con los otros GrialQuerys o Controles Registrados de la transacción.

El GrialFileStorage funciona como una grilla sobre la tabla SYS_FUNC_30_DET_ADJUNTOS

GrialCont.LoadData SocUsua01_grq, SocUsua02_grq, GrialFileStorage

La carga de datos trae la grilla de los adjuntos y la muestra si el control está visible. Luego de la carga es posible limitar las acciones que el usuario puede realizar con los adjuntos (Agregar y Eliminar, ver histórico), por ejemplo:

With GrialFileStorage
     .AllowAddNew = Not ModoConsulta
     .AllowDelete = Not ModoConsulta
     .ViewLogButton_Hidden = True
End With

Paso 3) Incorporar en BottomButton_Click BUTTON_ACEPT (grabación de la transacción)

En el momento de grabar la transacción llamar a: GrialFileStorage.AppendToTransaction, como un detalle de la cabecera a la cual los archivos se adjuntan:

 Txn.Add SF20Grq.Rst, “Name=SF20:ID_SYSFUNC20”
 Txn.Add SF21Grq.Rst, “ID_SYSFUNC21;RELA_SYSFUNC20”
 GrialFileStorage.AppendToTransaction Txn, "SF20"

Mediante esta llamada el GrialFileStorage 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 HEADER en la transacción que contiene el registro al cual se adjuntan los archivos (ID y Troncal especificados en el Init)

Internamente AppendToTransaction agrega a la Transacción la grabación de la tabla SYS_FUNC_30 que contiene los nombres los archivos adjuntos.

En el ejemplo dado, el GrialFileStorage agregará internamente:

   GrialFileStorage.AppendToTransaction Txn, "SF20" ...
   'Agrega internamente...
   '=> Txn.AddItem SYSFUNC30.Rst, “Header=SF20:ID_SYSFUNC30, RELA_TRONCAL”

En el momento de grabar la transacción se grabará la referencia al nombre del archivo adjuntado, (tabla SYS_FUNC_30) quedando relacionados los archivos subidos al servidor con el registro cabecera indicado.

Paso 4) Incorporar en BottomButton_Click BUTTON_CANCEL

Aunque adjunte archivos, el usuario siempre puede cancelar la transacción. Para para eliminar los archivos subidos durante la operación, se debe incorporar una llamada a GrialFileStorage.CancelUploaded en el BUTTON_CANCEL.

              Case BUTTON_CANCEL
                   ID_SocUsua01_Gcb.CancelModifications
                   GrialFileStorage1.CancelUploaded


Esta llamada eliminará los archivos subidos durante esta transacción, que se ha cancelado.

Métodos Adicionales

Adjuntos Específicos, por ejemplo, Foto de un Legajo

Crear un adjunto con un código específico

Para adjuntar un archivo con un codigo específico (“FOTO” en el ejemplo) se debe usar la función GrialFileStorage.StartAttachByCode

Ejemplo:

 Private Sub AdjuntarFotoCmd_Click()
 On Error GoTo ErrH 
 'Inicio un adjunto, con codigo "FOTO"
 If GrialFileStorage.StartAttachByCode("FOTO", “Foto Principal”) then 
        Rem OK, EL USUARIO selecciono un archivo y los adjuntó con el código "FOTO"
 End If
 Exit sub
 ErrH:
   MsgError GrialCont
 End Sub

La función StartAttachByCode inicial el proceso de adjuntar un Nuevo archivo. Se ya se encuentra el código en la lista, al mismo momento de adjuntar el nuevo archivo, el archivo anterior pasa a tener Fecha de Baja y pasará al histórico de adjuntos para este registro.

El código siempre es único en la lista de adjuntos.

La función retorna FALSE si el usuario cancela el proceso.

Ubicar y mostrar un adjunto especifico

Luego de cargar los datos, se puede buscar una adjunto mediante un código especifico, recuperarlo y mostrarlo

Caso 1 - Imágenes

 'Decargo y muestro la foto si esta adjunta
 if Not GrialFileStorage.DownloadImage("FOTO", ImageFoto) Then MsgBox "No se halló Foto"

La Función DownloadImage permite descargar un archivo y asignarlo a un objeto Image de Visual Basic. Si el código indicado no está entre los adjuntos, la función devuelve false.


Caso 2 - Descargar otros archivos automáticamente:

With GrialFileStorage
  If .SelectAttachment("DOCUMENTO") Then 'Existe
      Dim TempFile As String
      If .GetSelectedAttachmentFile(TempFile) Then 'Descargo el archivo
          If MsgBox("Desea abrir " &  .SelectedAttachmentInfo(), VbOkCancel) = VbOk then 
              GrialFileStorage.StartDoc(TempFile) 'Abro el archivo con el programa asociado 
          End If
      End If
   End If
End With

El Método SelectAttachment busca un código específico dentro de los adjuntos presentes, el parámetro corresponde al valor del campo SYSFUNC30_COD [string(10)]

La función SelectedAttachmentInfo devuelve un string descriptivo con la descripción del adjunto, el nombre del archivo 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 archivo recuperado en el parámetro TempFileName. Si no puede recuperar el archivo la función retorna FALSE.

La función StartDoc(TempFileName) abre el archivo indicado con el programa asociado según la extensión del archivo.

En caso seleccionar un archivo exitosamente, se dispara el evento GrialFileStorage_FileAttached.

Eliminar un adjunto con un código específico

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 GrialFileStorage
   If .SelectAttachment("FOTOPPAL") Then
       .DeleteAttachment
       img_foto.Picture = LoadPicture("")
       LbFileName = ””
   End If
End With


Funciones y Métodos de Utilidad

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)


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 GrialFileStorage (GrialCont.LoadData GrialFileStorage)

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
GrialFileStorage.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 adiciona filtros a la propiedad FileFilters (de tipo string).

Por Ejemplo:

 GrialFileStorage.AddFileFilter "Text Files","*.txt"  'Solo archivos txt

Para restaurar el valor default: All Files (*.*) puede poner FileFilters = “”

Descargar un Archivo por ID_SYSFUNC30

Ejemplo:

GrialFileStorage.SelectAttachment_IDSF30( IDSysFunc30 )
Dim TempFileName as string 
GrialFileStorage.GetSelectedAttachmentFile(TempFileName)
GrialFileStorage.StartDoc TempFileName



GrialPrint <<< >>> GrialTextStorage

Herramientas personales