Bonjour à Tous et à Toutes,J'utilise actuellement...

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-10-2007 06:30 AM
J'utilise actuellement Alfresco 2.0 sous windows avec Mysql,Tomcat 5.5 et le JDK 1.5
J'ai créé une nouvelle classe qui hérite de la classe
org.alfresco.repo.dictionary.constraint.ListOfValuesConstraintCette classe me permet d'aller chercher dans une nouvelle instance mysql les données contenues dans une table, mettre ces données dans une ArrayList et de passer cette liste à la méthode
setAllowedValuesde la classe héritée. De cette manière je peux bénéficier d'une contrainte de type LIST dynamique. Voici le code de ma classe
package be.test.alfresco.constraint;import java.sql.Connection;import java.util.ArrayList;import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;import org.apache.commons.logging.Log;[quote]import org.apache.commons.logging.LogFactory;import be.test.alfresco.utility.db.DbUtils;import be.test.alfresco.utility.db.SqlHelper;public class ListCiviliteConstraint extends ListOfValuesConstraint { private static Log logger = LogFactory.getLog("be.nsi.alfresco.constraint.DbUtils"); public ListCiviliteConstraint() { super(); super.setAllowedValues(getCivilite()); } /** * Va rechercher la liste des Civilites dans la base de donnée * @return la liste des Civilites */ private ArrayList getCivilite(){ ArrayList civilites=null; Connection conn=null; try { conn = DbUtils.getDbConnection(); civilites = SqlHelper.getAllCivilitesType(conn); DbUtils.closeDbConnection(conn); } catch (Exception e) { logger.error(e.getMessage()); }[/quote]return civilites; }}
Aprés avoir testé (avec une classe test) cette classe tout fonctionne correctement.C'est maintenant que cela ce complique

J'ai un fichier customModel.xml dans lequel :
Je défini ma contrainte comme ceci
<constraints> [b]<constraint name="Identification:ctrCivilite" type="be.test.alfresco.constraint.ListCiviliteConstraint"> </constraint>[/b] </constraints>
J’applique cette contrainte sur un custom aspect<aspect name="Identification:Personne"> <title>Identification Personne</title> <properties> <property name="Identification:Civilite"> <title>Civilite</title> <type>d:text</type> <constraints> [b]<constraint ref="Identification:ctrCivilite" />[/b] </constraints> ……… </property>
Je génère un jar avec mes nouvelles classes que je place dans le répertoire webappsalfrescoWEB-INFlibde tomcat
Je démarre Alfresco et la j'obtiens le message suivant dans le log file
org.alfresco.service.cmr.dictionary.DictionaryException: Constraint type 'be.test.alfresco.constraint.ListCiviliteConstraint' on constraint 'Identification:ctrCivilite' is not a well-known type or a valid Constraint implementationOn dirait que ma nouvelle classe n'a pas été correctement déployée.
at org.alfresco.repo.dictionary.M2ConstraintDefinition.resolveInternal(M2ConstraintDefinition.java:176)
at org.alfresco.repo.dictionary.M2ConstraintDefinition.resolveDependencies(M2ConstraintDefinition.java:117)
at org.alfresco.repo.dictionary.CompiledModel.<init>(CompiledModel.java:107)
Si quelqu'un à une idée il est le bien venu

