PreviousNext
Help > Programmation avec LAUNCHER Office > Programmation avancée > Exemples de programmes CL > CallExe
CallExe

 Cet exemple permet d'envoyer des messages à l'AS/400.

 

Description

 

Lors de la réception du message EXE, le serveur exécute un programme constitué de la boîte de dialogue ci-dessous. LAUNCHER Office se met alors en attente d'un événement provenant de l'application.

 

Un clic sur le bouton prévu et le message est envoyé à l'AS/400 :

 

image\ebx_640587860.jpg

 

Lors du clic sur le bouton "Message to AS/400", le programme utilise la fonction LNCMessage se trouvant dans la bibliothèque LNCMSG.DLL et permet donc d'envoyer des messages à l'AS/400.

 

La fin du programme est provoquée par l'appui sur le bouton "Back To Terminal". L'AS/400 repasse alors en mode de commande, tandis que le PC passe en attente de connexion.

 

Sur l'AS/400 :

 

Paramètres ou commande

= Call callexe '194.206.160.97'

 

Message To Send To The AS/400

 

Source du programme Visual Basic

 

Déclarations :

' Fonctions Launcher de LNCMSG.DLL

' ----------------------------------

' Envoi un message à l'AS/400 et lui rend la main

Declare Function LNCMessage Lib "lncmsg.dll" (ByVal nRetCode As Long, ByVal szRetString As String) As Long

' Reception de message depuis l'AS/400

Declare Function LNCRcvMessage Lib "lncmsg.dll" (piRetCode As Long, ByVal szRetString As String) As Long

' Positionnement d'une référence à l'événement attendu de l'AS/400

Declare Function LNCSetPostMessage Lib "lncmsg.dll" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

 

 

' Fonctions Windows

' -----------------

 

' Get the ID of a control in the form.

Declare Function GetDlgCtrlID Lib "user32" (ByVal hwnd As Long) As Long

 

Global Const WM_COMMAND As Long = &H111

Global Const BN_CLICKED As Long = 0

 

Global Const RET_REJECT = 0

Global Const RET_ACKNOWLEDGE = 1

Global Const RET_MESSAGE = 2

 

Sur le bouton Message To AS/400 :

Dim ret As Long

Dim RetCode As Long

Dim RetString As String * 100

Dim DlgId As Integer

' LAUNCHER/400 va simuler le clic sur le bouton ' 'Command3'

DlgId = GetDlgCtrlID(Command3.hwnd)

ret = LNCSetPostMessage(Form1.hwnd, WM_COMMAND, DlgId, Command3.hwnd)

' Envoie un message à l'AS/400.

ret = LNCMessage(2, Text1.Text)

 

 

Sur le bouton Back To Terminal :

Dim ret As Long

' Prévenir l'AS/400 de l'arret

ret = LNCMessage(2, "*END")

 

Sur le bouton Command3 (invisible) :

Dim ret As Long

Dim str As String * 200

 

' Ce bouton à été cliqué par LAUNCHER/400,

' lorque l'AS/400 appelle le programme pour la

' deuxième fois et plus.

' Il est possible de récupérer un message

' de l'AS/400.

ret = LNCRcvMessage(ret, str)

Text1.Text = str

 

 

Lors de la première exécution, après le clic sur le bouton "Message to AS/400", LAUNCHER Office va simuler l'événement "Clic sur le bouton Command3", plaçant l'application en attente de message.

Une fois l'événement simulé, le programme envoie le texte du contrôle Text1 à l'AS/400.

Lorsque l'AS/400 appelle le programme pour la deuxième fois, le point d'entrée se fait dans le code du bouton caché (Command3), qui permet de récupérer les paramètres fournis par l'AS/400 à LAUNCHER pour l'exécution du programme.

 

 

Source du programme CLP

 

 

/* Variables utilisées pour ouvrir la communication*/

PGM           PARM(&SVRADDR)

DCL           VAR(&SVRADDR) TYPE(*CHAR) LEN(30)

DCL           VAR(&HANDLE) TYPE(*CHAR) LEN(50)

DCL           VAR(&CCSID) TYPE(*CHAR) LEN(10)

 

/* Variables utilisées pour envoyer les commandes*/

