Tri des types lors de l'import Webtop

De EjnTricks

Suite à une question sur le forum powerlink, cette extension a été réalisée afin de pouvoir trier les listes des types sélectionnables lors de l'importation de documents.

L'objectif de cette extension est donc de trier la liste, construite à partir du dictionnaire de données, en fonction du label du type. Cependant, cette extension ne permet pas de choisir les modes de tri, attribut et ordre, ce qui pourrait être réalisée dans une autre étude.


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


Extension version 6.6

Le code explicité dans ce chapitre s'applique pour la version 6.6 de Webtop. Le code est disponible à l'adresse http://www.jouvinio.net/svn/study/branches/documentum/6.6/Webtop/Object%20types%20list%20ordered%20on%20import/


Study icon.png Analyse

XML format icon.png Définition composant

Le composant import est défini dans le fichier webcomponent/config/library/contenttransfer/importcontent/import_component.xml avec la configuration suivante:

Les contrôles des pages sont construits au niveau de la classe d'instance. Il est donc nécessaire de l'étudier afin de comprendre comment la liste des types est peuplées.


Java format icon.png Classe instance

Comme pour tout composant, la méthode onInit est exécutée, et contient généralement les appels pour construire les composants inclus. Le contenu de cette méthode contient un appel à la méthode initControls qui paraît intéressante de part son nom.

Le contenu de la méthode initControls n'est rien d'autre qu'un enchaînement d'exécution de méthodes. Encore une fois, le nom des méthodes va orienté l'analyse, et initTypeListControl semble être à étudier.

Enfin, la méthode initTypeListControl est utilisée afin de construire une instance de ScrollableResultSet qui est affectée à la liste des types disponibles, récupérée depuis la fonction getTypeListControl.

A ce stade, le point d'entrée pour l'extension est identifié. La fonction createTypesResultSet va appeler la fonction getTypes en fonction du contexte de navigation, de la configuration et du type en cours de création, puisqu'il est possible d'importer un répertoire.

La fonction getTypes est beaucoup plus complexe. La liste des types est mis dans un cache au niveau de la session HTTP, ce qui est déjà une amélioration par rapport aux versions 5 (au moins), car cela économise des requêtes. Si l'utilisateur affiche ce composant pour la première fois, le cache ne contient pas cette liste, et une requête est exécutée sur les types dmi_type_info et dmi_dd_type_info, à l'aide de la classe com.documentum.web.formext.docbase.TypeUtil, qui ne sera pas étudiée dans le cadre de cet article. Une fois les types récupérés, ils sont stockés dans une instance de com.documentum.web.form.control.databound.TableResultSet. Cette dernière est ensuite mise dans une instance de la classe privée CachedResultSet implémentant l'interface com.documentum.web.form.control.databound.ScrollableResultSet.


Icon Personnalisation.png Mise en place

Webtop Component Icon.png Extension composant import

Une fois l'analyse réalisée, l'extension est particulièrement simple.

XML format icon.png La configuration du composant doit être modifiée ainsi:

Elément configuration Valeur Description
class fr.amexio.ejn.webcomponent.library.contenttransfer.importcontent.ImportContentSortTypes Il est nécessaire de modifier la classe d'instance pour mettre en place le tri.

La configuration est placée dans le fichier webtop/custom/config/webcomponent/library/contenttransfer/importcontent/import_component.xml.

Java format icon.png La classe d'instance est modifiée afin de modifier l'instance ScrollableResultSet retournée. Comme son instance est une classe privée, il sera nécessaire de construire une nouvelle instance avec une classe publique, afin d'éviter d'en créer une nouvelle. De plus, il est souhaité de trier les informations, ce qui est disponible dans la classe com.documentum.web.form.control.databound.TableResultSet.

Le fonctionnement est donc aussi simple que:

  • Récupérer la position des différentes informations, label, nom et description. Ces positions seront utilisées afin de récupérer les valeur depuis la liste construite en standard.
  • Parcourir la liste afin de convertir les valeurs dans un tableau d'objet. Attention, il faut que les informations soit placées exactement dans le même ordre que la définition des colonnes.
  • Puis construction d'une instance de TableResultSet</code, sur laquelle la fonction <code>sort est exécutée pour trier les données dans l'ordre ascendant, argument iSortDirection égal à 0, sur la valeur e label_text et utilisant le mode de comparaison pour les chaînes de caractères, argument iSortMode égal à 0.

Attention, pour cette extension il n'y a pas de mise en place de cache. Ainsi le tri est effectué à chaque exécution de la fonction. Il serait possible de reproduire le mécanisme standard, mais cela implique la compréhension de code placé dans des classes et variables privées.