NUMBER %CHKROWS%
Scopo: daterminare il numero di
righe di cui è/sono composto/i il/i buffer indicato/i.
Sintassi: %CHKROWS%(%STRING% eol, %NUMBER% eolfill, %STRING% param1[,...])
Descrizione: consente di recuperare il numero di
istanze presenti in un determinato buffer (tipicamente del contenuto di
attributi multiistanza di gruppo e non o di attributi Multiriga).
Per il corretto svolgimento di questo compito, è necessario che la
funzione in oggetto esegua prima un allineamento, mediante verifica ed
eventuale correzione, del numero delle istanze del/i buffer specificato/i.
Per l'uso di questa funzione è necessario riversare il contenuto degli
attributi multiistanza dello stesso gruppo in altrettante variabili
(<param1>,<param2><...>) che saranno utilizzate per eseguire
i controlli e, se indicato da eolfill, l'allineamento.
Per eseguire questa operazione il modulo Highway
Application Server verifica che tutte le variabili <param...>
contengano lo stesso numero di istanze.
Se eolfill = 1 significa che in caso di
difformità sul numero di righe rilevate fra le variabili <param...>
controllate, queste saranno anche allineate mediante l'aggiunta di
righe di istanza vuote a quelle che difettano rispetto al numero massimo
individuato.
Il controllo sul numero di righe si basa sul valore eol
che la funzione utilizza per determinare la fine di una riga di istanza
(ed anche per eventuali aggiunte di nuove righe).
Valore restituito: valore alfanumerico
Torna il numero massimo di righe individuato nelle singole variabili
<parm...>.
Torna 0 in caso di errore generico.
Vedere anche: %NUMROWS%, %ATTROWS%, %ATTROW%
Esempio:
<!-- attributi MultiIstanza del gruppo 4:
INDIR, SEDE, CAP, LOCAL, PROV, REGIONE, NAZIONE -->
%NUMBER%(grouprows,0)
<!-- copia del contenuto degli attributi nelle
rispettive variabili -->
%STRING%(b_indirizzo,%ATTRIB%("INDIR"))
%STRING%(b_sede,%ATTRIB%("SEDE"))
%STRING%(b_cap,%ATTRIB%("CAP"))
%STRING%(b_local,%ATTRIB%("LOCAL"))
%STRING%(b_prov,%ATTRIB%("PROV"))
%STRING%(b_regione,%ATTRIB%("REGIONE"))
%STRING%(b_nazione,%ATTRIB%("NAZIONE"))
%NUMCPY%(grouprows, %CHKROWS%("\r\n",1,b_indirizzo, b_sede, b_cap,
b_sede, b_local, b_prov, b_regione, b_nazione))
%IF%(grouprows)
<!--ciclo sulle istanze -->
%REPEAT%(1,grouprows)
<!--fai qualcosa -->
%ENDREPEAT%
%ENDIF%
Annotazioni
L'uso degli attributi multiistanza, per coloro che già conoscono
la tecnologia HIGHWAY o se applicato ad una base dati
esistente sviluppata per l'uso con SfPlus, è leggermente cambiato.
Le singole righe degli attributi multiistanza sono separate da due
caratteri non stampabili, cioè il 'newline' ed il 'carriage return',
codificati in esadecimale in 0x0D e 0x0A, in ASCII in 0x10 e 0x13,
in sequenza di escape con \r e \n.
Questi caratteri speciali vengono posti al termine della riga quando viene
premuto il tasto Enter (o Return che dir si voglia).
Sfplus e Highway Application Server
(per ragioni tecniche qui non discutibili) vanno in conflitto sulla gestione
dell'ultima riga:
Sfplus non vi pone \r\n,
mentre Highway Application Server la pretende !!
Il problema si risolve filtrando il contenuto dei campi multiistanza
attravesro la funzione %CHKROWS% che esegue un
allineamento riportando i caratteri \r\n sull'ultima istanza e, se applicata
a tutti gli attributi multiistanza di un medesimo gruppo, provvede anche ad
eseguire un controllo ed un allineamento delle righe sui singoli attributi.
Esempio