Priorité d'exécution
Vous pouvez et devez modéliser explicitement et imposer un comportement déterministe pour les transitions. Même si la totalité des boîtes de dialogue est déterministe, l'émission d'un événement par un portlet particulier peut déclencher deux transitions différentes de deux boîtes dialogues différentes. C'est pourquoi vous devez modéliser de manière explicite le comportement prévu des transitions.
Par exemple, quand un portlet portlet1 émet un événement e1, deux transitions différentes, T1 et T2, peuvent être déclenchées. La transition T1, en tant que composant d'une boîte de dialogue active D1, et la transition de lancement T2 comme composant d'une autre boîte de dialogue D2, réagissent toutes deux au même événement e1. Après que le portlet portlet1 a émit e1, les transitions doivent déterminer s'il faut continuer avec D1 ou interrompre D2 et démarrer D2.
Vous pouvez modéliser de manière explicite le comportement prévu des transitions en utilisant l'attribut facultatif priority. L'attribut priority est affecté à l'élément de boîte de dialogue. Les valeurs valides que vous pouvez affecter sont preserve et suspend. La valeur par défaut est définie sur suspend, sauf si vous configurez différemment les paramètres. Pour plus informations sur la configuration, voir Options de configuration.
La valeur preserve définit que la transition faisant partie d'une boîte de dialogue active est toujours prioritaire. Ainsi, après que portlet1 a émis l'événement e1, la transition se poursuit avec la boîte de dialogue active D1 plutôt que de passer à une autre boîte de dialogue D2.
La valeur suspend définit que les transitions de lancement sont toujours prioritaires. Ainsi, après que portlet1 a émis l'événement e1, la transition interrompt la boîte de dialogue active D1 et démarre une autre boîte de dialogue D2. Si l'attribut n'est pas spécifié, la valeur par défaut est appliquée.
L'exemple de code suivant montre le comportement décrit en supposant que dialog1 est déjà active. Dans l'exemple, après que portlet1 a émis l'événement e1, les deux transitions affichées sont théoriquement admises. Puisque, pour dailog1 l'attribut priority est défini sur suspend, le comportement attendu est de préférer le déclenchement de transitions de lancement correspondantes. Les transitions de lancement correspondantes sont déclenchées même si elles font partie de la boîte de dialogue active. De ce fait, dans le cas présent, la boîte de dialogue dialog1 est interrompue et l'utilisateur doit continuer avec dialog2 et est redirigé vers le portlet portlet3.
<dialog name="dialog1" priority="suspend">
...
<transition>
<source>
<transition-endpoint nameref="portlet1">
<event qname="e1"/>
</transition-endpoint>
</source>
<target>
<transition-endpoint nameref="portlet2">
<event qname="e2"/>
</transition-endpoint>
</target>
</transition>
...
</dialog>
...
<dialog name="dialog2">
...
<transition type="start">
<source>
<transition-endpoint nameref="portlet1">
<event qname="e1"/>
</transition-endpoint>
</source>
<target>
<transition-endpoint nameref="portlet3">
<event qname="e3"/>
</transition-endpoint>
</target>
</transition>
...
</dialog>
Dans l'exemple, après que portlet1 a émis l'événement e1, les deux transitions affichées sont théoriquement admises. Puisque, pour dialog1 l'attribut priority est défini sur preserve, le comportement attendu est de préférer une transition correspondante faisant partie de la boîte de dialogue active. De ce fait, dans le cas présent, l'utilisateur continue avec dialog1 et est redirigé vers portlet2.
<dialog name="dialog1" priority="preserve">
...
<transition>
<source>
<transition-endpoint nameref="portlet1">
<event qname="e1"/>
</transition-endpoint>
</source>
<target>
<transition-endpoint nameref="portlet2">
<event qname="e2"/>
</transition-endpoint>
</target>
</transition>
...
</dialog>
...
<dialog name="dialog2">
...
<transition type="start">
<source>
<transition-endpoint nameref="portlet1">
<event qname="e1"/>
</transition-endpoint>
</source>
<target>
<transition-endpoint nameref="portlet3">
<event qname="e3"/>
</transition-endpoint>
</target>
</transition>
...
</dialog>
priority n'est pas hérité. Ainsi, quand une boîte de dialogue D1 appelle une autre boîte de dialogue D2, l'attribut priority, qui peut être spécifié pour D1, n'est pas propagé à D2.