10-05-2014 07:27 PM
I want to know how to detect when a metadata has been modified. I want to compare the last number of version of the document and the working copy before I do Check In. When I modified some metadada (not a file) I want to increment minor version number automatically. And when I modified a file I want to increment major version number automatically.
Thanks in advance,
Kind regards.
10-07-2014 06:25 AM
Hello,
You have to use a listener (http://doc.nuxeo.com/x/C4AO). You can create it under Studio (if you use it) or under Eclipse Nuxeo IDE plugin (wizard listener).
Subscribe to the event ABOUT_TO_CREATE (about to create listener) to check metadata updates before any changes have been commited.
Thanks
02-11-2015 08:52 AM
My solution as contribution to the community.
Event: DOCUMENT_MODIFIED
public class ModificationListener implements EventListener {
private static final Log log = LogFactory.getLog(ModificationListener.class);
public void handleEvent(Event event) throws ClientException {
	EventContext ctx = event.getContext();
	if (!(ctx instanceof DocumentEventContext)) {
		// event is not tied to a document, we should not be here
		return;
	}
	// Fetch the document from the event context
	DocumentModel doc = ((DocumentEventContext) ctx).getSourceDocument();
	if (doc == null)
		return;
	if (!doc.isVersionable())
		return;
	try {
		BlobProperty currentBlob = (BlobProperty) doc.getProperty("file:content");
		BlobProperty lastBlob = getLastBlob(ctx, doc.getRef());
		 //If currentDoc hasn't a file...
		if(currentBlob.getValue() == null){
			//... and never had a file ...
			if(lastBlob.getValue() == null){
				doc.checkIn(VersioningOption.MINOR, "Metadata modification.");	
			}else{
			//... or file delete	
				doc.checkIn(VersioningOption.MAJOR, "File delete");
			}
			return;
		}
		
		//If currentDoc has a file but lastDoc hasn't a file 	
		if(lastBlob.getValue() == null){
			doc.checkIn(VersioningOption.MAJOR, "File creation");
			return;
		}	
		//If currentDoc has a file and lastDoc has a file ==> compare the digesto
		if(currentBlob.getValue("digest").equals(lastBlob.getValue("digest"))){
			doc.checkIn(VersioningOption.MINOR, "Metadata modification.");
		}else{
			doc.checkIn(VersioningOption.MAJOR, "File modification.");
		}
	} catch (PropertyException e) {
		//If currentDoc hasn't a file:contenct Ej: Nota
		doc.checkIn(VersioningOption.MINOR, "Metadata modification.");
		log.warn("[ERROR_1 Automatizacion de versionado]: "+e.getMessage());
	}
}
/**
 * 
 * @param ctx Contexto
 * @param ref Referencia al documento
 * @return la propiedad Blob del ultimo documento
 */
public BlobProperty getLastBlob(EventContext ctx, DocumentRef ref){
	DocumentModel lastDocVersion;
	try {
		lastDocVersion = ctx.getCoreSession().getVersions(ref).get(
				ctx.getCoreSession().getVersions(ref).size()-1);
		BlobProperty lastBlob = (BlobProperty) lastDocVersion.getProperty("file:content");	
		return lastBlob;
	} catch (PropertyException e) {
		log.warn("[ERROR_2 Automatizacion de versionado]: "+e.getMessage());
	} catch (ClientException e1) {
		log.warn("[ERROR_3 Automatizacion de versionado]: "+e1.getMessage());
	}
	return null;
}
}
02-11-2015 09:22 AM
Thanks a lot!
 
					
				
				
			
		
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.