Discussione:
Ricevere un parametro packed in un CLP e poi in un RPGLE
(troppo vecchio per rispondere)
Paolo
2005-04-07 14:37:31 UTC
Permalink
Ciao a tutti, forse la mia mente e' un po' in tilt questo pomeriggio ma non
riesco a risolvere un problema.
Ho un programma di interfaccia che mi passa un parametro in formato packed.
Attualmente richiama un CLP (posso configurare il nome del programma
richiamato ma non il formato dei parametri) che dopo aver impostato la lista
delle librerie richiama un RPGLE.
Continua a darmi errore di dati decimali perche' non riesco a gestire
correttamente il campo packed.

Mi potete illuminare??

Grazie, paolo
cacciamali
2005-04-07 15:37:34 UTC
Permalink
Post by Paolo
Ciao a tutti, forse la mia mente e' un po' in tilt questo pomeriggio ma non
riesco a risolvere un problema.
Ho un programma di interfaccia che mi passa un parametro in formato packed.
Attualmente richiama un CLP (posso configurare il nome del programma
richiamato ma non il formato dei parametri) che dopo aver impostato la lista
delle librerie richiama un RPGLE.
Continua a darmi errore di dati decimali perche' non riesco a gestire
correttamente il campo packed.
Mi potete illuminare??
io no, google però .... ;-)

http://w.google.it/groups?q=clp+packed+group:it.comp.as400&hl=it&lr=&selm=3c8dd046%241%40news.alet.it&rnum=7

o giù di lì se non ho capito male
Post by Paolo
Grazie, paolo
ciao
cacciamali

--------------------------------
Inviato via http://arianna.libero.it/usenet/
Paolo
2005-04-07 15:41:12 UTC
Permalink
L'avevo trovato ma forse non ho capito.
Io ho il campo definito in input nel CLP li posso definirlo solo *CHAR o
*DEC.
Lo stesso parametro, una volta definita la lista delle librerie, lo passo
all'RPG... che mi va in errore.
Come applico al mio CL le info di google??

Grazie!
Robotre
2005-04-07 17:10:43 UTC
Permalink
Post by Paolo
L'avevo trovato ma forse non ho capito.
Io ho il campo definito in input nel CLP li posso definirlo solo *CHAR o
*DEC.
Lo stesso parametro, una volta definita la lista delle librerie, lo passo
all'RPG... che mi va in errore.
Come applico al mio CL le info di google??
Il problema e' che non puoi passere il numero in chiaro, ad esempio
ammesso che il campo da passare sia un packed lungo 3,0 ed il valore
da passare sia 5 lo devi passare come esadecimale X'005F' ad esempio

CALL PGM(PGMCL) PARM(5) -- da errore esadecimale
CALL PGM(PGMCL) PARM(X'005F') -- funziona

Saluti.
--
Robotre
Paolo
2005-04-08 06:35:11 UTC
Permalink
Scusate, provo a rispiegarmi...
Il programma che passa il parametro packed non lo posso toccare, il mio CLP
(richiamato da questo programma) e' questo:

PGM PARM(&ANAWW)
DCL VAR(&ANAWW) TYPE(*DEC) LEN(8 0)
(....)
CALL PGM(XXXX) PARM (&ANAWW)
ENDPGM

Il parametro packed e' &ANAWW.
Se prima della CALL a XXXX metto un CHGVAR di &ANAWW e lo reimposto il
programma si esegue correttamente, altrimenti mi segnala errore di dati
decimali.

Spero di esser stato piu' chiaro.
Ciao e grazie!!
Danilo Cussini
2005-04-08 13:55:46 UTC
Permalink
Post by Paolo
Il programma che passa il parametro packed non lo posso toccare, il mio CLP
PGM PARM(&ANAWW)
DCL VAR(&ANAWW) TYPE(*DEC) LEN(8 0)
(....)
CALL PGM(XXXX) PARM (&ANAWW)
ENDPGM
Il parametro packed e' &ANAWW.
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
Paolo
2005-04-08 15:01:36 UTC
Permalink
Post by Danilo Cussini
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
Un po' di luce nella mia vita...
Ma nell'ENTRY dell' RPGLE ???
Continua a darmi errore....

