GrialAttach

De GrialWIKI

(Diferencias entre revisiones)
(Adjuntar un archivo manualmente)
(Página reemplazada por «'{{Hierarchy header}} = El GrialAttach está OBSOLETO = >>> Utilizar GrialFileStorage en su lugar Antigua Pagina de Referencia: GrialAttach_Obsoleto [[Category...'»)
 
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>
+
Antigua Pagina de Referencia: [[GrialAttach_Obsoleto]]
-
[[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:
+
-
<code>
+
-
Txn.Add SF20Grq.Rst, “Name=SF20:ID_SYSFUNC20”
+
-
Txn.Add SF21Grq.Rst, “ID_SYSFUNC21;RELA_SYSFUNC20”
+
-
GrialAttach.AppendToTransaction Txn, "SF20"
+
-
</code>
+
-
 
+
-
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'''.
+
-
 
+
-
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 '''GrialAttach''' agregará internamente:
+
-
 
+
-
<code>
+
-
  GrialAttach.AppendToTransaction Txn, "SF20" ...
+
-
  'Agrega internamente...
+
-
  '=> Txn.AddItem SYSFUNC30.Rst, “Header=SF20:ID_SYSFUNC30, RELA_TRONCAL”
+
-
</code>
+
-
 
+
-
===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 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 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 adiciona filtros a la propiedad '''''FileFilters''''' (de tipo string).
+
-
 
+
-
Por Ejemplo:
+
-
 
+
-
<code>
+
-
GrialAttach.AddFileFilter "Text Files","*.txt"  'Solo archivos txt
+
-
</code>
+
-
 
+
-
Para restaurar el valor default: All Files (*.*)  puede poner '''FileFilters = “”'''
+
-
 
+
-
===Adjuntar un archivo manualmente===
+
-
 
+
-
Ejemplo:
+
-
 
+
-
SF30DEscri = "foto del usuario"
+
-
SelectedFileName = “C:\FotoASubir.jpg”
+
-
SF30Cod = “FOTO”
+
-
+
-
'Agrego adjunto
+
-
''' GrialAttach.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}}

ú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