FAQ XMLRADConsultez toutes les FAQ
Nombre d'auteurs : 4, nombre de questions : 55, dernière mise à jour : 26 octobre 2006
- Comment la propriété ExceptionAction fonctionne ?
- Comment le NextAction fonctionne ?
- Comment générer le même XMLService pour différents médias de sortie (PC, PocketPC, Wap, fichiers excel etc.) ?
- Comment ne pas afficher directement le résultat de la transformation XSL dans le navigateur mais en proposant de télécharger un fichier ?
- Comment transmettre automatiquement des paramètres à chaque page de résultats ?
- Comment obtenir le document XML de sortie (OutputDoc) seulement ?
- La regénération de données échoue tout le temps alors que la sécurité est à None ou Guest
ExceptionAction est utilisée pour rediriger l'utilisateur vers un autre écran que la fiche d'erreur par défaut FormError.
Cette propriété fonctionne comme NextAction, mais ExceptionAction est traité quand une exception est levée durant l'execution du XMLService.
Elle est utile pour rediriger l'utilisateur sur la fiche de création ou de mise à jour lorsque les règles métiers ont échouées.
Par exemple, lorque l'on met à jour une organisation avec la demo Training, nous voulons éviter que l'utilisateur mette un nom d'organisation vide. Pour cela, nous avons écrit 2 simples lignes de code dans le gestionnaire d'événement BeforeXMLGram pour UpdateORGANIZATION. Le code est le suivant:
begin
if
Context.Values['
ORG_NAME
'
] = '
'
then
XMLRequest.RaiseError('
ERR_BLANK_ORG_NAME
'
, '
TTrainingBM.UpdateORGANIZAIONBeforeXMLGram
'
);
end
;
{
if
(Context.
GetValue
("
ORG_NAME
"
) =
=
"
"
)
XMLRequest.
RaiseError
("
ERR_BLANK_ORG_NAME
"
,
"
TTrainingBM.UpdateORGANIZAIONBeforeXMLGram
"
);
}
{
if
(Context.
GetValue
("
ORG_NAME
"
) =
=
"
"
)
XMLRequest.
RaiseError
("
ERR_BLANK_ORG_NAME
"
,
"
TTrainingBM.UpdateORGANIZAIONBeforeXMLGram
"
);
}
{
if
(context.getValue
("
ORG_NAME
"
).equals
("
"
))
xmlRequest.raiseError
("
ERR_BLANK_ORG_NAME
"
, "
TTrainingBM.UpdateORGANIZAIONBeforeXMLGram
"
);
}
Quand nous testons la régle de gestion, nous redirigeons par défaut vers FormError, qui affiche l'erreur.
Maintenant, nous voulons rediriger notre utilisateur vers FormORGANIZATION directement, sans executer FormError.
Pour cela, nous mettons la propriété ExceptionAction de UpdateORGANIZATION à FormORGANIZATION.
Si vous testez encore une fois, vous verrez que nous sommes maintenant redirigé directement vers FormORGANIZATION, avec le message d'erreur affiché en haut de l'écran.
Pour aller plus loin:
Vous pouvez dynamiquement mettre a jour la valeur de Exception comme vous pouvez le faire avec NextAction. Vous avez jsute a transmettre une nouvelle valeur en tant que paramètre HTTP
Par exemple:
Chaque XMLService à une propriété NextAction. Cette propriété permet de chainer l'exécution de XMLServices, un à la fois. Les applications XMLRAD utilisent cette propriété pour savoir quoi faire après l'exécution d'un XMLService courrant.
La propriété NextAction permet la redirection entre XMLService. Par exemple, disons que nous avons un business service nommé UpdatePublishers. Ce XMLService a un XMLGram pour mettre à jour la base de données, mais pas de XSL. Après l'appel, nous avons besoin de rediriger vers un autre XMLService disons FormPublishers qui affichera les informations de l'organization
La propriété NextAction doit être utilisé pour dire à l'application d'exécuter FormPublishers juste après UpdatePublishers. Le Context est préservé entre l'execution des XMLServices puisque c'est toujours la même requête HTTP.
La propriété NextAction peut être spécifiée dans l'EDI XMLRAD. Cliquez sur le XMLService et vous devriez voir les propriétés de ce XMLService. Là vous devez voir la propriété NextAction. Une liste déroulante vous aide à spécifier la valeur. Elle contient tous les XMLServices, triés par leur XMLModule. Sélectionnez le XMLService que vous voulez exécuter après, et sauvegardez.
On peut vouloir modifier la propriété à l'exécution. Par exemple, si une case à cocher est cochée sur une fiche lorsque l'on met à jour un publisher, le XMLService UpdatePublishers redirige vers ListPublishers et pas vers FormPublishers comme spécifié par défaut. On peut redéfinir la propriété en spécifiant la valeur dans le Context:
- En rajoutant un nouveau paramètre dans l'URL (ie, .../Pubs.dll/UpdatePublishers?NextAction=ListPublishers). Doit être utilisé pour changer NextAction sur un simple lien hypertexte par exemple
- En Rajoutant un nouveau champ caché dans le <form> (ie. <input type="hidden" name="NextAction" value="ListPublishers" />). Doit être utilisé pour redéfinir le NextAction par défaut lorsque l'on a plusieurs web forms appelant le même business service.
- En Utilisant une XMLInstruction Assign pour spécifier le Champ NextAction dans le Context. Méthode dirigée par les données. Pas de code.
- En Utilisant une seule ligne de code dans des gestionnaires d'événement (e. Context.SetValue('NextAction', 'ListPublishers');) Doit être utilisé lorsque des tests conditionnels sont requis.
La propriété NextAction doit être utilisé pour:
- Tous business services, tel que Update ou Insert.
- Tous XMLServices sans sortie HTML.
La propriété NextAction ne doit pas être utilisé pour les XMLServices avec un sortie HTML tel que Form ou List.
Ne pas pas faire de référence croisée en utilisant NextAction. Les combinaisons peuvent donner une boucle infinie. (A appel B, B appel C, C appel A).
En invoquant l'url, il faut passer un paramètre XMLC_Formatter dont la valeur dépendra du média de sortie.
La feuille xsl qui effectuera la transformation sera différente selon cette valeur XMLC_Formatter.
Par exemple : http://monsite/madll/ListePRODUIT?XMLC_Formatter=csv
Pour le traitement de cette requête http, le framework va exécuter le XMLService ListePRODUIT, jusqu'au moment de la transformation xsl. A ce moment la feuille de style qui va être utilisée sera ListePRODUIT.csv.xsl et non ListPRODUIT.xsl Ainsi avec les mêmes données (les instructions XMLGram ne changent pas), on va pouvoir aiguiller sur des transformations différentes.
Vous pouvez passer ce paramètre directement dans l'url comme ci dessus, ou alors à l'aide d'un champ caché de formulaire :
<
form
name=
"
MainAction
"
method=
"
POST
"
action=
"
ListePRODUIT
"
>
<
input
type=
"
hidden
"
name=
"
XMLC_Formatter
"
value=
"
csv
"
/
>
<
/
form>
L'utilisation d'un formulaire procure l'avantage de pouvoir modifier dynamiquement (en javascript) la valeur de XMLC_Formatter, intéressant quand on veut donner à l'utilisateur le choix du format ou terminal pour son document.
En ajoutant un paramètre XMLC_OutputFileName à l'url invoquée, la valeur de ce paramètre étant le nom du fichier qui sera proposé en téléchargement à l'utilisateur.
Quand le framework décode la requête HTTP et détecte la présence de XMLC_OutputFileName, il modifie le type de flux renvoyé au navigateur en spécifiant application/octet-stream dans l'entête HTTP de réponse. Le navigateur comprend alors qu'il ne doit pas interpréter le flux reçu mais le proposer en téléchargement à l'utilisateur.
Comme pour XMLC_Formatter, le paramètre peut-être indiquée directement dans l'url, ou par l'intermédiaire d'un champ caché de formulaire.
Lorsque l'on a un formulaire de recherche et que l'on veut afficher la 2ème page des résultas, il ne faut pas oublier de retransmettre le critère de recherche, car la requête SQL va être réexecutée.
Avec le paramètre XMLC_InputParams on peut générer les paramètres de ce genre d'URL très facilement. Dans XMLRAD, sélectionnez l'item WSDL de votre XMLService et rajoutez le paramètre voulu dans les Input Params. La valeur servira à la conception.
Lorsque le XMLService génère le document XML de sortie (OutputDoc), il génère dans la section XMLC_Params 2 éléments: XMLC_InputParams et XMLC_NavigationsParams.
<
document
>
<
XMLC_Params
>
...
<
XMLC_InputParams
>
SEARCHED_VALUE=0&
FULL_TEXT=1</XMLC_InputParams>
<
XMLC_NavigationParams
>
SEARCHED_VALUE=0&
FULL_TEXT=1</XMLC_NavigationParams>
...
<
/
XMLC_Params
>
<
/
document
>
Vous pouvez ensuite utiliser les valeurs de ces éléments pour construire les paramètres de l'URL dans le XSL:
<
a
href
=
"
{/document/Aliases/MyPRoject1DLL}FormSearchORGANIZATION?{/document/XMLC_Params/XMLC_NavigationParams}
"
>
Les valeurs dans l'élement XMLC_NavigationParams sont encodées URL pour les caractères spéciaux soit correctement passés.
Chaque XMLService génère un document XML de sortie appelé OutputDoc sur lequel le XSL sera appliqué pour générer une page HTML. Comment obtenir ce document avant que le XSL ne soit appliqué ?
Il suffit d'invoquer le XMLService avec le paramètre HTTP XMLC_OutputFormat=XML.
Soit on le rajoute en paramètre GET directement dans l'URL: http://localhost/ProjectBin/MyProject1/Bin/MyProject1.Dll/MyAction?XMLC_Outputformat=XML
Soit on ajoute un champ caché: <input type="hidden" name="XMLC_OutputFormat" value="XML"> dans la page HTML dans laquelle se trouve le formulaire qui en le validant va appeler l'action MyAction.
L'authentification échoue, cela veut dire que le code responsable de cette authentification a placé dans le context la valeur XMLC_Authenticated = 0. Assurez vous de l'existence possible d'un gestionnaire d'évènement OnAuthenticate surchargé par code, qui remplacerait la vérification par défault effectuée par le framework. Le cas échéant, déboguez ce gestionnaire OnAuthenticate, et vous devriez pouvoir localiser l'extrait de code responsable de l'affectation de la valeur 0 à la donnée XMLC_Authenticated.