2010-07-07 5 views
1

J'essaie de suivre les exemples fournis dans this post, pour créer une contrainte de liste dynamique dans Alfresco 3.3.Contrainte de liste dynamique sur Alfresco

Donc, j'ai créé ma propre classe extension ListOfValuesConstraint:

public class MyConstraint extends ListOfValuesConstraint { 
    private static ServiceRegistry registry; 

    @Override 
    public void initialize() { 
     loadData(); 
    } 

    @Override 
    public List getAllowedValues() { 
     //loadData(); 
     return super.getAllowedValues(); 
    } 

    @Override 
    public void setAllowedValues(List allowedValues) { 
    } 

    protected void loadData() { 
     List<String> values = new LinkedList<String>(); 
     String query = "+TYPE:\"cm:category\" [email protected]\\:description:\"" + tipo + "\""; 
     StoreRef storeRef = new StoreRef("workspace://SpacesStore"); 
     ResultSet resultSet = registry.getSearchService().query(storeRef, SearchService.LANGUAGE_LUCENE, query); 
     // ... values.add(data obtained using searchService and nodeService) ... 

     if (values.isEmpty()) { 
      values.add("-"); 
     } 
     super.setAllowedValues(values); 
    } 
} 

référence ServiceRegistry est injecté au printemps, et il fonctionne très bien. Si j'appelle seulement loadData() de initialize(), il exécute la requête Lucene, obtient les données, et la liste déroulante l'affiche correctement. Seulement que ce n'est pas dynamique: les données ne sont pas actualisées à moins que je ne redémarre le serveur Alfresco.

getAllowedValues() est appelée chaque fois que l'interface utilisateur doit afficher une propriété ayant cette contrainte. L'idée sur le poste visé est d'appeler loadData() de getAllowedValues() aussi, de sorte que les valeurs seront réellement dynamiques. Mais quand je fais cela, je ne reçois aucune donnée. La requête Lucene est la même, mais renvoie 0 résultats, de sorte que ma liste déroulante affiche uniquement -.

BTW, la requête que je fais est: +TYPE:"cm:category" [email protected]\:description:"something here", et c'est la même chose dans chaque cas. Cela fonctionne à partir d'initialize, mais ne provient pas de getAllowedValues.

Des idées sur pourquoi cela se passe-t-il, ou comment puis-je le résoudre?

Merci

Edit: nous sommes passés à Alfresco Community 3.3.0g hier, mais nous ayant toujours les mêmes questions.

Répondre

4

Cette dynamique liste-des-valeurs-contrainte est une mauvaise idée et je vous dire pourquoi:

Le référentiel Alfresco doit être dans un état valide tout le temps. Votre liste (dynamique) de contraintes va changer (c'est pourquoi vous voulez qu'elle soit dynamique). L'ajout d'éléments ne poserait aucun problème, mais l'édition et la suppression d'éléments le sont. Si vous supprimez un élément de votre liste d'options, les noeuds du référentiel avec cette valeur de propriété ne seront pas valides.

Vous ne serez pas en mesure de résoudre ce problème facilement. L'interface utilisateur standard échouera sur les noeuds d'état non valides. Le simple fait de modifier cette valeur et de la définir sur quelque chose de valide ne fonctionnera pas. Tu étais prévenu. Étant donné que le widget d'interface utilisateur par défaut d'une liste ListConstraint est une liste déroulante, toutes les listes déroulantes ne doivent pas être une liste ListConstraint. ListConstraints est conçu pour quelque chose comme une propriété Status: {Draft, Waiting Approval, Approved}. Pas pour une liste de noms de clients.

J'ai vu ce même sujet revenir encore et encore au cours des dernières années. Ce que vous voulez réellement, c'est laisser l'utilisateur choisir une valeur dans une liste dynamique d'options (zone de liste déroulante). C'est un problème d'interface utilisateur, pas un problème de dictionnaire-modèle. Vous devriez installer quelque chose comme ça avec le web-config-context.xml (Alfresco web UI) ou dans Alfresco Share. Le dernier est plus flexible et je recommande de prendre ce chemin.

+0

Merci pour votre réponse (je sais, je suis un peu en retard ... :). Au moment où vous avez écrit votre réponse, j'avais déjà été transféré dans un autre projet au sein de mon entreprise, donc je n'ai jamais eu l'occasion d'essayer votre suggestion. En tout cas, merci, surtout pour l'avertissement sur la liste dynamique des valeurs! – AJPerez

Questions connexes