Tout d'abord permettez-moi de vous féliciter pour...

cancel
Showing results for 
Search instead for 
Did you mean: 
denisr
Member II

Tout d'abord permettez-moi de vous féliciter pour...

Bonjour,
Tout d'abord permettez-moi de vous féliciter pour la richesse fonctionnelle d'Alfresco. c'est tout à fait impressionant.
J'utilise la version 2.1.0 et j'essaie de customiser les propriétés de mes documents.
Pas de problème pour ajouter de nouvelles "properties" par exemple en fonction d'un nouveau "content-type".
Pas de problème non plus pour proposer à  l'utilisateur une liste fixe de valeurs au moyen d'une définition du type:

<constraints>
   <constraint name="custom:myproperty" type="LIST">
     <parameter name="allowedValues">
       <list>
         <value>value 1</value>
         <value>value 2</value>
         <value>value 3</value>
         <value>value 4</value>
       </list>
     </parameter>
   </constraint>
</constraints>

En revanche, est-ce possible de fournir une liste dynamiquement ? Typiquement, je souhaite faire provenir mes données d'une table externe.

Cordialement.
8 Replies
michaelh
Active Member

Re: Tout d'abord permettez-moi de vous féliciter pour...

Bonjour, et merci pour eux Smiley Happy

Je vois que vous avez bien avancé dans la compréhension du modèle de données, bravo.

Pour revenir à la question : il n'est pas possible de générer des listes dynamiquement en dehors d'un développement complémentaire.

Et là, je passe la main aux développeurs qui fréquentent le forum et qui auront peut être quelques pistes à donner …
denisr
Member II

Re: Tout d'abord permettez-moi de vous féliciter pour...

