Acciones personalizadas en KCenter
El siguiente ejemplo muestra cómo crear una nueva acción personalizada en KCenter.
Ejemplo basado en un JSP
Sección titulada «Ejemplo basado en un JSP»Paso 1 - Cree un fichero JSP de ejemplo
Sección titulada «Paso 1 - Cree un fichero JSP de ejemplo»Cree el siguiente fichero JSP de ejemplo y cópielo en la carpeta webapps/openkm con el nombre test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %><%@ page isErrorPage="true" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html><head> <script type="text/javascript" src="<%=request.getContextPath() %>/kcenter/api/common.js"></script> <script type="text/javascript" src="<%=request.getContextPath() %>/kcenter/api/modal.js"></script></head><body> <h1>Quick sample about how to create a custom action in the KCenter</h1>
<p><b>UserId:</b> <%=request.getParameter("userId")%></p> <p><b>Uuid:</b> <%=request.getParameter("uuid")%></p> <p><b>Encrypted token:</b> <%=request.getParameter("token")%></p>
<button onclick="_closeCustomFeatureModal()">Close popup</button></body></html>Paso 2 - Registre la acción personalizada
Sección titulada «Paso 2 - Registre la acción personalizada»Cree una nueva acción personalizada con estos valores. Encontrará más información en Acciones personalizadas.
| Campo | Valor |
|---|---|
| Name | test |
| Label | Label test |
| Icon | mdi-copy-all |
| Description | |
| Document | false |
| Folder | true |
| Record | false |
| false | |
| URL | ../test.jsp Otra opción: http://localhost:8080/openkm/test.jsp |
| Action | popup-wizard |
| Location | node-toolbar |
| Width | 50% |
| Height | 50% |
| Show close | true |
Paso 3 - Habilite la acción personalizada en el perfil
Sección titulada «Paso 3 - Habilite la acción personalizada en el perfil»- Vaya a Administration > Profiles
- Edite un perfil y habilite la acción personalizada en la pestaña Misc.
Paso 4 - Compruebe la funcionalidad
Sección titulada «Paso 4 - Compruebe la funcionalidad»- Actualice la interfaz de KCenter
- Seleccione una carpeta en la vista del navegador.
- Se mostrará una nueva opción de menú llamada “Extra” en el menú contextual o en el menú de la barra de herramientas.
Ejemplo completo de JSP
Sección titulada «Ejemplo completo de JSP»El siguiente ejemplo de JSP permite a cualquiera desbloquear un nodo.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="com.openkm.util.ContextWrapper" %><%@ page import="com.openkm.util.StackTraceUtils" %><%@ page import="com.openkm.api.OKMDocument" %><%@ page import="com.openkm.module.db.DbNodeModule" %><%@ page import="com.openkm.bean.Document" %><%@ page import="com.openkm.principal.PrincipalUtils" %><%@ page import="com.openkm.module.db.stuff.DbSessionManager" %><%@ page import="org.apache.commons.lang3.StringUtils" %><%@ page import="com.openkm.principal.SecurityHolder" %>
<html><head> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/kcenter/css/bootstrap/bootstrap.css" /> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/kcenter/css/mdb/mdb.css" /> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath() %>/kcenter/css/okm.css" /> <script type="text/javascript" src="<%=request.getContextPath() %>/kcenter/api/common.js"></script> <script type="text/javascript" src="<%=request.getContextPath() %>/kcenter/api/modal.js"></script> <script type="text/javascript" src="<%=request.getContextPath() %>/kcenter/api/browser.js"></script> <script> function closeButton() { _refreshUI(); _closeCustomFeatureModal(); } </script></head><body>
<% String error = ""; boolean isCheckedOut = false; boolean isLocked = false;
try { String uuid = request.getParameter("uuid"); OKMDocument okmDocument = ContextWrapper.getContext().getBean(OKMDocument.class); DbNodeModule dbNodeModule = ContextWrapper.getContext().getBean(DbNodeModule.class); boolean isDocument = okmDocument.isValid(null, uuid);
if (isDocument) { Document doc = okmDocument.getProperties(null, uuid); if (doc.isCheckedOut()) { isCheckedOut = true; } else if (doc.isLocked()) { isLocked = true; } } else { isLocked = dbNodeModule.isLocked(null, uuid); }
if (isLocked) { // Must set security directly becasue forceUnlock check if the current user has ROLE_ADMIN long tenantId = PrincipalUtils.getTenantId(); String systemToken = DbSessionManager.getInstance().getSystemToken(tenantId); try { SecurityHolder.set(PrincipalUtils.getAuthenticationByToken(systemToken)); dbNodeModule.forceUnlock(null, uuid); } finally { SecurityHolder.unset(); } } } catch (Exception e) { error = StackTraceUtils.toString(e).replaceAll("\n","<br/>"); e.printStackTrace(); }%>
<div class="d-flex justify-content-center w-100 my-2"> <% if (StringUtils.isEmpty(error)) { %> <% if (isCheckedOut) { %> <p class="text-danger">Not allowed to unlock a document on edition.</p> <% } else if (!isLocked) { %> <p class="text-danger">The selected node is not locked.</p> <% } else { %> <p class="text-success">Node unlocked successfuly</p> <% } %> <% } %> </div>
<div class=" d-flex justify-content-center w-100 my-2"> <button type="button" class="btn btn-success btn-sm my-0 m-0" onclick="closeButton()"> Close </button> </div>
<% if (StringUtils.isNotEmpty(error)) { %> <div class="d-flex justify-content-center w-100 my-2"> <p class="text-danger">Error found:</p> <%= error %> </div> <% } %>
</body></html>Ejemplo basado en JavaScript
Sección titulada «Ejemplo basado en JavaScript»Paso 1 - Registre la acción personalizada
Sección titulada «Paso 1 - Registre la acción personalizada»Cree una nueva acción personalizada con estos valores. Encontrará más información en Acciones personalizadas.
| Campo | Valor |
|---|---|
| Name | test |
| Label | Label test |
| Icon | mdi-assistant-direction |
| Description | |
| Document | true |
| Folder | false |
| Record | false |
| false | |
| URL | |
| Action | run-script |
| Location | node-toolbar |
| Width | 50% |
| Height | 50% |
| Show close | true |
| Script | const kcenterApp = window.kcenterApp; // KCenter app const uuid = ‘1aff985f-9243-4c1a-8d43-482026f3fa93’; // UUID to jump to kcenterApp.$store.dispatch(‘browser/refreshByUuid’, uuid, { root: true }); // internal function to jump to the node Ejemplo de acceso a servicios web: kcenterApp.$ws.node.getNodeByUuid(‘095cdb6e-c28e-410c-a6e3-19e23bd4b3ef’).then(response => { console.log(‘here1’); console.log(response); console.log(‘here2’); }); |
Paso 2 - Habilite la acción personalizada en el perfil
Sección titulada «Paso 2 - Habilite la acción personalizada en el perfil»- Vaya a Administration > Profiles
- Edite un perfil y habilite la acción personalizada en la pestaña Misc.
Paso 3 - Compruebe la funcionalidad
Sección titulada «Paso 3 - Compruebe la funcionalidad»- Actualice la interfaz de KCenter
- Seleccione un documento en la vista del navegador.
- En el menú de la barra de herramientas, aparecerá un nuevo icono de menú.