Mise en place des tris multiples

Généralités

Introduction

Ce document décrit la mise en place des tris multiples au niveau de la couche de présentation (feuilles de style). Cette possibilité est induite par une amélioration au niveau du socle technique.

Principes

Le tri final est réalisé en concaténant les clés publiques de tris et en les séparant par le caractère « | ».

Exemple : cinematic=sort(0,-NOM|COD|TYP)

Il n’y a pas de limite quant au nombre de tris que l’on peut proposer. Si un tri n’existe pas (clé publique), il n’est pas pris en compte.

Par contre, si une clé privée demandée n’est pas définie dans la configuration, le socle remonte une erreur : il s’agit d’une erreur de conception.

Le caractère « – » provoque un tri descendant sur cette clé sauf si une clé contenant le « – » existe déjà. Dans ce cas, elle est prise en compte sans changement.

Fonctionnement

Fichier de configuration

Couche action

Le concept de paramètre passé à une action évolue et fait apparaître la notion de paramètre multi-valeurs, et donc d’occurrences.

Nouvelle déclaration de l’action sort :

< action name =" sort " class =" fr.ACE.technicalframework.application.action.Sort ">

< required >

< param name =" businessView " maxOccurs =" 1 " minOccurs =" 1 " type =" BusinessView "/>

</ required >

< optional >

< param name =" key " maxOccurs =" unbounded " minOccurs =" 1 " type =" String "/>

</ optional >

</ action >

Couche application

Les tris doivent être définis sur un seul champ afin de faciliter la compréhension finale (mais ce n’est néanmoins pas une obligation).

Les clés définis dans la section ViewDef doivent donc être définies sur un seul champ (ascendant et descendant) dans un but de lisibilité.

D’autre part, la norme ACE est de positionner les tris descendants avec le préfixe « - ». Par exemple, si « NOMPRO » est le tri ascendant, alors « –NOMPRO » sera le tri descendant.

Feuilles de style

Un template (dans « e-GX.xsl ») permet de définir le helper Javascript définissant le contexte des tris. Le code est le suivant :

< xsl:template name =" GnxSortButton ">

< xsl:param name =" sort_key " select =" '' "/>

< script type =" text/javascript " charset =" iso-8859-1 ">

gnx.MultiSort.getInstance().setEntity( < xsl:value-of select =" $ENTITY "/> );

gnx.MultiSort.getInstance().setFrame(" < xsl:value-of select =" $FRAME "/> ");

gnx.MultiSort.getInstance().setTarget("_self");

gnx.MultiSort.getInstance().setParams(" < xsl:call-template name =" GnxTemporaire "/> ");

gnx.MultiSort.getInstance().setDefaultSort(" < xsl:value-of select =" $sort_key "/> ");

</ script >

< a href =" # " onclick =" gnx.MultiSort.getInstance().switchDisplay(); " class =" picto ">< img alt =" Tris multiples " src =" ../langue/media/ACE_standard/multisort.gif "/></ a >

</ xsl:template >

Il dispose d’un paramètre optionnel : sort_key.

Ce paramètre doit être passé lors de l’appel pour connaître la valeur publique du tri « courant », afin de proposer les tris par défaut dans le popup de sélection. Cette valeur est habituellement donnée par l’attribut sort_key du premier niveau de vue dans une ViewStruct (dans le flux de présentation).

Le template GnxSort a lui aussi été adapté afin de fournir la stricte définition de chaque tri en définissant un objet par tri.

Partie Javascript

Pour fonctionner, le Javascript à besoin de misc.js et de dragDrop.js qui centralisent certains nouveaux Javascript, en particulier la gestion des HashMap et la possibilité de « dragger » et repositionner un élément (un conteneur de type div par exemple) à l’écran.

Il a été prévu de pouvoir piloter plusieurs « multi-tris » dans la même page, le template XSL défini plus haut est une simplification d’accès via une méthode statique s’apparentant à un singleton. Ce singleton permet de récupérer une instance et une seule de l’objet gnx.MultiSort.

Chaque tri est défini via un objet gnx.MultiSort.SortDef, principalement sur les informations suivantes :

  • Libellé : méthode setLabel(String)
  • Clé ascendante : méthode setKeyAsc(String)
  • Clé descendante : méthode setKeyDesc(String)

Les méthodes principales de l’objet gnx.MultiSort sont les suivantes :

  • setEntity : définition du paramètre entity (paramètre entity sur l’URL)
  • setFrame : contexte applicatif (paramètre frame sur l’URL)
  • setTarget : frame destinataire de l’URL générée par la demande du tri
  • setParams : paramètres d’URL complémentaires (lié à la page, dans le template GnxSort, on exploite GnxTemporaire pour fournir à nouveau tous les paramètres de l’URL source)
  • setDefaultSort : le tri par défaut (généralement trouvé sur l’attribut sort_def de la VueUtilisateurCourantSociete)

Packaging

Présentation

L’exploitation des tris multi-clés nécessite d’être en version 1.3 ou supérieure. La prise en compte étant effectuée en premier lieu au niveau du socle, la librairie impactée est « technical_framework.jar ».

D’autre part, la ACE 1.3 met à disposition le début du framework Javascript proposé par ACE, en particulier :

  • misc.js qui doit être importé avant tous les autres JS : traite tous les sujets généraux (HashMap …)
  • dragDrop.js doit être importé lui aussi pour permettre le déplacement d’un conteneur à l’écran
  • multiSort.js permet de générer une fenêtre popup autorisant la sélection des tris à effectuer

Un nouveau template est disponible dans le mode web.xsl afin de définir une méthode unique d’accès au multi-tri.

D’autre part, le template GnxSort a lui aussi été modifié afin de générer les helpers de définition pour chacun des tris disponibles à l’écran. Tout tri doit donc être affiché avec ce template, c’est une condition sine qua non à son fonctionnement.

Exemple

L’appel doit s’effectuer de la manière suivante dans une feuille de style :

< th >

< xsl:call-template name =" GnxSortButton ">

< xsl:with-param name =" sort_key " select =" /layout_data/VueUtilisateurCourantSociete/@sort_key "/>

</ xsl:call-template >

</ th >

Exemple sur la liste des produits dans le portail produits (I_PRO_F) :

Dans cet exemple, l’icône est placé en en-tête de dernière colonne :

Il suffit de cliquer sur l’icône pour faire apparaitre la sélection des colonnes à trier :