Page 1 sur 1

plusieurs actions dans une zone sensible

MessagePublié: 19 Jan 2010 à 14:35
par seroa
Bonjour à tous,

Dans un formulaire, en web, j'ai une zone sensible "Refresh"

Sur clique de cette zone sensible, je voudrais dans un premier temps lancer une fonction Javascript, puis lancer un agent Java.

Sauf que je ne peux pas appeler mon agent java en Javascript car j'ai besoin du document context dans mon agent, il n'est jamais enregistré.

A moins de pouvoir passé en paramètre le document context mais je vois pas trop.

Dans la zone de formule j'ai :

Code : Tout sélectionner
@PostedCommand([ToolsRunMacro]; "Chart_Build")"


Puis dans les propriétés HTML : Autre :
Code : Tout sélectionner
onclick="buildChart()"


Voila ce que j'obtient en code source :

Code : Tout sélectionner
<a href="" onclick="return _doClick('8525715500550C4B.ad7e7dc472c69d8fc12576a3004d92d0/$Body/0.F6A', this, null)" onclick="buildChart()";>Refresh</a>


J'ai deux fois l'évènement onclick. Seul le premier s'exécute.

Voila, si quelqu'un à une idée ?

MessagePublié: 19 Jan 2010 à 21:32
par roubech
bonjour

j'ai pas tout le contexte, mais comme ça je dirais ton lien appelle juste ton JS
et dans ton JS, en plus du traitement que tu as prévu, tu renseigne un champ HIDDEN puis tu fais un submit
Ton agant LS ou Java, tu le mets sur le WebQuerySave et tu distingue le save du refresh grace à ton champ HIDDEN

MessagePublié: 20 Jan 2010 à 08:41
par seroa
Merci Roubech,

En effet tu tiens la solution. Si j'ai bien compris, le champ HIDDEN est du style SaveOptions que je laisse à "0" pour qu'il n'y ai pas de sauvegarde. Le submit en JS va lancé mon agent Java qui est dans WebQuerySave.

Merci beaucoup.

MessagePublié: 20 Jan 2010 à 10:00
par roubech
ce que j'appelle un champ HIDDEN, c'est un champ qui est editable, visible au sens Notes, mais caché en web avec l'attribut HTML "TYPE=HIDDEN"

MessagePublié: 20 Jan 2010 à 10:22
par seroa
Salut,

Ca fonctionne bien, l'agent est bien exécuté, sauf que le submit() me renvoi à une page Form processed.

Et si je fais un href pour revenir à mon form initial, je revient à mon form vierge.

MessagePublié: 20 Jan 2010 à 11:32
par seroa
C'est bizare, pourquoi submit de JS ne fonctionne pas comme @PostedCommand([FileSave]);

Avec @PostedCommand([FileSave]); , si SaveOptions est à "0", il revient au formulaire sans enregistrer, avec submit, il enregistre pas mais me renvoi tout de même à Form Processed.

Du coup je perd tout, car si je met un $$Return, il recharge le Formulaire.

MessagePublié: 20 Jan 2010 à 14:12
par stloje
Est-ce que tu désires rester sur le formulaire lors de l'appel des deux fonctions?

Si c'est le cas, il est préférable de passer par Ajax ou de créer une nouvelle fenêtre en JS.

Pour faire simple, tu exécutes ta fonction JS. Ensuite, tu crées une nouvelle fenêtre avec window.open () en passant en paramètre l'adresse url de ton agent Java

Voici un lien explicant la fonction indiquée en haut
http://www.toutjavascript.com/reference/reference.php?ref=open&parent=6

MessagePublié: 20 Jan 2010 à 14:26
par seroa
Oui c'est ça, en fait j'ai besoin d'appelé une fonction javascript puis un agent tout en restant dans le formulaire.

J'ai pensé à faire mon appel en ajax, le problème c'est que j'ai besoin du Document context dans mon agent Java.

Ma fonction javascript à juste pour but de faire un innerHTML avant le lancement de l'agent. Peut etre qu'il y a un autre moyen de le faire.

MessagePublié: 20 Jan 2010 à 14:40
par stloje
J'imagine que lorsque tu appelles un agent Java, tu accèdes aux mêmes propriétés qu'en LS. Donc, tu devrais avoir accès au "document context", mais il doit être vide. Lors de l'appel de ton agent, passe en paramètre les valeurs que tu as besoin et tu les récupères à partir du champ Query_String. C'est ce que je fais avec LS.

MessagePublié: 20 Jan 2010 à 14:57
par seroa
Oui c'est pareil en Java avec

Code : Tout sélectionner
String query = context.getItemValueString(DominoDoc.QUERY_STRING_DECODED);


Mais par contre je peux pas faire de context.replaceItemValue

Du coup, je pensais retourner des valeur en JSON à ma fonction JS avec le printWriter,

Le problème c'est que ce que je renvoi sert à faire du code javascript situé dans le head de mon formulaire, je veux le mettre dans un champ text calculé nommé Head type HTML relais.

Dans mon agent, pas de problème :

Code : Tout sélectionner
context.replaceItemValue("Head", html.toString());


mais en JS :

$('Head').value ne fonctionne pas.

MessagePublié: 20 Jan 2010 à 15:05
par seroa
Mais en fait peut etre que je me complique la vie,

Ce que je souhaite faire c'est simplement afficher une image loading.gif pendant la durée d'exécution de mon agent.

Donc j'avais pensais à lancé une fonction JS qui affiche mon image avec un innerHTML juste avant le lancement de mon agent... Mais peut être qu'il y'a plus simple ?

MessagePublié: 21 Jan 2010 à 08:38
par Michael DELIQUE
salut

ce que tu veux faire ressemble a un traitement ajax, reagrde ça => http://robloche.free.fr/javascript/tuto ... o_xhr.html

et ça => http://javascript.developpez.com/cours/

MessagePublié: 22 Jan 2010 à 10:14
par stloje
Pour faire cela, j'ai créé un div caché à l'ouverture de la page. A l'aide du CSS, je positionne ce div et lui donne la source de l'image. J'affiche le div lors de l'appel Ajax et je le masque par la suite.