• ayuda con process handlers

  • Hemos intentado hacer de OpenKM una aplicación lo más intuitiva posible, sin embargo siempre viene bien algún consejo.
Hemos intentado hacer de OpenKM una aplicación lo más intuitiva posible, sin embargo siempre viene bien algún consejo.
Forum rules: Por favor, antes de preguntar algo consulta el wiki de documentación o utiliza la función de búsqueda del foro. Recuerda que no tenemos una bola de cristal ni poderes mentales, o sea que que para informar sobre un error es necesario que nos indiques tanto la versión de OpenKM que usas como la del navegador y sistema operativo. Para más información consulta Cómo informar de fallos de forma efectiva.
 #12164  by jllort
 
Actualiza a la 5.1.8 que tienes en el integration.openkm.com

Lo que te esta diciendo en el caso de la postgre es que tienes que poner un identificador en la columna dmt_id ( en otras bases de datos como mysql esto no es necesario por que es un campo que se autoincrementa automaticamente al hacer el insert, pero en otras bases de datos hay que meter el idenficador unico de la fila manualmente por que no existe un autoincremental sino que postgresql y oracle funcionan con secuencias ), simplemente añade el campo en el insert y el valor 1,2,3 respectivamente.
 #12230  by xcgb
 
ya he actualizado a la 5.1.8, con esta actualizacoion ya se soluciono lo del Input de tipo date.
tambien ya se soluciono lo de la columna dmt_id, quedando la insercion como sigue:
Code: Select all
INSERT INTO OKM_DB_METADATA_TYPE (DMT_ID, DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES (1, 'entrada', 'col00', 'text', 'ent_id');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_ID, DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES (2, 'entrada', 'col01', 'text', 'ent_fecha');
INSERT INTO OKM_DB_METADATA_TYPE (DMT_ID, DMT_TABLE, DMT_REAL_COLUMN, DMT_TYPE, DMT_VIRTUAL_COLUMN) VALUES (3, 'entrada', 'col02', 'text', 'ent_medio');
 #12325  by xcgb
 
Si va saliendo poco a poco, aun tengo problemas con:


1) insertar en la base de datos virtual los datos desde el process handlers (en la documentacion de Database Metadata no tienen una funcion para insertar)
Code: Select all
String sql_insert = "INSERT INTO OKM_DB_METADATA_VALUE (DMV_TABLE, DMV_ID, DMV_COL00, DMV_COL01, DMV_COL02) VALUES ('entrada', " + ent_id + ", " + ent_id + ", " + ent_fecha + ", " + ent_medio + ")";
-manualmente la insercion desde el Database Query funciona, pero tambien hay que agregarle el campo DMV_ID porque sino marca error.

2) falta obtener el valor de la opcion seleccionada de un Select


3) enviar notificacion por mail
 #12355  by jllort
 
Pega-le un ojo al DatabaseMetadataServlet, nosotros lo utilizamos desde el UI.

En el servlet veras cosas interesantes como crear un nuevo valor, una nueva secuencia, etc... ( esto en la wiki igual no esta explicado con mucha extensión y esta parte tengamos que documentarla con algun ejemplo ).

Y te aconsejamos hacer algun tipo de mapeo.

Este código que utilizamos desde el UI a traves del metadaService probablemente te dará alguna idea de como puedes montarlo en la parte de las clases del workflow para que el código quede mas comprensible
Code: Select all
import java.util.Map;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.openkm.frontend.client.util.metadata.DatabaseMetadataCommon;
import com.openkm.frontend.client.util.metadata.DatabaseMetadataMap;

/**
 * GWTDocumento
 * 
 * @author jllort
 *
 */
public class GWTDocumento extends DatabaseMetadataCommon implements IsSerializable {
	// Metadata Virtual Name mapping 
	public static final String MV_TABLE_NAME		 		= "documento";
	public static final String MV_COLUMN_NAME_ID			= "doc_id";
	
	private Integer id;
	
	@Override
	public void loadFromMap(Map<String, String> map) {
		super.loadFromMap(map);
		if (map.containsKey(MV_COLUMN_NAME_ID)) {
			setId(DatabaseMetadataMap.getIntegerValue(map.get(MV_COLUMN_NAME_ID)));
		}
	}
	
	@Override
	public Map<String, String> restoreToMap() {
		Map<String,String> map = super.restoreToMap();
		if (id!=null) {
			map.put(MV_COLUMN_NAME_ID, DatabaseMetadataMap.mapIntegerValue(getId()));
		}
		return map;
	}
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

}
y esto
Code: Select all
/**
 * DatabaseMetadataCommon
 * 
 * @author jllort
 *
 */
public abstract class DatabaseMetadataCommon {
	private Double realId;	
	private String realTable;
	
	/**
	 * loadFromMap
	 */
	public void loadFromMap(Map<String,String> map) {
		if (map.containsKey(DatabaseMetadataMap.MV_NAME_ID)) {
			setRealId(DatabaseMetadataMap.getDoubleValue(map.get(DatabaseMetadataMap.MV_NAME_ID)));
		}
		
		if (map.containsKey(DatabaseMetadataMap.MV_NAME_TABLE)) {
			setRealTable(map.get(DatabaseMetadataMap.MV_NAME_TABLE));
		}
	}
	
	/**
	 * restoreToMap
	 */
	public Map<String,String> restoreToMap() {
		Map<String,String> map = new HashMap<String,String>();
		
		if (realId != null) {
			map.put(DatabaseMetadataMap.MV_NAME_ID, DatabaseMetadataMap.mapDoubleValue(getRealId()));
		}
		
		if (realTable != null) {
			map.put(DatabaseMetadataMap.MV_NAME_TABLE, getRealTable());
		}
		
		return map;
	}
	
	public Double getRealId() {
		return realId;
	}

	public void setRealId(Double realId) {
		this.realId = realId;
	}

	public String getRealTable() {
		return realTable;
	}

	public void setRealTable(String realTable) {
		this.realTable = realTable;
	}
}
 #12358  by xcgb
 
gracias por la respuesta, voy a revisar bien lo que me comentas
en un vistazo rapido no le veo por donde, estoy probando usar
el jdbc, es posible incluirlo en el handler??
Code: Select all
Class.forName("org.postgresql.Driver").newInstance();
			Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/okm_app", "openkm" ,  "*secret*");

			PreparedStatement prepstmt = con.prepareStatement("INSERT INTO okm_db_metadata_value VALUES(?,?,?,?,?,?,?,?,?,?)");
			prepstmt.setString(1, "");
			prepstmt.setString(2, "");
	.
			prepstmt.close();
				
			con.close();
 #12372  by jllort
 
Yo te aconsejo utilizar las clases de MetadataDatabaseUtils que lo tienen todo encapsulado y tal. Pero bueno si quieres insertar directamente no tiene que haber ningún problema.

About Us

OpenKM is part of the management software. A management software is a program that facilitates the accomplishment of administrative tasks. OpenKM is a document management system that allows you to manage business content and workflow in a more efficient way. Document managers guarantee data protection by establishing information security for business content.