Mediante la técnica de drag&drop (arrastrar y soltar) podremos interactuar con la base de datos, más concretamente con listas de registros de tablas. Mediante este sub-objeto podremos hacer que al arrastrar registros desde una rejilla se ejecute un proceso al soltarlos sobre otra.
Para su implementación será necesario lo siguiente:
Dos objetos de lista como, por ejemplo, rejillas.
Un sub-objeto de tipo drop en el objeto de destino.
El proceso a ejecutar al hacer el drop en el objeto de destino.
En este tutor vamos a desarrollar un ejemplo básico para el cual usaremos las siguientes tablas de vTutor:
La tabla de Clientes (CLT_M) contiene un campo enlazado a la tabla de Sectores de actividad (SEC_ACT_M).
Partiendo de una rejilla de Clientes y una de Sectores de actividad, poder seleccionar uno o varios clientes, arrastrar sobre un sector de actividad concreto de modo que se asigne el sector de actividad donde se ha hecho el drop al cliente o a los clientes arrastrados.
Para este tutor usaremos la rejilla de Clientes llamada CLT_M_DRA, que está en la carpeta de objetos de la tabla de Clientes y la rejilla llamada SEC_ACT_M_DRA_DROP, que está en la carpeta de objetos de al tabla de Sectores de actividad, ambas dentro del proyecto de aplicación de vTutor.
Para este módulo tendremos que crear:
Una rejilla asociada a la tabla de Clientes (CLI_M). La hemos llamado CLI_M_DRA. Está en la carpeta de objetos de la tabla de Clientes.
Una rejilla asociada a la tabla de Sectores de actividad (SEC_ACT). La hemos llamado SECT_ACT_M_DRA_DRO. Está en la carpeta de objetos de la tabla de Sectores de actividad.
Dos búsquedas, uno para cargar los clientes y otra para cargar los sectores de actividad, que se llaman CLT_M_NOM y SEC_ACT_M_NOM respectivamente.
Un formulario sin origen, en el que incluiremos ambas rejillas, al que hemos llamado TUT_DRA_DRO, que encontraremos en la carpeta de objetos de este tutor.
Un proceso a ejecutar en el drop de la rejilla de Sectores de actividad, que asigne el sector de actividad donde se ha hecho el drop a los clientes arrastrados, al que hemos llamado CLT_M_ASI_SEC_ACT. este proceso lo encontraremos en la carpeta de objetos de la tabla de Clientes.
No vamos a detenernos en la creación de una rejilla o de un formulario, pues ya está explicado en el tutor de rejillas y en el tutor de formularios.
En la rejilla de Clientes (CLT_M_DRA) debemos definir las propiedades siguientes para poder hacer el drag:
Estilos: encontraremos dos estilos específicos para la operativa de drag and drop. Estos son:
Arrastrable para copiar. Esto hará que cuando la rejilla sea el origen de drag & drop, los registros arrastrados no serán quitados de la misma al hacer el drop en la rejilla de destino.
Arrastrable para mover. Esto hará que cuando la rejilla sea el origen de drag & drop, los registros arrastrados sean quitados de la misma al hacer el drop en la rejilla de destino. Los registros arrastrados serán quitados de la lista, pero no borrados de la base de datos.
En este caso activaremos el estilo arrastrable para copiar.
Multiselección: seleccionar el valor Verdadero. Esto dará la posibilidad al usuario final de seleccionar más de un registro en la rejilla de origen. De ese modo podremos arrastrar varios clientes al mismo tiempo.
El proceso drop es el proceso que se ejecutará cuando arrastremos uno o varios clientes a un sector de actividad. Por lo tanto, origen del proceso será una lista de la tabla de Clientes y el destino será una lista de la tabla de Sectores de actividad. Por tanto, estableceremos las propiedades siguientes:
Identificador: CLI_M_ASI_SEC_ACT.
Nombre: añadir clientes al sector actividad.
Tabla asociada: CLI_M.
Origen: lista.
Tabla destino: SEC_ACT_M.
Destino: lista.
Y el contenido del mismo será:
El proceso lo primero que hace es leer la ficha sobre la que se ha hecho el drop (un registro de la tabla de Sectores de actividad), para ello hace uso del comando de instrucción procesar ficha en memoria; la ficha a procesar tiene un identificador fijo y es Ficha drop. Este comando genera un subproceso cuyo origen es la ficha en cuestión, por eso en el mismo leemos y guardamos en una variable local su ID.
A continuación recorre la lista de clientes de origen en modo lectura escritura y asigna el ID del sector de actividad leído al campo enlazado a dicha tabla.
Una vez añadido el subobjeto drop haremos doble clic sobre él en el panel de subobjetos para editar sus propiedades y estableceremos las siguientes:
Tabla origen: ENTIDADES.
Proceso: CLI_M_ASI_SEC_ACT.
Y ya tenemos programada la funcionalidad de drag & drop.
Cuando ejecutemos el ejemplo de tutor lo que haremos será seleccionar una o varias entidades, pinchar, arrastrar y soltar sobre un registro de la rejilla de tipos de entidad. Esto hará que se asignará el tipo de entidad a las entidades arrastradas.
Una vez programado el proceso, editaremos nuevamente las propiedades de la rejilla de sectores de actividad (SECT_ACT_M_DRA_DRO) y, en el panel de subobjetos pulsamos el botón añadir subobjeto y seleccionamos la opción drop.