Cambiar el estilo de carpeta según el valor de un metadato
El ejemplo muestra cómo cambiar los iconos de estilo de carpeta en función de los valores de los metadatos.
Configurar el ejemplo
Sección titulada «Configurar el ejemplo»Crear un nuevo grupo de metadatos
Sección titulada «Crear un nuevo grupo de metadatos»<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 3.10//EN" "http://www.openkm.com/dtd/property-groups-3.10.dtd"><property-groups> <property-group label="Invoice status" name="okg:invoicedata"> <select label="Status" name="okp:invoicedata.status" type="simple"> <option label="Open" value="open" /> <option label="Pending to review" value="review" /> <option label="Closed" value="closed" /> </select> </property-group></property-groups>Crear nuevos estilos de carpeta
Sección titulada «Crear nuevos estilos de carpeta»Cree tres nuevos estilos de carpeta. Cada estilo de carpeta utilizará un único icono para todos los estados.
| Nombre del estilo de carpeta | Icono | Id interno |
|---|---|---|
| green | ![]() |
2 |
| orange | ![]() |
3 |
| red | ![]() |
4 |
Crear una nueva tarea de automatización
Sección titulada «Crear una nueva tarea de automatización»Cree una tarea de automatización:
- Establezca el nombre “Change icon based on metadata”.
- Elija el evento “Set Property Group” (evento de establecer campos de metadatos).
- Elija “post” en el campo “at”.
- Marque Active.


- Añada una acción basada en scripting y establezca el código siguiente.
Código de scripting
import java.util.Map;
import com.google.gson.Gson;import com.openkm.api.OKMDocument;import com.openkm.api.OKMFolder;import com.openkm.api.OKMPropertyGroup;import com.openkm.api.OKMRepository;import com.openkm.bean.Document;import com.openkm.bean.PropertyGroup;import com.openkm.util.ContextWrapper;import com.openkm.util.PathUtils;
try { OKMFolder okmFolder = ContextWrapper.getContext().getBean(OKMFolder.class); OKMDocument okmDocument = ContextWrapper.getContext().getBean(OKMDocument.class); OKMRepository okmRepository = ContextWrapper.getContext().getBean(OKMRepository.class); OKMPropertyGroup okmPropertyGroup = ContextWrapper.getContext().getBean(OKMPropertyGroup.class); PathUtils pathUtils = ContextWrapper.getContext().getBean(PathUtils.class); Gson gson = new Gson();
String grpName = "okg:invoicedata"; boolean hasGroup = false;
for (PropertyGroup pg : okmPropertyGroup.getGroups(null, uuid)) { if (pg.getName().equals(grpName)) { hasGroup = true; } }
if (hasGroup) { Map properties = okmPropertyGroup.getProperties(null, uuid, grpName); for (String key : properties.keySet()) { String[] values = gson.fromJson(properties.get(key), String[].class); String value = values[0]; Document document = okmDocument.getProperties(null, uuid); String fldUuid = okmRepository.getNodeUuid(null, pathUtils.getParent(document.getPath())); if (value.equals("open")) { okmFolder.setStyle(null, fldUuid, 2); } else if (value.equals("review")) { okmFolder.setStyle(null, fldUuid, 3); } else if (value.equals("closed")) { okmFolder.setStyle(null, fldUuid, 4); } } }} catch (Exception e) { System.out.println(e.getMessage());}
Comprobar la configuración
Sección titulada «Comprobar la configuración»- Actualice el grupo de metadatos de un documento.

- Cambie el valor del campo de metadatos de Pending to review a closed.

- Haga clic en el
icono Refresh de la barra de herramientas. - El icono del estilo de carpeta ha cambiado.
![]()


