cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sylvain Wallez <sylv...@apache.org>
Subject Re: processToDOM()?
Date Thu, 09 Feb 2006 10:03:31 GMT
gueye weuz wrote:
> J'ai une collection de documents sur exist. A chaque
> document est associé un identifiant (mon attribut)
> généré automatiquent par exist. Je veux à partir du
> nom du document (récupéré depuis un formulaire)
> retrouvé dans ma base l'identidiant qui lui est
> associé.
>  Pour cela j'ai procédé comme suit:
> 1. Récupérer le nom du document dans le flowscript
>  var paramNomDoc = form.getChild("nomDoc").getValue();
>
> 2. Ensuite je fais une requete xquery ds ma base:
> cocoon.sendPageAndWait("getUserId.xq",{nom: paramNomDoc});
>
> le pipeline:
> <map:match pattern="getDocId.xq">
> <map:generate type="xquery" src="xquery/getDocId.xq" >
> <map:parameter name="nom" value="{flow-attr:nom}" />
> </map:generate>
> <map:serialize type="xml"/>         
> </map:match>
>
> fichier xq:
>
> xquery version "1.0" encoding "ISO-8859-1";
>
> <identifiants>
> {
> for $doc in collection("/societe/document")/document
> where $doc/nom = $nom 
> 		return
> 			<identifiant>
> 				{$doc/@id}				
> 			</identifiant>
> }
> </identifiants>
>
>
> 3. J'affiche la valeur de l'id par:
> print(cocoon.request.getAttribute("id"));
>   

??? Il n'y a rien dans le code précédent qui met une valeur dans cet 
attribut !

> Je crains aussi que l'exécution de mon flowscript soit
> arrétée apres le sendPageAndWait càd qu'il m'affiche
> sur le navigateur le fichier xml.
>   

Effectivement. cocoon.sendPageAndWait envoie le résultat du pipeline au 
navigateur et suspend le flowscript.

> Est ce que cette démarche est bonne?
>   

Pas du tout :-)

Ta XQuery est ce que je qualifie de "pipeline applicatif" : c'est de la 
logique métier implémentée sous la forme d'un pipeline parce que les 
sources de données et/ou la nature du traitement s'y prêtent bien. Un 
point important est que ce type de pipeline ne constitue *pas* la 
réponse à l'utilisateur, et ne doit donc pas être utilisé dans un 
cocoon.sendPage ou un cocoon.sendPageAndWait.

La classe PipelineUtil est précisément là pour faciliter l'utilisation 
de ces "pipelines applicatifs", en permettant d'appeler un pipeline avec 
des paramètre, et en récupérant sont résultat sous différentes formes 
(stream, SAX et DOM).

Voici qq chose qui devrait mieux marcher :

  var pipeUtil = 
cocoon.createObject(org.apache.cocoon.components.flow.util.PipelineUtil);
  var doc = pipeUtil.processToDOM("getUserId.xq",{nom: paramNomDoc});
  var list = doc.documentElement.childNodes;
  for (var i = 0; i < list.length(); i++) {
      var child = list.item(i);
      print(child.firstChild.nodeValue);
  }

Sylvain

-- 
Sylvain Wallez                        Anyware Technologies
http://bluxte.net                     http://www.anyware-tech.com
Apache Software Foundation Member     Research & Technology Director


---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message