Nell'interfaccia HTTP (NGSECW99) è presente una WEROUTINE generica che permette di eseguire un programma. Può essere utilizzata per lanciare CK o in tutte le possibili occasioni in cui non vale la pena creare una WEBROUTINE ad hoc per un processo
run_PGM
questa webroutine prende in input una lista (LSTPGM)
DEFINE FIELD(£PGMARG) TYPE(*CHAR) LENGTH(256)
DEF_LIST NAME(£LSTPGM) FIELDS(£PGMARG) TYPE(*Working) ENTRYS(*MAX)
le prime 2 ENTRY sono rispettivamente PROCESSO e FUNZIONE da richiamare
mentre tutte le altre righe devono essere valorizzare (se necessario) coi parametri passati dalla POS.
Esempio
ALLINEAMENTO AUTORIZZAZIONI OMAGGI
Nella partizione POS viene lanciato un programma (WRTCKAUO) che chiama run_PGM in cui la chiamata è così formattata
Request /cgi-bin/lansaweb?webapp=NGSECW99+webrtn=run_PGM+ml=LANSA:XHTML+part=CAL+lang=ITL ip local dmodaweb:80 overwrite :
Body LSTPGM..=1&
Body LSTPGM.0001.PGMARG=NG_CKFI1&
Body LSTPGM.0002.PGMARG=NGCK011&
Body LSTPGM.0003.PGMARG=C44:1:1509080257:AUTORIZZAZIONE 004&
Body LSTPGM.0004.PGMARG=C44:1:1509080258:AUTORIZZAZIONE SEDE&
dove la stringa PGMARG contiene la chiavi della transazione divise da ":" <negozio>:<cassa>:<riferimento>:<autorizzazione>
Nella partizione CAL la webroutin run_PGM riceve la lista, estrae dalle prime due entry processo, funzione e li manda in batch nella coda RTE dedicata.
La funzione NGCK011 tokenizza le stringhe PGMARG ed effettua gli aggiornamenti
* ===================================================================================
* Componente : WRTCKAUO
* Tipo : Reusable-part
*
* Autore : MARCOROSSI
* Data : 2016/10/13 - 10:39:52
*
* Commenti : CK Autorizzazione Omaggi
*
* ===================================================================================
FUNCTION OPTIONS(*DIRECT)
BEGIN_COM ROLE(*EXTENDS £PRIM_FORM) CLIENTWIDTH(484) CLIENTHEIGHT(302) LEFT(555) TOP(340)
DEFINE_COM CLASS(£RTENGR98) NAME(£vi_RTENGR98) REFERENCE(*DEFERRED)
EVTROUTINE HANDLING(£com_owner.Initialize)
SET COM(£com_owner) CAPTION(*component_desc)
* CONTROLLO CHE IL CK NON SIA GIÀ STATO ESEGUITO
£RTEDAKEY := "RUNCK_" + *COMPONENT
CHECK_FOR IN_FILE(RTEDATA) WITH_KEY(£RTEDAKEY)
IF_STATUS IS_NOT(*EQUALKEY)
INSERT FIELDS(£RTEDAKEY) TO_FILE(RTEDATA)
£vi_RTENGR98.um_clearBody
£vi_RTENGR98.um_setBodyList P_LISTNAME("LSTPGM")
* PROCESSO
£vi_RTENGR98.um_newRecord
£vi_RTENGR98.um_addToBodyList P_RTE_FIELD('PGMARG') P_VALUE('NG_CKFI1')
£vi_RTENGR98.um_endRecord
* FUNZIONE
£vi_RTENGR98.um_newRecord
£vi_RTENGR98.um_addToBodyList P_RTE_FIELD('PGMARG') P_VALUE('NGCK011')
£vi_RTENGR98.um_endRecord
* LISTA TRANSAZIONI DA MODIFICARE
SELECT_SQL FIELDS(£RTETKNEG £RTETNRRC £RTETRIFS £RTETAUOM) USING("SELECT RTETKNEG, RTETNRRC, RTETRIFS, RTETAUOM FROM OSDTALIB.RTETR001 WHERE RTETAUOM <> ''")
£vi_RTENGR98.um_newRecord
£vi_RTENGR98.um_addToBodyList P_RTE_FIELD('PGMARG') P_VALUE((£RTETKNEG + ":" + £RTETNRRC.AsString + ":" + £RTETRIFS.AsString + ":" + £RTETAUOM.AsNativeString))
£vi_RTENGR98.um_endRecord
ENDSELECT
£vi_RTENGR98.um_sendRequest P_WEBROUTINENAME("run_PGM") P_MULTIPLO(True)
ENDIF
ENDROUTINE
END_COM
* =======================================================
* Funzione : NGCK011
*
* Autore : MARCOROSSI
* Data : 2016/10/13 - 10:41:58
*
* Commenti : Aggiorna Autorizzazioni Omaggio
*
* =======================================================
*
*
FUNCTION OPTIONS(*DIRECT)
DEFINE_COM CLASS(£EDOBJ009) NAME(£vi_EDOBJ009) REFERENCE(*DEFERRED)
* --------------------------------------------------------------
* Nella prima riga della lista deve essere indicato il PROCESSO
* Nella second riga della lista deve essere indicata la FUNZIONE
* Il programma specificato viene mandato in submit sulla coda
* RTE dedicata
* --------------------------------------------------------------
DEFINE FIELD(£II) TYPE(*DEC) LENGTH(1) DECIMALS(0)
DEFINE FIELD(£JJ) TYPE(*DEC) LENGTH(1) DECIMALS(0)
DEFINE FIELD(£PGMARG) TYPE(*CHAR) LENGTH(256)
DEFINE FIELD(£PGMIDLST) TYPE(*CHAR) LENGTH(10)
DEF_LIST NAME(£LSTPGM) FIELDS(£PGMARG) TYPE(*Working) ENTRYS(*MAX)
DEF_LIST NAME(£LSTRRN) FIELDS(£PRIFILRRN) TYPE(*Working) ENTRYS(*MAX)
£R_LOGAREF := "WSRTE"
USE BUILTIN(RESTORE_SAVED_LIST) WITH_ARGS(£PGMIDLST) TO_GET(£LSTPGM £RETCODA)
IF (£RETCODA <> "OK")
USE BUILTIN(UD_LOGMESSAGE) WITH_ARGS(£R_LOGAREF "ERRORE IN RESTORE_SAVED_LIST" "E") TO_GET(£R_LOGSTS)
RETURN
ENDIF
£II := 0
SELECTLIST NAMED(£LSTPGM)
IF (£II < 2)
£II += 1
CONTINUE
ENDIF
£JJ := 0
£vi_EDOBJ009.um_Tokenize PSTRING(£PGMARG) PDELIMITER(":")
FOR EACH(£TOKEN) IN(£vi_EDOBJ009.up_Tokens)
£JJ += 1
* £RTETKNEG + ":" + £RTETNRRC.AsString + ":" + £RTETRIFS.AsString + ":" + £RTETAUOM.AsNativeString
CASE OF_FIELD(£JJ)
WHEN (= 1)
* Negozio
£NGRTEKNG := £TOKEN
WHEN (= 2)
* Cassa
IF (£TOKEN.Trim.IsNumber)
£NGRTENRRC := £TOKEN.Trim.AsNumber
ELSE
USE BUILTIN(UD_LOGMESSAGE) WITH_ARGS(£R_LOGAREF "NUMERO CASSA &1 NON NUMERICO" "E" *BLANK *BLANK £TOKEN) TO_GET(£R_LOGSTS)
CONTINUE
ENDIF
WHEN (= 3)
* Riferimento
IF (£TOKEN.Trim.IsNumber)
£NGRTERIFS := £TOKEN.Trim.AsNumber
ELSE
USE BUILTIN(UD_LOGMESSAGE) WITH_ARGS(£R_LOGAREF "NUMERO RIFERIMENTO &1 NON NUMERICO" "E" *BLANK *BLANK £TOKEN) TO_GET(£R_LOGSTS)
CONTINUE
ENDIF
WHEN (= 4)
* Autorizzazione
£NGMVAUOM := £TOKEN
ENDCASE
ENDFOR
FETCH FIELDS(£NGRTEDKNG £NGRTEDKMG £NGRTEDDTM £NGRTEDRIF) FROM_FILE(NGMVRTE) WITH_KEY(£NGRTEKNG £NGRTENRRC £NGRTERIFS)
IF_STATUS IS(*OKAY)
CLR_LIST NAMED(£LSTRRN)
SELECT FIELDS(£NGMVRIFS) FROM_FILE(NGMAMV10) WHERE(£NGMVKMAG = £NGRTEDKMG) WITH_KEY(£NGRTEDKNG £NGRTEDDTM £NGRTEDRIF) RETURN_RRN(£PRIFILRRN)
ADD_ENTRY TO_LIST(£LSTRRN)
ENDSELECT
SELECTLIST NAMED(£LSTRRN)
UPDATE FIELDS(£NGMVAUOM) IN_FILE(NGMAMV) WITH_RRN(£PRIFILRRN)
ENDSELECT
ELSE
USE BUILTIN(UD_LOGMESSAGE) WITH_ARGS(£R_LOGAREF "MOVIMENTO &1 NEGOZIO &2 CASSA &3 NON TROVATO" "E" *BLANK *BLANK £NGRTERIFS.AsString £NGRTEKNG £NGRTENRRC.AsString) TO_GET(£R_LOGSTS)
ENDIF
ENDSELECT
USE BUILTIN(UD_LOGMESSAGE) WITH_ARGS(£R_LOGAREF "FINE AGGIORNAMENTO AUTORIZZAZIONE OMAGGI" "I") TO_GET(£R_LOGSTS)