J'ai avec une content type personnalisé ajouté des...

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

J'ai avec une content type personnalisé ajouté des...

Bonjour,

J'ai avec une content type personnalisé ajouté des metadonnées "custom".

Pour un champ, je voudrais pouvoir controler la saisie de l'utilisateur (sur l'evenement onBlur par exemple).

Pour un autre champ, je voudrais pouvoir ajouter un bouton sur la droite du champ afin d'ouvrir une fenetre (script PHP par exemple) qui affichera une valeur calculée.  L'utilisateur confirmerait par ok la valeur qui serait alors copiée dans le zone du champs dans le formulaire alfresco.

Dans quelle direction dois-je chercher afin d'apprendre a mettre ceci en oeuvre ?

Merci

Dom
3 Replies
rivarola
Active Member

Re: J'ai avec une content type personnalisé ajouté des...

Dans quelle direction dois-je chercher afin d'apprendre a mettre ceci en oeuvre ?
Bonjour,

Il est sage de demander la direction et pas la solution toute cuite car je doute que ce soit simple.
Il y a peut-être plus simple mais tu peux te pencher du côté des "component generator" qui sont utilisés pour générer dynamiquement les composants JSF utilisés dans les property sheets.
Un début d'explication est fourni dans le Wiki : http://wiki.alfresco.com/wiki/Displaying_Custom_Metadata#Advanced_Property_Sheet_Configuration.
Tu peux créer ta classe de UIComponent + son component generator associé et déclarer ce dernier dans la config de la property sheet pour qu'il soit utilisé pour ta métadonnée custom. Ca te permettra de maîtriser le rendu HTML de ton composant et de cracher du Javascript si tu veux. C'est un peu lourd et il faut bien connaître JSF mais ça marche.
nahanni
Member II

Re: J'ai avec une content type personnalisé ajouté des...

Bonjour,

Après quelques jours je me remets à travailler sur ce point.
Tout d'abord merci pour la réponse de rivola, mais j'ai encore besoin d'aide Smiley Happy

Quelle est la distinction entre créer une classe de UIComponent et créer son component generator. Il me semble que c'est la même chose non ?

En partant de component generator TextFieldGenerator.java, j'ai voulu essayer d'ajouter du javascript pour gérer l'événement onChange avec la ligne

component.getAttributes().put("onChange", "alert('Hello !');");

Mais la page générée ne contient pas le javascript alors qu'elle contient bien la modification que j'ai fait sur l'attribut maxlength du TextFieldGenerator d'origine. Smiley Sad


Ou alors, il faut que je descende plus bas au niveau de myfaces pour définir un nouveau type de composant et l'utiliser dans mon component generator avec le code suivant :

      UIComponent component = context.getApplication().createComponent("nom_composant_a_moi");

Je me suis penché sur de la doc JSF / myFaces et c'est effectivement pas simple pour un débutant dans cette techno. :rolleyes:

Merci
rivarola
Active Member

Re: J'ai avec une content type personnalisé ajouté des...

Bonjour,

Effectivement ce n'est pas simple, et je ne sais pas si j'arriverai à m'expliquer de manière claire car je n'ai pas mon environnement de développement avec moi.
Le UIComponent est un composant JSF ; le component generator est un outil qu'Alfresco a inventé pour créer à la volée des UIComponent sans les lire depuis un JSP. Grosso modo pour changer de UIComponent il faut changer de component generator actuellement.
Ensuite pour changer le HTML généré il faut travailler au niveau du renderer (voir JSF). Je n'ai pas le code du TextFieldGenerator sous les yeux et je ne sais plus s'il est branché sur un composant JSF natif ou sur un composant custom Alfresco.
Je ne pense pas qu'on puisse ajouter des attributs aussi simplement que ça. Et en plus il ne faut pas que ça affecte tous les autres champs texte de l'application. C'est pourquoi je crois plus en la création d'un component generator ET de son UIComponent associé dans ton cas. Il pourrait être "self rendering", c'est-à-dire générer lui-même son HTLM spécifique comme le fait Alfresco dans la plupart de ses composants (le point d'entrée est la méthode encodeBegin, dans laquelle on voit bien le code HTML généré). Dans tous les cas il faut s'inspirer des composants Alfresco existants.