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 allimport 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;
	}
}