L4G >  FUNCIU  

Afficher tout Masquer tout

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).

Syntaxe

Syntaxe 1 : Appel à distance d’une fonction L4G ou d’une méthode Java

RESULT = Funciu =expr_function Using [abreviation] With [(args,...)]
RESULT = Funciu function Using [abreviation] With [(args,...)]

Syntaxe 2 : Appel d’une méthode publique d’une Widget graphique liée à un champ d’une Classe écran

RESULT = Funciu =expr_ method From [M:Classe_Mask]id_zone With [(args,...)]
RESULT = Funciu method From [M:Classe_Mask]id_zone With [(args,...)]

Paramètres

Elément 

Description 

Restriction

Expr_function

Expression de type Char 

Identifiant du sous-programme L4G ou de la méthode java à appeler.
Dans le cas d‘un sous-programme L4G, cet identifiant doit respecter le formalisme "nom_du_traitement :fonction".
Dans le cas d'une méthode Java, cet identifiant doit respecter le formalisme "classe:methode" 

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 ‘,’.
Ces arguments peuvent être des variables, des constantes ou des expressions de n’importe quel type, tableaux compris.

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.
Tous les types L4G sont supportés. Attention, dans le cas de la syntaxe 2, les variables dimensionnées ne sont pas supportées.

Abreviation

Identifiant

Identifie la session Safe X3 distante ;
La session ayant été préalablement établie suite à l’exécution de l’instruction Opadxd

Exemples

# 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]

Description

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.

Erreurs associées

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.
Le canal de communication correspondant à l'identifiant [abreviation] a été rompu.

 ERCHNNOEX (131)

Le canal de communication n'est pas établi.
Le canal de communication correspondant à l'identifiant  [abreviation] n'a pas été préalablement établi via l'instruction Opadxd.

Erreurs associées

OpadxdCalliuErrmErrpErrn - Errl