Variables en Xsl

Bonjour
J’ai bien compris qu’au niveau des variables en Xsl on était pas mal limité (pas de calcul, d’incrémentation…), c’est bien dommage.
J’aimerai juste savoir s’il est possible de faire cela :
En Free Xsl j’ai un premier transformer qui dit ça :

<!-- on attaque le sous model 'rubrique' -->
<xsl:for-each select="sp:rqeee">
<xsl:variable name="position_group" select="position()"/>
<xsl:value-of select="getContent(gotoSubModel(),'questions')" disable-output-escaping="yes"/>
</xsl:for-each>

Dans le transformer du SubModel j’aimerai récupérer la valeur de la variable « position_group » et donc avoir quelque chose comme ça :

<!-- on attaque le sous model 'question' -->
<xsl:for-each select="sp:qrqeee">
	<row>
		<qid><xsl:value-of select="position()"/></qid>
        <gid><xsl:value-of select="$position_group"/></gid>
		...			
	</row>
</xsl:for-each>

Possible ?
J’ai pas d’erreur mais ça ne fonctionne pas :frowning_face:
Sinon une idée pour réaliser quelque chose qui ressemblerait à ça ?
Merci pour votre aide.
Christophe

La fonction xpath interne getContent() ne permet pas de passer une variable mais il y a plusieurs moyens de passer des infos d’une transf à un autre, notamment avec des buffers ou des variables de dialog qui peuvent même contenir des objet Java qui eux peuvent être incrémentés.

Le mieux pour voir comment tout ça marche est de récupérer les sources de Opale ou Dokiel pour y trouver des exemples.

Dans Opale, on a des galléries d’images qui peuvent être de plusieurs tailles. Le transf /aurora/web/transf/Re/gallery.transf effectue :

<sm:freeSelect xpath="execute(setDialogVar('fImagesSize', returnFirst(op:galleryM/sp:size, 'small')))"/>

pour mémoriser la taille des images voulues dans la variable fImagesSize puis dans /aurora/web/transf/binaries/image/image@gal.transf
On trouve :

<sm:sizeBounds maxHeightInPx="if(getDialogVar('fImagesSize') = 'small', genProp('bin.size.gallery.small-int',80), if(getDialogVar('fImagesSize') = 'medium', genProp('bin.size.gallery.medium-int',180), genProp('bin.size.gallery.large-int',250)))"/>

Pour définir la taille maxi des images en fonction de la variable fImagesSize.

Dans Dokiel, dans au niveau de la publication Print des arbres de concept, dans /dkCore/genPrint/transf/content/fundamentalUnits/tree/tree@co.transf

On utilise des buffers pour stocker des objet java utilisés comme compteurs afin de calculer combien de combien de nœuds notre arbre de concepts est fait. Ceci pour ensuite décider de la stratégie de génération.

Merci @sam :smiley:
Donc en Xsl je peux utiliser ça :

<xsl:for-each select="sp:rqeee">
	<xsl:variable name="position_group" select="setDialogVar('PositionGroup', position())"/>
	<xsl:value-of select="getContent(gotoSubModel(),'questions')" disable-output-escaping="yes"/>
</xsl:for-each>

Et récupérer la valeur dans un autre transformer avec
getDialogVar('PositionGroup')

ça à l’air de fonctionner, mais ça me semble si simple que je ne suis pas sûr d’utiliser le bon Tag XSLT (<xsl:variable…)
Vous me le confirmez ?
Merci
Christophe

je préfère faire :

<xsl:value-of select="execute(setDialogVar('PositionGroup', position()))"/>

La fonction execute() permet d’exécuter un fonction xpath tout en garantissant qu’il y aura aucune sortie.

Ok encore merci :+1: