Cette fiche répond aux problématiques suivantes :

- Comment passer des informations du programme partie centrale à un programme partie du canevas ?
- Comment passer des informations d'un programme partie du canevas au programme partie centrale ou entres deux programmes parties ?
- Comment déclencher un événement d'un programme cible (partie ou central) depuis un programme origine (partie ou central) ?
- Comment passer des informations au moment du déclenchement d'un événement d'un programme cible (partie ou central) depuis un programme origine (partie ou central) ?


1) Comment passer des informations du programme partie centrale à un programme partie du canevas ?


Dans un canevas, l'appel aux programmes parties (haute, basse, droite et gauche) est implicite : l'utilisateur ne peut donc pas passer des paramètres aux programmes parties (en définissant des paramètres via l'ordre PARAM dans le pavé DECLARATION comme dans un cas classique d'appel de programme).

Lors de l'appel d'un programme partie centrale, ses pavés INIT PGM et INITIALISATION (de la page) sont toujours exécutés avant ceux des programmes parties.
Lors de l'exécution d'un événement partie centrale, le bloc L4G correspondant est exécuté puis les pavés INIT PGM et INITIALISATION des programmes parties sont exécutés.

Donc, pour passer des informations dans ces 2 cas de figure, il est possible :
- soit de passer les informations dans le contexte de la requête HTTP via les ordres SAUVER_CTX / RECUPERER_CTX :

Dans le programme partie centrale (pavé INITIALISATION ou bloc événement) : sauver_ctx 'myKey' 'REQUEST' srcInfo

Dans le pavé INITIALISATION du programme partie basse par exemple : recuperer_ctx 'myKey' 'REQUEST' destInfo

- soit de passer les informations via un cookie (voir fiche "Gestion des cookies").

 

2) Comment passer des informations d'un programme partie du canevas au programme partie centrale ou entres deux programmes parties ?


Il est nécessaire de passer par un événement Adélia : cet événement est défini dans le programme cible et il est déclenché par le programme origine.
Voir le point 3.

 

3) Comment déclencher un événement d'un programme cible (partie ou central) depuis un programme origine (partie ou central) ?


Définir un événement associé à un pseudo objet Adélia dans la maquette du programme cible (en soumission classique ou Ajax) :

 

<script>
// evenement en soumission classique
function startMyEvent ()
{
::ADELIA_EVT(MY_EVENT)
}
// evenement en soumission Ajax
function startMyAjaxEvent ()
{
::ADELIA_EVT(MY_AJAX_EVENT,:AJAX,:ASYNC,:COMP=1)
}
</script>

 

Mettre la balise SCRIPT à l'intérieur du formulaire voulu.

Dans la maquette du programme origine, déclencher l'événement du pseudo objet sur l'événement Javascript de votre choix :

<adelia:button><input type="button" name="BTN_1" id="BTN_1" value="Declenchement de MY_EVENT" onclick="startMyEvent ()"/></adelia:button>
ou
<adelia:button><input type="button" name="BTN_1" id="BTN_1" value="Declenchement de MY_AJAX_EVENT" onclick="startMyAjaxEvent ()"/></adelia:button>

Attention, si le programme cible est le programme partie centrale, les pavés INIT PGM et INITIALISATION des programmes parties seront aussi exécutés.

4) Comment passer des informations au moment du déclenchement d'un événement d'un programme cible (partie ou central) depuis un programme origine (partie ou central) ?


Comme le déclenchement de l'événement se fait à partir du document HTML via le navigateur, il est nécessaire que les informations soient présentes dans ce document (dans une balise HTML) ou stockées sur le navigateur (via un cookie par exemple).

Si les informations sont stockées dans un cookie, voir la fiche "Gestion des cookies" pour savoir comment récupérer les informations dans le bloc L4G de l'événement du programme cible.

Si les informations sont stockées dans le document HTML, il est nécessaire de les copier dans une zone (un champ de saisie ayant la propriété caché par exemple) du formulaire où est défini l'événement du programme cible. Cette copie se fera nécessairement en Javascript avant le déclenchement de l'événement.

Exemple :
Programme cible : partie droite / Programme origine : partie gauche. On veut passer l'information CHS_COUNT du formulaire de la partie gauche vers le programme partie droite.

Formulaire partie gauche :

 

<form name="MIG_G_1_FORM_1" id="MIG_G_1_FORM_1" method="post">
<script>
function copyCountAndStartEvent()
{
// Copie de l'information CHS_COUNT vers un champ caché du formulaire de la partie droite
document.getElementById('CHS_HIDDEN_COUNT').value = document.getElementById('CHS_COUNT').value;
// Declenchement de l'evenement de la partie droite
startCountEvent();
}
</script>
compte : <adelia:entryfield type="ALPHA" length="15"><input type="text" name="CHS_COUNT" id="CHS_COUNT" size="15" maxlength="15"/></adelia:entryfield>
<adelia:button><input type="button" value="Envoi compte vers partie droite" name="BTN_1" id="BTN_1" onclick="copyCountAndStartEvent()"/></adelia:button>
</form>

 

Formulaire de la partie droite :

 

<form name="MIR_D_1_FORM_2" id="MIR_D_1_FORM_2" method="post">
<script>
function startCountEvent()
{
::ADELIA_EVT(COUNT,:AJAX,:ASYNC,:COMP=1)
}
</script>
<adelia:entryfield type="ALPHA" length="15" ><input type="hidden" name="CHS_HIDDEN_COUNT" id="CHS_HIDDEN_COUNT" /></adelia:entryfield>
</form>

 


Articles connexes