Bonjour,
et déjà, merci de votre réponse.
J'ai, avant de vous poster cette question un peu cherché.
Il semble en effet d'après le lien suivant http://forums.alfresco.com/viewtopic.php?t=2235&postdays=0&postorder=asc&start=45
qu'il faille développer un "Component Generator" dérivant d'un BaseComponentGenerator … ce que j'ai fait en m'appuyant sur la source LanguageSelectorGenerator.java !
Mais, par contre je ne sais pas comment relier mon component generator à la configuration d'une property c'est un peu la xml-battle pour moi.
donc pour résumer (à l'attention des développeurs voire des configurateurs):
1/ est-ce la bonne démarche l'histoire du custom component Generator ?
2/ si oui comment relier la configuration d'une propriété à l'utilisation du custom component generator?
Ouf! J'espère avoir été clair.
denisr
Member II

Re: Tout d'abord permettez-moi de vous féliciter pour...

J'ai trouvé en suivant les instructions fournies dans:
http://forums.alfresco.com/viewtopic.php?t=6840

sauf la partie dev où là mon code est le suivant:
public class MyComponentGenerator extends BaseComponentGenerator {

   public UIComponent generate(FacesContext context, String id) {
      // TODO Auto-generated method stub
        UIComponent component = context.getApplication().
        createComponent(UISelectOne.COMPONENT_TYPE);
        FacesHelper.setupComponentId(context, component, id);       
 
        // create the list of choices
        UISelectItems itemsComponent = (UISelectItems)context.getApplication().
        createComponent("javax.faces.SelectItems");
 
        itemsComponent.setValue(getMyItems());
  
        // add the items as a child component
        component.getChildren().add(itemsComponent);
  
        return component;
   }

   protected SelectItem[] getMyItems()
      {
      int kval;
          SelectItem[] items=new SelectItem[10];
         
          for(kval=0;kval<10;kval++){
           items[kval] = new SelectItem("string"+kval,"Choix" + kval);
          }
            return items;
      }

}
Et donc je n'ai plus maintenant qu'à aller chercher la valeur de mes items dans ma base de données.
Smiley Wink :cool:
rivarola
Active Member

Re: Tout d'abord permettez-moi de vous féliciter pour...

Bonjour,

Tu t'en es très bien tiré sans les développeurs du forum visiblement. Smiley Happy Si tu peux poster une synthèse pour les autres à la fin, ce serait super.
Concernant les ComponentGenerator, le principe va bientôt être étendu aux associations, ce qui permettra de faire des listes dynamiques aussi, ce qui est très souvent demandé.
denisr
Member II

Re: Tout d'abord permettez-moi de vous féliciter pour...

Bonjour,
donc voici une tentative de synthèse qui j'espère sera compréhensible à tous les développeurs.

Donc le but du jeu est donné par le titre du post.

Avec Alfresco, il est possible de définir de nouvelles propriétés (property ou properties) à associer soit à tout document soit à un content-type spécifique, soit par exemple à un espace de données ( space ).
On imagine ici que l'utilisateur/configurateur du système sait déjà effectuer cette opération.

Dans mon cas, très courant pour une entreprise possédant une(s) base de données métier, il s'agit d'éviter que n'importe quelle valeur soit rentrée pour une property donnée et quand on veut rajouter une nouvelle valeur possible on passe par la base de données métier (du moins à ce stade de l'intégration d'Alfresco i.e. un simple "proof of concept").

Il faut donc que notre property ne puisse être alimentée que par une liste de valeurs données et provenant directement de notre table.

Pour ce faire:
1. développer un ComponentGenerator en étendant la classe BaseComponentGenerator (on pourra s'appuyer sur le code de LanguageSelectorGenerator.java puisqu'il fourni une liste d'items adhoc à ce problème) ou sur l'exemple ci-dessus
2. écrire son objet DAO à appeler dans la classe ci-dessus et qui fournira la liste des items provenant de la dataware house
3. configurer 2 fichiers xml qui sont:
    webapps/alfresco/WEB-INF/faces-config-custom.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
                              "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>

   <!– *************************************************************** –>
   <!– Empty JSF config file to prevent errors being thrown during JSF –>
   <!– initialisation. Overwrite this file with your custom version.   –>
   <!– *************************************************************** –>
  <managed-bean>
        <description>
                Bean Test
        </description>
        <managed-bean-name>MyComponentGenerator</managed-bean-name>
        <managed-bean-class>MyComponentGenerator</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
  </managed-bean>

</faces-config>
et
tomcat/shared/classes/alfresco/extension/web-client-config-custom.xml

    <config evaluator="string-compare" condition="Action Wizards">
         <subtypes>
          <type name="custom:Player" />
       </subtypes>
    </config>

    <config evaluator="string-compare" condition="Content Wizards">
         <content-types>
            <type name="custom:Player" />
         </content-types>
    </config>

   <config evaluator="node-type" condition="custom:Player">
        <property-sheet>
            <show-property name="custom:PlayerName" />
         </property-sheet>
    </config>

      <!– Lists the custom aspect in business rules Action wizard –>
    <config evaluator="string-compare" condition="Action Wizards">
         <subtypes>
          <type name="custom:Team"/>
       </subtypes>
    </config>

    <config evaluator="string-compare" condition="Content Wizards">
         <content-types>
            <type name="custom:Team" />
         </content-types>
    </config>

   <config evaluator="node-type" condition="custom:Team">
        <property-sheet>
            <show-property name="custom:TeamName" />
            <show-property name="custom:Players" component-generator="MyComponen
tGenerator"/>
         </property-sheet>
    </config>
Voilà.
argaze20
Member II

Re: Tout d'abord permettez-moi de vous féliciter pour...

slt
je ne sais pas ou mettre le fichier  MYComponentGenerator.java

et merci pour cette article
dgenard
Active Member

Re: Tout d'abord permettez-moi de vous féliciter pour...

A ce sujet, voir aussi le blog : http://blogs.alfresco.com/jbarmash/?p=6

Denis
argaze20
Member II

Re: Tout d'abord permettez-moi de vous féliciter pour...

merci je vais voir