L’instruction Funciu permet de déclencher l’appel d’une fonction distante depuis un serveur de traitement Safe X3 et de valoriser en retour une variable L4G prévue à et effet.
La fonction peut correspondre à une fonction L4G située sur un Serveur d’Application Safe X3 ou à une méthode d’une classe Java située dans un container OSGI d’un serveur Safe X3 Bridge Java (Syntaxe 1), ou bien à une méthode publique d’une Widget graphique liée à un champ de classe d’écran en cours d’affichage dans une session Safe X3 Cliente (Syntaxe 2).
RESULT = Funciu =expr_function Using [abreviation] With [(args,...)]
RESULT = Funciu function Using [abreviation] With [(args,...)]
RESULT = Funciu =expr_ method From [M:Classe_Mask]id_zone With [(args,...)]
RESULT = Funciu method From [M:Classe_Mask]id_zone With [(args,...)]
Elément | Description | Restriction |
Expr_function | Expression de type Char | Identifiant du sous-programme L4G ou de la méthode java à appeler. |
function | Variable ou constante de type Char | idem. |
Expr_Method | Expression de type Char | Identifiant de la méthode à appeler |
Method | Constante de type Char | idem. |
[M:Classe_Mask]id_zone | Identifiant | Identifiant d’une zone de classe d’écran |
Args,... | Liste d’arguments séparés par des ‘,’. | Il doit y avoir adéquation entre la liste d’arguments passée et la liste d’arguments attendue par la fonction (comme dans un Func) ou la méthode cible. |
RESULT | Variable | Variable de retour. |
Abreviation | Identifiant | Identifie la session Safe X3 distante ; |
# Appel de la Macro VBA « Hello » contenue dans le document Word Office
# affiché dans le bloc bureautique « BB1 » de l’écran « ZTS » en cours de
# saisie dans une session cliente.
Local char RESULT(250)
RESULT = Funciu "Hello" From [M:ZTS]BB1 with ("Scott")
Infbox RESULT
End
# Exécution sur le serveur de traitement « astragale » de la fonction
# « HELLO » du traitement L4G «TEST» situé sur le dossier « DEMOFRA » du
# serveur d’application « mercure »
Local Char NAME(250)
Local Char RESULT(250)
Onerrgo $OPE
OpAdxd "astragale:16000" With "mercure:5500@DEMOFRA","FRA","myUserId","myPassword" Using [EXT]
Onerrgo $RPC
NAME = “Scott”
RESULT = Funciu "TEST:HELLO" Using [EXT] With (NAME)
Onerrgo $CLO
OpAdxd Using [EXT]
End
$OPE
Local Char WMESS(255)
WMESS= "Erreur Ouverture Opadxd : N°"-num$(errn)-" ligne"-num$(errl) + "." + chr$(10) + "- Mess Fixe : " + errmes$(errn) + "." + chr$(10) + "- Détail : " + errm
Errbox WMESS
End
$RPC
Errbox "Erreur Funciu : N°"-num$(errn)-"en ligne"-num$(errl) + "." + chr$(10) + "- Mess Fixe : " + errmes$(errn) + "." + chr$(10) + "- Détail : " + errm
Resume
$CLO
Errbox "Erreur Fermeture Opadxd : N°"-num$(errn)-"en ligne"-num$(errl) + "." + chr$(10) + "- Mess Fixe : " + errmes$(errn) + "." + chr$(10) + "- Détail : " + errm
Resume
# Exécution sur le serveur Safe X3 Bridge Java « Pluton » de la méthode
# «GetMortgageIndexByWeek» du service web « MortgageIndex »
Local char(250) WSTUBINST
Onerrgo $CLOSEADX
# Ouverture d'un lien avec le serveur Bridge Java
OpAdxd "pluton:5689" With "DUMMY","FRA","myUserId","myPassword" Using [JAVASRV]
# Appel de la méthode statique "newStub" de la classe factory
# "com.sage.x3.runtime.bundle.deamon.CToolFactoryStubs" pour instancier
# le webservice «MortgageIndex »
WSTUBINST = Funciu "com.sage.x3.runtime.bundle.deamon.CToolFactoryStubs:newStub" Using [JAVASRV] With ("MortgageIndex",http://www.webservicex.net/MortgageIndex.asmx)
# Création du Bean paramètre de la méthode "GetMortgageIndexByWeek"
Local Char WLISTFIELDS(250)
Local Char WBEANA(30)
Local Char WCLASSNAME(250)
WCLASSNAME = "net.stub.mortgageindex.MortgageIndexStub$GetMortgageIndexByWeek" WLISTFIELDS="Day,Month,Year"
WBEANA = Funciu = "com.sage.x3.runtime.bundle.deamon.CToolFactoryBeans:newBean" Using [JAVSRV] With (WCLASSNAME,WLISTFIELDS,9,9,1994)
# Appel de la méthode 'GetMortgageIndexByWeek' du Webservice
Local Char WBEANB(30)
WBEANB = Funciu = WSTUBINST+":GetMortgageIndexByWeek" Using [JAVSRV] With (WBEANA)
# ToString du bean résultat
Local Clbfile WDUMPC(5)
WDUMPC= Funciu = WBEANB+":toString" Using [JAVSRV] With ()
# Fermeture du lien établi avec le serveur Bridge Java
$CLOSEADX
OpAdxd Using [JAVASRV]
Dans le cas de la première Syntaxe, l’appel ne peut aboutir que si une session a été préalablement établie avec le serveur de traitement Safe X3 ou le serveur Safe X3 Bridge Java cible. L’instruction Opadxd permet d’établir une session avec un de ces types de serveur.
Lors de l’appel d’une fonction L4G, les arguments peuvent être passés par variable ou par valeur suivant la définition de la fonction appelée. Dans ce cas de figure, hormis que la fonction s’exécute dans le contexte de la session du Serveur de traitement Safe X3 distant, le comportement de l’instruction Funciu est comparable à celui de l’instruction Func.
Lors de l’appel d’une méthode d’une classe Java située dans un container OSGI d’un serveur Safe X3 Bridge Java les arguments peuvent être passés par variable ou par valeur suivant les implémentations.
Dans le cas de la deuxième Syntaxe, l’appel ne peut aboutir que si la classe d’écran qui contient le champ cible est bien en cours de saisie dans la session Safe X3 cliente courante. Actuellement seuls les champs d’écran de type « Bloc Graphique DHTML » ou « Bloc MS Office » peuvent faire l’objet de ce type d’appel distant.
Si la méthode à solliciter correspond à une fonction JavaScript, les arguments sont passés par valeur. Si la méthode à solliciter correspond à une macro VBA d’un document MS Office, les arguments sont passés par variable.
Que la méthode appelée soit écrite en VBA ou en JavaScript, les types natifs L4G sont sérialisés (marshalling) en Variant COM .
Inversement le Variant COM en retour d’appel est sérialisé en type natif L4G. Attention, les Variant COM dimensionnés ne sont pas supportés comme valeur de retour d’une méthode.
Par défaut, les erreurs sont levées par la procédure distante sont présentées à l’utilisateur dans une boite d’information.Par défaut, les erreurs sont levées par la procédure distante sont présentées à l’utilisateur dans une boite d’information.
Dans le cas où une étiquette de déroutement en cas d’erreur (Onerrgo) a été déclarée dans le sous-programme qui exécute l’instruction Funciu, les erreurs levées par la procédure distante sont publiées dans les variables systèmes ad hoc de la session Safe X3 appelante: Errm Errn Errp Errl.
Erreur | Description |
ERNET (130) | Erreur réseau. |
ERCHNNOEX (131) | Le canal de communication n'est pas établi. |