DCL           VAR(&CMD)          TYPE(*CHAR) LEN(10)

DCL           VAR(&OPT) TYPE(*CHAR) LEN(1)

DCL           VAR(&PARM1) TYPE(*CHAR) LEN(512)

DCL           VAR(&PARM2) TYPE(*CHAR) LEN(1024)

DCL           VAR(&RESULT) TYPE(*CHAR) LEN(512)

DCL           VAR(&MSGID) TYPE(*CHAR) LEN(7)

DCL           VAR(&MSG1) TYPE(*CHAR) LEN(80)

DCL           VAR(&MSG2) TYPE(*CHAR) LEN(80)

/* Variable spécifiant le protocole de communication */

DCL           VAR(&NETTYPE) TYPE(*CHAR) LEN(6)

/* Ouverture d'une seule communication avec le PC*/

CHGVAR        VAR(&HANDLE) VALUE('*ONLY')

/* Traduit le CCSID selon le job CCSID */

CHGVAR        VAR(&CCSID) VALUE('*JOB')

/* Protocole de communication IP */

CHGVAR        VAR(&NETTYPE) VALUE('IP')

 

/* Connexion au PC */

CALL          PGM(LNCOPEN) PARM(&HANDLE &SVRADDR &CCSID)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

/* Sauve la fenêtre active sur le PC */

CHGVAR        VAR(&CMD) VALUE('STO')

CHGVAR        VAR(&PARM1) VALUE(' ')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

 

/*Minimise fenêtre active (Emulation AS/400) */

CHGVAR        VAR(&CMD) VALUE('MIN')

CHGVAR        VAR(&PARM1) VALUE(' ')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

 

/* Début de la communication avec l'application CALLEXE.EXE, OPT=

/* donc le démon envoie un message a l AS 400 suite à un évènement */

/* de l'application                                                */

CALLIT:

CHGVAR        VAR(&CMD) VALUE('EXE')

CHGVAR        VAR(&OPT) VALUE('2')

CHGVAR        VAR(&PARM1) VALUE('%LNCDIR%\SAMPLES\CALLEXE.EXE')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

 

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

SNDPGMMSG     MSGID(CPF9898) MSGF(QSYS/QCPFMSG) MSGDTA(&RESULT) +

              TOPGMQ(*EXT) MSGTYPE(*STATUS)

IF            COND(%SST(&RESULT 1 4) =

              CMDLBL(FINISH))

GOTO          CMDLBL(CALLIT)

 

FINISH:

/* Minimise la fenêtre active (Application CALLEXE) */

CHGVAR        VAR(&CMD) VALUE('MIN')

CHGVAR        VAR(&PARM1) VALUE(' ')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

 

/* Restaure la fenêtre stockée (Emulation AS/400)*/

CHGVAR        VAR(&CMD) VALUE('RCL')

CHGVAR        VAR(&OPT) VALUE('0')

CHGVAR        VAR(&PARM1) VALUE(' ')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

 

/* Fin de la communication avec le PC */

CLOSE:

CHGVAR        VAR(&CMD) VALUE('END ')

CHGVAR        VAR(&PARM1) VALUE(' ')

CHGVAR        VAR(&PARM2) VALUE(' ')

CALL          PGM(LNCCMD) PARM(&HANDLE &CMD &OPT &PARM1 +

              &PARM2 &RESULT)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

 

CALL          PGM(LNCCLOSE) PARM(&HANDLE)

MONMSG        MSGID(LNC0000) EXEC(GOTO CMDLBL(ERROR))

GOTO END

 

ERROR:

CALL          PGM(LNCCLOSE) PARM(&HANDLE)

RCVMSG        MSG(&MSG1) SECLVL(&MSG2) MSGID(&MSGID)

SNDPGMMSG     MSGID(CPF9898) MSGF(QSYS/QCPFMSG) MSGDTA('Error +

              !!!!! ' *CAT &MSGID *CAT ' +  ' *CAT &MSG1 *CAT ' +

              ' *CAT &MSG2) MSGTYPE(*ESCAPE)

END:

ENDPGM

 

Voir également l'exemple EVENTTEST dans la bibliothèque d'installation de l'AS/400 qui illustre l'échange de messages de synchronisation entre le PC et l'AS/400.