GrialAttach

De GrialWIKI

(Diferencias entre revisiones)
(Crear)
(Página reemplazada por «'{{Hierarchy header}} = El GrialAttach está OBSOLETO = >>> Utilizar GrialFileStorage en su lugar Antigua Pagina de Referencia: GrialAttach_Obsoleto [[Category...'»)
 
(5 ediciones intermedias no se muestran.)
Línea 1: Línea 1:
{{Hierarchy header}}
{{Hierarchy header}}
-
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.
+
= El GrialAttach está OBSOLETO =
-
 
+
>>> Utilizar [[GrialFileStorage]] en su lugar
-
<blockquote>
+
-
[[image:GrialAttach.png|link=|El GrialAttach]]
+
-
</blockquote>
+
-
 
+
-
==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=SF20: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)===
+
-
 
+
-
<code>
+
-
Txn.Add SF20Grq.Rst, “Name=SF20:ID_SYSFUNC20”
+
-
Txn.Add SF21Grq.Rst, “ID_SYSFUNC21;RELA_SYSFUNC20”
+
-
GrialAttach.AppendToTransaction Txn, "SF20"
+
-
 
+
-
GrialCont.Apply Txn
+
-
If GrialCont.LastButton = BUTTON_NEW Then
+
-
    IDSysFunc20 = SqlArea.NewIDValue
+
-
End If
+
-
</code>
+
-
 
+
-
En el momento de grabar la transacción se grabará la referencia al nombre del archivo adjuntado, (tabla SYS_FUNC_30)
+
-
 
+
-
pero en este punto, los archivos '''aún 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 a la función '''StoreFiles''', el ID del registro o el Nuevo ID en caso de alta
+
-
 
+
-
Los archivos quedarán asociadps (''attachados'') a ese ID.
+
-
 
+
-
If GrialCont.LastButton = BUTTON_NEW Then
+
-
    IDSysFunc20 = SqlArea.NewIDValue ' Recupero ID dado de alta
+
-
End If
+
-
'almaceno attachments en el servidor
+
-
GrialAttach.StoreFiles IDSysFunc20
+
-
 
+
-
Dentro de '''StoreFiles''' se envían (upload) los archivos nuevos y se eliminan del servidor los que el usuario haya eliminado del control GrialAttach.
+
-
 
+
-
La tabla SYS_FUNC_30 posee un campo SYSFUCN30_PENDIENTE que indica que proceso aplicarle a cada archivo.
+
-
 
+
-
En caso de algún error en la transferencia (por ejemplo: corte de conexión o no se puede leer el archivo), el campo SYSFUNC30_PENDIENTE quedara con un valor diferente de cero, indicando que aun debe procesarse ese archivo.
+
-
 
+
-
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 importantes que el modulo maneje) '''''ya ha sido aplicada correctamente'''''.
+
-
 
+
-
Para reintentar el envío de archivos, el usuario debe ingresar nuevamente a la transacción y corregir el problema, por ejemplo: adjuntar el archivo correcto.
+
-
 
+
-
==Métodos Adicionales==
+
-
 
+
-
===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 GrialAttach
+
-
  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====
+
-
 
+
-
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: '''GrialAttach.StartAttachByCode'''
+
-
 
+
-
Ejemplo:
+
-
<code>
+
-
Private Sub AdjuntarFotoCmd_Click()
+
-
On Error GoTo ErrH
+
-
'Inicio un adjunto, con codigo "FOTOPPAL"
+
-
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
+
-
</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.
+
-
 
+
-
El código siempre es único en la lista de adjuntos.
+
-
 
+
-
La función retorna FALSE si el usuario cancela el proceso.
+
-
 
+
-
 
+
-
En caso seleccionar un archivo exitosamente, se dispara el evento '''GrialAttach_FileAttached. '''
+
-
Este evento se puede utilizar para mostrar en pantalla el archivo adjunto, por ejemplo, si fuera una imagen.
+
-
Por ejemplo:
+
-
 
+
-
<code>
+
-
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
+
-
</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)
+
-
 
+
-
====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"
+
 +
Antigua Pagina de Referencia: [[GrialAttach_Obsoleto]]
[[Category: Manual de Programación|1]]
[[Category: Manual de Programación|1]]
{{Hierarchy footer}}
{{Hierarchy footer}}

última version al 18:43 1 nov 2012

Introducción al Framework Grial

Índice


El GrialAttach está OBSOLETO

>>> Utilizar GrialFileStorage en su lugar

Antigua Pagina de Referencia: GrialAttach_Obsoleto



GrialResize

Herramientas personales