Grazie!
Roberto Nenni
2005-04-08 16:25:09 UTC
Permalink
Post by Paolo
Post by Danilo Cussini
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
Un po' di luce nella mia vita...
Ma nell'ENTRY dell' RPGLE ???
Continua a darmi errore....
metti tutto nell'RPG ILE, se devi impostare un lista di librerie lo puoi
fare anche da lì, magari mettendo l'open esplicita dei files:
Eval CMD='CHGLIBL LIBL(LIB1 LIB2 LIB3)'
Call 'QCMDEXC'
Parm CMD 200
Parm 200 CmdLen 15 5

credo che ci sia anche un'alternativa (da provare):
- trasformi il CLP in CLLE
- dichiari il parametro DCL VAR(&ANAWW) TYPE(*CHAR) LEN(1) - la lunghezza
non importa perchè viene passato l'indirizzo in memoria (con RPGLE sono
sicuro che funziona)

ciao
Roberto
Danilo Cussini
2005-04-11 09:51:36 UTC
Permalink
Post by Paolo
Post by Danilo Cussini
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
Un po' di luce nella mia vita...
Ma nell'ENTRY dell' RPGLE ???
Continua a darmi errore....
Una variabile packed 8,0 occupa 5 bytes:

02468
1357F

Quindi nel CLP che riceve un parametro packed 8,0 il parametro deve
essere definito
DCL VAR(&ANAWW) TYPE(*DEC) LEN(8 0)
se vuoi usarlo nel CLP in operazioni aritmetiche, altrimenti puoi
anche definirlo
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
se non lo usi e lo passi direttamente ad un altro programma.

Sei sicuro che nel programma che chiama il tuo CLP quel parametro sia
definito packed 8,0?
Paolo
2005-04-11 12:12:52 UTC
Permalink
Post by Danilo Cussini
Sei sicuro che nel programma che chiama il tuo CLP quel parametro sia
definito packed 8,0?
Sinceramente ho dei dubbi e per questo ho aperto una chiamata dal fornitore
del software, la mia situazione attuale e' la seguente:
CLP:
PGM PARM(&ANAWW)
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
CALL PGM(XXXXXXXX) PARM(&ANAWW)

RPGLE:
D parm_ANAWW S 8P 0
C *ENTRY plist
C parm parm_ANAWW

Dump RPGLE:
Si è verificato un errore di dati decimali (C G D F).
PARM_ANAWW PACKED(8,0) 00000550. '0000005502'X

Dump del CLP:
&ANAWW *CHAR 5 ' í '
0000005502

(non dovrebbe essere: 0000005502F ???)


Sempre grazie a tutti, paolo
Danilo Cussini
2005-04-12 09:05:14 UTC
Permalink
Post by Paolo
Post by Danilo Cussini
Sei sicuro che nel programma che chiama il tuo CLP quel parametro sia
definito packed 8,0?
Sinceramente ho dei dubbi e per questo ho aperto una chiamata dal fornitore
PGM PARM(&ANAWW)
DCL VAR(&ANAWW) TYPE(*CHAR) LEN(5)
CALL PGM(XXXXXXXX) PARM(&ANAWW)
D parm_ANAWW S 8P 0
C *ENTRY plist
C parm parm_ANAWW
Si è verificato un errore di dati decimali (C G D F).
PARM_ANAWW PACKED(8,0) 00000550. '0000005502'X
&ANAWW *CHAR 5 ' í '
0000005502
(non dovrebbe essere: 0000005502F ???)
Sì. Prova a definire &ANAWW *CHAR 8 e col DEBUG guarda cosa ricevi.
Loading...