El control de adjuntar utiliza los componentes ol y li para llevar la información de los archivos adjuntos, pero la subida del archivo utiliza principalmente un componente genérico del BPMs ubicado en solicitudes/plantillas/upload.aspx, este componente se encarga de subir los archivos al servidor en una carpeta temporal y devolver la ruta en que quedaron almacenados.
GenAdjunto
Estructura HTML del control adjuntar
El control adjuntar tiene varios elementos importantes para su correcto funcionamiento, un botón para abrir el modal para adjuntar, un elemento ol que guardará la información y un campo oculto que se usa para la validación.
La configuración del adjunto se basa en los data atributos del botón, para la grid se tienen unos datos adicionales.
<!-- Estructura para un adjuntar en el formulario principal -->
<div class="large-50 medium-50 col-100 list ">
<div class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label lbFile">Adjunto</div>
<button class="button btnAdjuntar" type="button" id="btnf1" data-idf="f1"
data-tipo-f="jpg,jpeg,png,bmp" data-num-files="3" data-kb="4000" data-fn-remove="confirmRemove">
<i class="material-icons">attach_file</i>
Adjuntar documento
</button>
<ol id="f1" class="view-file"></ol>
<input type="hidden" id="_tf1" />
</div>
</div>
</div>
<!-- Estructura para un adjuntar en un modal de grid -->
<div class="large-100 medium-100 col-100 list ">
<div class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label lbFile">Adjunto Grid</div>
<button class="button btnAdjuntar" type="button" id="btnf2" data-idf="f2"
data-tipo-f="" data-num-files="3" data-kb="4000" data-grid="gTest" data-grid-col="5">
<i class="material-icons">attach_file</i>
Adjuntar documento
</button>
<ol id="f2" class="view-file ufiles"></ol>
<input type="hidden" id="_tf2" />
</div>
</div>
</div>
Configuración del control adjuntar
Todo se basa en los data atributos en el botón para adjuntar, a continuación se describen incluídos los de la grid:
Propiedad |
tipo |
Descripción |
data-idf |
string |
Id del file al que hace referencia (siempre debe empezar por f) |
data-tipo-f |
string |
Extensiones de los archivos que se desean filtrar, se pueden poner varias separado por coma |
data-num-files |
string |
Número máximo de archivos que se pueden subir |
data-kb |
string |
Tamaño máximo en kilobytes que se puede subir por archivo (se puede manejar el miles, 3000, 4000...) |
data-fn-remove |
string |
Es opcional, nombre de la función que se va a invocar al remover un archivo |
data-grid |
string |
Id de la grid a la cuál aplica este control de adjuntar |
data-grid-col |
string |
Número de la columna a la cuál corresponde el control de adjuntar |
Tipos de archivos comunes
Usualmente lo que se suben son imágenes, documentos de PDF y archivos de word y excel, el control de adjuntar tiene una función para previsualizar, esta solo aplica para las imágenes y los documentos pdf, estas extensiones se ponen en el atributo data-tipo-f, se pueden mezclar varias extensiones, o si no se quiere tener esta restricción, el campo se deja vacío.
Tipo de Archivo |
Validación |
Extensiones |
Imágenes |
Sólo archivos de imágenes |
JPG,JPEG,PNG |
PDF |
Sólo archivos de tipo PDF |
PDF |
Word |
Sólo arhcivos de word |
DOC,DOCX |
Excel |
Sólo archivos de excel |
XLS,XLSX |
Cualquiera |
No valida el tipo de archivo |
|
Previsualización
La previsualización en este momento es general para los formularios de framework7, se tiene una plantilla genérica para que funcione en cualquier proceso. También existe la posibilidad de sobre escribir esta funcionalidad y hacer una previsualización personalizada.
Para que funcione la previsualización se debe incluir en los formularios esta plantilla ##SubTemplate--generales\adjuntar\viewAdjuntar.htm##
Eventos del control adjuntar
El control dispara varios eventos, para que se puedan extender las funcionalidades generales desde el script específico de cada formulario, estos son los eventos que genera el control, los dispara directamente el control ol, por lo que la suscripción al evento se hace contra ese control:
Evento |
Descripción |
existFile |
Se dispara cuando se detecta un archivo que ya ha sido adjuntado |
addFile |
Se dispara cuando se agrega un archivo nuevo |
removeFile |
Se dispara cuando se remueve archivo |
previewFile |
Se dispara cuando se va a previsualizar un archivo |
_$('.ufiles').on('existFile', function(e) {
var data = e.originalEvent.detail;
console.log('El archivo {0} ya ha sido adjuntado'.format(data[0]));
});
_$('.ufiles').on('addFile', function(e) {
var dataFile = e.originalEvent.detail;
console.log(dataFile);
});
_$('.ufiles').on('removeFile', function(e) {
var fileData = e.originalEvent.detail;
console.log(fileData);
});
_$('.ufiles').on('previewFile', function(e) {
var idModal = e.originalEvent.detail.idModal;
//Abrir el modal personalizado
});
Inicialización
Para que los controles de adjuntar funcionen con el script, simplemente se debe llamar al inicio de la carga del formulario la función initFiles
function inicio() {
if (isResponse()) {
//Código para la respuesta
initEventListeners();
return;
}
callEventForm('beforeInit');
//Inicialización Grids
callEventForm('beforeInitGrids');
callEventForm('afterInitGrids');
callEventForm('beforeInitListeners');
initEventListeners();
callEventForm('afterInitListeners');
f7SmartSelectFix();
initFiles();
callEventForm('afterInit');
}
Formularios de respuesta
Para que la visualización de los archivos sea la misma que se tiene en edición, es necesario cargar los tags en un contenedor con algunos atributos, se debe invocar la función convertResponseAllFiles
##If--5219F1!##
<div class="large-50 medium-50 col-100 list">
<div class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Adjuntar foto</div>
<div class="fw7Link fileResp" data-idf="f1">##5219F1:HTMLLINK##</div>
</div>
</div>
</div>
##EndIf--5219F1!##
La clase fw7Link es necesaria para que los enlaces funcionen, ya que fw7 atrapa todos los enlaces y no los abre, y la clase fileResp se usa para convertir el contenido HTML necesario para su visualización, el data atributo data-idf se usa para crear el nodo ol con el id especificado allí.
function inicio() {
if (isResponse()) {
//Código para la respuesta
convertResponseAllFiles(true);
initEventListeners();
return;
}
//....
}
En la función convertResponseAllFiles, el parámetro booleano indica si es se va a usar para formularios de respuesta.
Formulario reabierto
Cuando un formulario que tiene adjuntos se reabre para hacer correcciones, es necesario cargar los archivos adjuntos, para eso se usa la función loadFileInEdition, teniendo la misma estructura HTML que se indicó para los formularios de respuesta.
Adicional, si no se agrega ningún archivo nuevo, el método de grabar debe saberlo, para eso y antes de enviar a grabar, se debe usar la función cleanFileInEdition
function inicio() {
if (isResponse()) {
//Código para la respuesta
convertResponseAllFiles(true);
initEventListeners();
return;
}
convertResponseAllFiles(false);
//....
}
function preSave() {
cleanFileInEdition();
}