Merci d'avance
- Labels:
-
Archive

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-11-2007 06:36 AM
Voici la solution
1. Modier le fichier customModel.xml
<constraints> <constraint name="Identification:ctrCivilite" type="be.nsi.alfresco.constraint.ListCiviliteConstraint"> <parameter name="allowedValues"> <list> </list> </parameter> <parameter name="caseSensitive"><value>true</value></parameter> </constraint>
En effet comme on herite de la classe org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint on herite aussi de ces propriétés!!!!Ensuite il n'y aplus qu'a redefinir les méthodes getAllowedValues (peut être pas obligatoire) et setAllowedValues
Voici le nouveau code de ma classe
package be.test.alfresco.constraint;import java.sql.Connection;import java.util.ArrayList;import java.util.List;import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import be.nsi.alfresco.utility.db.DbUtils;import be.nsi.alfresco.utility.db.SqlHelper;public class ListCiviliteConstraint extends ListOfValuesConstraint { private static Log logger = LogFactory.getLog("be.nsi.alfresco.constraint.DbUtils"); public ListCiviliteConstraint() { super(); logger.debug("Appel supperConstructeur"); //setAllowedValues(getCivilite()); } public List<String> getAllowedValues() { logger.debug("getAllowedValues "); return super.getAllowedValues(); } public void setAllowedValues(List allowedValues) { if (allowedValues == null) { allowedValues=getCivilite(); } logger.debug("setAllowedValues Avant super.set"); super.setAllowedValues(allowedValues) ; logger.debug("setAllowedValues Aprés super.set"); } /** * Va rechercher la liste des Civilites dans la base de données * @return la liste des Civilites */ private ArrayList<String> getCivilite(){ ArrayList<String> civilites=null; Connection conn=null; try { conn = DbUtils.getDbConnection(); civilites = SqlHelper.getAllCivilitesType(conn); DbUtils.closeDbConnection(conn); } catch (Exception e) { logger.error(e.getMessage()); } return civilites; }}
et voila…
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-18-2007 10:43 PM
be.nsi.alfresco.utility.db.SqlHelper qui contiennent les fonctions de connexion à la base de donnée ainsi que la fonction qui te retourne la liste des enregistrements qui constitue ta liste de civilité. Serait-il possible de mettre en ligne également les 2 imports en questions ?
Je te remercie d'avance.
Dans mon cas de figure, je souhaite développer dans un même aspect 3 listes qui sont conditionnées entre elles. Le choix sur la première doit réaliser un filtre automatique sur la seconde, quand à la troisième aucun filtre ne doit être mis en place et doit afficher tous ses éléments. Je souhaite également grâce à ton exemple rendre ces liste dynamiques grâce à une base de données mySQL.
Je cherche également à faire en sorte qu'une fois ces choix validés, l'utilisateur ne puisse plus interagir sur les listes.
D'avance Merci.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-22-2007 09:08 AM
Bon j'ai fini par trouver comment écrire le code des 2 routines, et cela m'a permis d'y voir un peu plus claire dans le développement Java. Si cela interesse quelqu'un….
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-23-2007 05:10 AM
Bon j'ai fini par trouver comment écrire le code des 2 routines, et cela m'a permis d'y voir un peu plus claire dans le développement Java. Si cela interesse quelqu'un….Bonjour Huberd,
J'ai approximativement le même besoin que toi (listes conditionés entre elles), et je me perd un peu dans le développement Java, pourrais-je avoir quelques pistes ?
Pour l'instant je bloque sur la façon de récupérer la valeur d'une liste, afin de l'utiliser dans la contrainte de l'autre…

Merci d'avance
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-23-2007 06:43 AM
Codes-tu en dur les login et mot de passe dans ton code source ou utilises-tu le fichier de configuration d'Alfresco ?
Concernant la génération de liste dynamlique en fonction des choix de la précédente, j'ai bien peur que cela ne soit pas possible, car le code Java est executé une seule fois au démarrge de Tomcat (ou JBoss) et charge les fichiers models en mêmeoire avec les listes.
Si quelqu'un à une solution, je pense que remi et moi même serons tous les 2 preneurs

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-22-2007 08:31 AM
Etant aussi débutant dans l'univers Java, je souhaiterais vivement que tu mettes en ligne les 2 routines pour la connexion à la db.
En effet je souhaite créer une liste deroulante qui cherche ses valeures dans une table mysql.
Pour ma part je code en dur login et password…
Merci beaucoup 🙂
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-25-2007 03:34 AM
Excusez moi d'etre impatient, mais je souhaitais vraiment mettre en place cette fameuse liste et là je seche énormement…
Si quelqu un pouvait répondre à mon appel…
Merci d avance

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-25-2007 11:11 AM
Voici mes classes DbUtils et SQLHelper.
En fait dans ces deux classes je définis des méthodes statiques de maniére à pouvoir appeler leurs méthodes sans les instancier. Pour me connecter à la db j'utilise jdbc. C'est pas trés joli, la meilleure solution pour moi étant de profiter de spring et d'hibernate. Mais bon pour le moment jdbc me permet de faire des tests assez rapidement.
public class DbUtils{ public static Connection getDbConnection()throws Exception{ Connection conn = null; try{ String url = "jdbc:mysql://localhost/nouvelleInstance"; String user = "nouveauUser"; String password = "nouveau mot de passe"; String driver = "org.gjt.mm.mysql.Driver"; //Charger le driver Class.forName(driver).newInstance(); //se connecter conn = DriverManager.getConnection(url,user,password); return conn; }catch(Exception e){ throw new Exception(e.getMessage()); } } public static void closeDbConnection(Connection conn)throws Exception { try { conn.close(); } catch (SQLException e) { throw new Exception(e.getMessage()); } } }
public class SqlHelper { public static ArrayList<String> getAllCivilitesType(Connection conn)throws Exception{ Statement stmt = null; String requete; ResultSet rs = null; ArrayList<String> listCivilites = new ArrayList<String>(); try { stmt=conn.createStatement(); requete = "SELECT TYPE FROM CIVILITES"; rs = stmt.executeQuery(requete); while(rs.next()){ listCivilites.add(rs.getString("TYPE")); } return listCivilites; }catch (SQLException e) { throw new Exception(e.getMessage()); } finally{ try { rs.close(); stmt.close(); } catch (SQLException e) { throw new Exception(e.getMessage()); } } } }
CIVILITES est une nouvelle table de ma nouvelle instance mysql et contient une colonne TYPEVoila. Bonne chance

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-26-2007 05:38 AM
Un grand merci à toi, ça marche au poil !

