HSI (TSMART)
Generalità
Il modulo HSI (TSMART) è stato progettato da
WHILE1 e si identifica in uno strumento di programmazione, in grado di fornire delle
primitive che risolvono le problematiche di scambio dati con Host.
A tale scopo è stato definito un macro linguaggio, denominato
TQL (transaction query language) che consente di specificare in maniera semplice ed
immediata le modalità di interazione con host durante le fasi di login/logout e scambio
dati.
TSMART si presenta come uno strumento in grado di
comunicare con host in modo assolutamente indipendente dalla modalità di comunicazione
logico/fisica, come ad esempio l'interfaccia HLLAPI, l'APPC o altre.
Il TSMART opera utilizzando un file nel quale sono
contenute tutte le informazioni e i dati relativi alle transazioni da gestire. Infatti
all'interno di tale file saranno inclusi uno o più programmi TQL che potranno essere
attivati in funzione della transazione da eseguire.
Il linguaggio TQL
TQL consente di definire il tracciato record dei
dati in input e in output, di indicare il nome dei file dai quali dovranno essere
acquisiti i dati in input e di quelli sui quali verranno salvati i dati acquisiti da host
secondo lo schema prescelto.
TQL prevede anche l'utilizzo di variabili
(per la memorizzazioni di dati temporanei da utilizzare nel corso della computazione) e di
costanti.
TQL contiene inoltre i meccanismi di base dei
tradizionali linguaggi di programmazione come per esempio la possibilità di utilizzare
delle label e delle istruzioni di salto (goto), istruzioni di MOVE, istruzioni di COMPARE,
linee di commento, ecc.
L'interfaccia THOST
L'interfaccia THOST si presenta come una API
classica (DLL nel caso di sistemi WINDOWS) e fornisce all'utilizzatore ("C",
"VBASIC", "COBOL") uno strumento in grado di:
- stabilire una o più connessioni con host
- sincronizzarsi con le applicazioni e/o i comandi per Host
- scambiare dati in modalità formattata (es: 3270) e non (es: APPC)
- integrarsi direttamente con il modulo TSMART per l'esecuzione di script-files
scritti in TQL.
L'impiego combinato dei due prodotti TSMART e THOST,
consente di scrivere delle applicazioni in grado di interfacciarsi ad host in modo
sinergico molto efficace:
- Si può creare uno script per TSMART e raggiungere, dopo aver eseguito la fase di
LOGIN, la transazione desiderata. Una primitiva di THOST permette di lanciare uno
script di TSMART.
- Invocando le primitive fornite da THOST, è possibile eseguire la transazione
selezionata e gestire le varie casistiche di input/output sui campi del presentation space delle videate 3270.
- Si può richiamare ancora il TSMART per eseguire tutta la fase di LOGOUT.
Le primitive offerte da THOST sono simili agli
statement del linguaggio TQL. Non richiede, perciò, ulteriore studio o preparazione.
Uno degli
aspetti importanti della architettura della interfaccia THOST è relativo alla
possibilità di interfacciarsi ad HOST non solo via HLLAPI, ma anche utilizzando
altri sistemi di connessione senza influire sugli applicativi che la utilizzano.

Ecco un esempio di TQL :
#
# XX21 script
#
# This script use XX21 transaction
#
#
# Device selector
#
device ehllapi
#
# Local defines
#
define titolo "18580"
define opzione "51"
#
# Login input data
#
schema login_XX21
{
# position/len name
0-6 userid_1
6-1 userid_2
7-5 password
12-8 New_Amb
20-3 tpl
}
#
# Input data file
#
schema input_XX21
{
# position/len name
0-8 titolo
8-2 opzione
}
#
# Output data file
#
schema output_XX21
{
# position/len name
0-10 codice
10-25 descrizione
35-8 matrice
43-45 err_code
}
#
# XX21 transaction
transaction XX21
{
rdrec(login_XX21)
recv(* * User 60)
write(17 30 $login_XX21.userid_1)
write(17 36 $login_XX21.userid_2)
write(17 57 $login_XX21.New_Amb)
send(18 30 $login_XX21.password)
recv(* * COMMAND 60)
send(23 14 $login_XX21.tpl)
write(1 1 @C)
write(1 1 @C)
label(loop)
rdrec(input_XX21)
test(ok_read finish)
label(ok_read)
send(1 1 XX21)
recv(* * VARIAZIONE 60)
send(6 17 $input_XX21.titolo)
recv(* * XX21 10)
test(read_cod wr_error)
label(read_cod)
read(3 16 8 60 $output_XX21.codice)
read(3 44 25 -1 $output_XX21.descrizione)
read(3 16 8 -1 $output_XX21.matrice)
write(1 1 @C)
write(1 1 @C)
wrrec(output_XX21)
goto(loop)
label(wr_error)
read(23 6 45 $output_XX21.err_code)
read(6 17 8 $output_XX21.codice)
wrrec(output_XX21)
goto(loop)
label(finish)
exit(0)
label(error)
exit(-1)
}
Up to LAN * TSI * RGI
* HOME |