Alfresco 4.2f : corriger l’exécution d’un behaviour Javascript pour l’évènement « onUpdateProperties »

Pour les lecteurs réguliers de ce blog, ce titre peut évoquer quelque chose de connu.
En effet, il y a deux ans et demi, j’écrivais un article intitulé «  » (à lire avant d’aller plus loin).

Quelques versions d’Alfresco sont sorties depuis 2011, mais les choses ne se sont pas améliorés, malheureusement. Les problèmes rencontrés avec la version 3.4 sont toujours d’actualité en 4.2. Problème supplémentaire : la correction proposée ne fonctionne plus !

Ce nouveau problème est lié au fait que les propriétés ne sont plus stockées dans un objet du type HashMap, mais dans un objet du type ValueProtectingMap. La modification opérée pour Alfresco 3.4 ne fonctionne donc plus en l’état et doit être adaptée pour utiliser ce nouveau type.

Seule notre classe CustomValueConverter est à revoir :

public class CustomValueConverter extends ValueConverter {
	public Serializable convertValueForScript(ServiceRegistry services, Scriptable scope, QName qname, Serializable value) {
		value = super.convertValueForScript(services, scope, qname, value);
		if (value instanceof HashMap) {
			ScriptableHashMap<Serializable, Serializable> elements;
			elements = new ScriptableHashMap<Serializable, Serializable>();
			HashMap<Serializable, Serializable> valueHashMap = (HashMap<Serializable, Serializable>) value;
			for (Object key : valueHashMap.keySet()) {
				Serializable propValue = valueHashMap.get(key);
				elements.put(key.toString(), this.convertValueForScript(services, scope, qname, propValue));
			}
			value = elements;
		} else if (value instanceof ValueProtectingMap) {
			ScriptableHashMap<Serializable, Serializable> elements;
			elements = new ScriptableHashMap<Serializable, Serializable>();
			for (Object key : ((ValueProtectingMap<Serializable, Serializable>)value).keySet()) {
				Serializable propValue = ((ValueProtectingMap<Serializable, Serializable>) value).get(key);
				elements.put(key.toString(), this.convertValueForScript(services, scope, qname, propValue));
			}
			value = elements;
		}
		return value;
	}
}

Les autres modifications restent valides.

La correction pour la version 3.4 n’avait pas été réintégrée par Alfresco. Espérons que celle-ci le soit.
On pourra s’en assurer en suivant la JIRA ALF-20040.

Cette entrée a été publiée dans Alfresco, avec comme mot(s)-clef(s) , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Protected by WP Anti Spam