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.<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
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)
<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!!!!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…
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,
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 TYPEContent from pre 2016 and from language groups that have been closed.
Content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.