Acciones Multifila (multiselect)
Descripción
Esta opción activa la posibilidad de aplicar acciones sobre múltiples filas a la vez. Dentro de cada vista (view) añadiremos un elemento {"multiselect": {..},...} que estará compuesto de un atributo active y un atributo menu.
Cuando se activa, aparece un checkbox en la primera columna del DataTable que permite seleccionar filas. Al seleccionar una o más filas, aparece un desplegable con las acciones disponibles.
Estructura del Multiselect
Elemento | Descripción | Ejemplo |
|---|---|---|
*active (bool) | Debe valer true para que el multiselect quede activo. | {"active":true} |
*menu[] | Array de objetos que indican las acciones que se puede realizar sobre las múltiples filas | {"menu":[{..},{..}]} |
Atributos del Menu
El atributo menu estará compuesto por un array de objetos con los siguientes atributos:
Elemento | Descripción | Ejemplo |
|---|---|---|
*title | Título que aparecerá en el menú. Soporta localización con $namespace: | {"title":"Borrar"} |
*type | Tipo de acción a ejecutar:
| {"type":"delete"} |
ico | [opcional] Icono FontAwesome asociado al menú (sin prefijo fa-) | {"ico":"trash-alt"} |
color | [opcional] Color asociado al elemento: green, red, orange, blue, etc. | {"color":"green"} |
api | [Sólo type=='external-api'] URL del endpoint que recibirá los IDs seleccionados como parámetro ?_ids=id1,id2,id3. Soporta variables de template como {{Platform:namespace}} y {{User:KeyName}} | {"api":"/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/update"} |
values | [Sólo type=='cfo-update-fields'] Objeto con los campos y valores a actualizar en cada registro seleccionado. | {"values":{"Active":true,"Status":"closed"}} |
security | [opcional] Objeto para restringir qué usuarios pueden ver/usar este elemento del menú. Puede contener:
| {"security":{ |
only_if_filters | [opcional] Restringe la visibilidad del elemento según los filtros activos. Valores especiales:
| {"only_if_filters":{ |
Implementación en el Código
El multiselect está implementado en los siguientes archivos:
firebase/core20.web.app/public/ajax/js/cfo.js- Métodos principales:CloudFrameWorkCFO.deleteMultiselect()- Ejecuta borrado múltipleCloudFrameWorkCFO.updateMultiselect()- Actualiza campos múltiplesCloudFrameWorkCFO.externalAPIMultiselect()- Llama a API externaCloudFrameWorkCFO.checkAllMultiselect()- Gestiona el estado de selecciónCloudFrameWorkCFO.clickAllMultiSelect()- Selecciona/deselecciona todas las filas
firebase/core20.web.app/public/ajax/tpl/cfo_mustache_templates.htm- Template del checkbox
Los IDs seleccionados se almacenan en CloudFrameWorkCFO.multiselect[] como array.
Ejemplos Prácticos de CFOs
1. CloudFrameWorkLogs - Borrado Simple
El CFO de logs implementa un multiselect básico solo para borrar múltiples registros:
"multiselect": {
"active": true,
"menu": [
{
"type": "delete",
"title": "Delete"
}
]
}2. CloudFrameWorkCompanies - Actualización con Filtros Condicionales
El CFO de empresas muestra elementos del menú condicionalmente según el filtro de Active:
"multiselect": {
"active": true,
"menu": [
{
"only_if_filters": {
"Active": ["__null__", true]
},
"type": "cfo-update-fields",
"title": "Desactivar",
"ico": "hand-middle-finger",
"color": "red",
"values": {
"Active": false
}
},
{
"only_if_filters": {
"Active": ["__null__", false]
},
"type": "cfo-update-fields",
"title": "Activar",
"ico": "hand-peace",
"color": "green",
"values": {
"Active": true
}
}
]
}Nota: Cuando el filtro Active no está seleccionado (__null__) o vale true, se muestra "Desactivar". Cuando no está seleccionado o vale false, se muestra "Activar".
3. FINANCE_documents - Ejemplo Completo con Seguridad
El CFO de documentos financieros combina todos los tipos de acciones con seguridad:
"multiselect": {
"active": true,
"menu": [
{
"title": "Delete",
"type": "delete",
"ico": "trash-alt",
"security": {
"field_values": {
"FinancialInvoice_FinancialInvoicesState_Id": ["equals", 1]
}
}
},
{
"title": "Actualizar multi-campos",
"type": "external-api",
"api": "/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/filter-invoices-update",
"ico": "list-alt"
},
{
"title": "Asignar a Proyecto",
"type": "external-api",
"api": "/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/assign-to-project/update",
"ico": "people-carry"
}
]
}Nota sobre security.field_values: El elemento "Delete" solo está disponible cuando el campo FinancialInvoice_FinancialInvoicesState_Id es igual a 1 (estado borrador).
CFOs que Utilizan Multiselect
A continuación se listan los CFOs de la plataforma CloudFramework que implementan multiselect en sus vistas:
- CloudFrameWorkLogs - Logs del sistema (delete)
- CloudFrameWorkCompanies - Empresas (cfo-update-fields)
- CloudFrameWorkContacts - Contactos (cfo-update-fields)
- CloudFrameWorkUsers - Usuarios (cfo-update-fields)
- FINANCE_documents - Documentos financieros (delete, external-api)
- FINANCE_movements - Movimientos financieros
- CloudFrameWorkCFOs - Gestión de CFOs
- CloudFrameWorkContracts - Contratos
- CloudFrameWorkProjectsTasks - Tareas de proyectos
- OauthUsers - Usuarios OAuth
- OauthOrganizations - Organizaciones OAuth
Ejemplo General Completo
"views": {
"default": {
"name": "General View",
"all_fields": true,
"server_order": "DateInsertion DESC",
"server_limit": 100,
"multiselect": {
"active": true,
"menu": [
{
"title": "Delete",
"type": "delete",
"ico": "trash-alt",
"color": "red"
},
{
"title": "Cambiar a Activo",
"type": "cfo-update-fields",
"values": {"Active": true, "Status": "active"},
"ico": "check",
"color": "green",
"only_if_filters": {
"Active": [false, "__null__"]
}
},
{
"title": "Procesar seleccionados",
"type": "external-api",
"api": "/erp/module/{{Platform:namespace}}/{{User:KeyName}}/process-items",
"ico": "cogs",
"color": "blue",
"security": {
"user_privileges": ["admin", "processor"]
}
}
]
}
}
} 
