Ir al contenido
Otras versiones

Cargando…

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.

<?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>

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

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());
}

  • 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.