At line 1 added 154 lines |
%%(display:none) |
{{{ |
WikiUp |
}}} |
/% |
[{TableOfContents }]\\ |
::HEA RESP(BMA) STAT(10)\\ |
!!! DESCRIZIONE GENERALE\\ |
Il LOA13 esegue un'istruzione sql di select emettendo i record risultanti in matrice.\\ |
L'istruzione eseguita può:\\ |
# Essere ricevuta nell' INPUT del servizio\\ |
# Essere ricavata in base agli oggetti ricevuti dal servizio\\ |
# Leggere l'istruzione in una £G00 la cui chiave è passata nel K3 del servizio\\ |
La modalità principale è la ricezione di un sql nell' INPUT.\\ |
\\ |
\\ |
!! Cosa avviene se vengono passati degli oggetti?\\ |
\\ |
\\ |
! Caso 1: Viene passato un Q3 nell'oggetto 1 e non vi è un sql nell' INPUT\\ |
es. F(EXB;LOA13_SE;ESE.SQL) 1(Q3;IDBRARTI0F;E/*JOB)\\ |
Il servizio costruisce un sql a partire dall'oggetto ricevuto, quindi assume un select * sul file di riferimento dell'oggetto e costruisce la where in base a quanto presente nel Q3 indicato.\\ |
\\ |
\\ |
! Caso 2: Viene passato un Q3 nell'oggetto 1 e vi è un sql nell' INPUT\\ |
es. F(EXB;LOA13_SE;ESE.SQL) 1(Q3;IDBRARTI0F;E/*JOB) INPUT(SELECT * FROM BRARTI0F WHERE A§TIAR='[K1]')\\ |
Il servizio utilizza l'sql ricevuto nell' INPUT , accodando alla where eventualmente presente nell'istruzione ulteriori campi indicati nel Q3.\\ |
In questo caso l' sql passato nell'input sia essere un select * che specificare dei campi, in quanto il Q3 si limita a "completare" la where.\\ |
\\ |
\\ |
! Caso 3: Viene passato un Q2 nell'oggetto 4 e non vi è un sql nell' INPUT\\ |
es. F(EXB;LOA13_SE;ESE.SQL) 1(Q3;IDV5STAT0F;E/*JOB) 4(Q2;IDV5STAT0F;T/DFT)\\ |
Il servizio costruisce la select in base ai campi presenti nel Q2 e costruisce la where in base a quanto presente nel Q3 eventualmente indicato. I setup di matrice presenti nel Q2 vengono utilizzati.\\ |
\\ |
\\ |
! Caso 4: Viene passato un Q2 nell'oggetto 4 e vi è un sql di tipo "SELECT * FROM" nell' INPUT\\ |
es. F(EXB;LOA13_SE;ESE.SQL) 1(Q3;IDV5STAT0F;E/*JOB) 4(Q2;IDV5STAT0F;T/DFT) P( NRW(500)) INPUT(SELECT * FROM V5STAT0F WHERE D6TDOC='[TIPDOC]' AND D6TRIG='[TIPRIG]' AND D6CDCL='[CLIENT]' ORDER BY D6DT03 DESC)\\ |
Il servizio costruisce la select in base ai campi presenti nel Q2 e accoda alla where eventualmente presente nell'istruzione ulteriori campi indicati nell'eventuale Q3.\\ |
I setup di matrice presenti nel Q2 vengono utilizzati.\\ |
\\ |
Esempio di SQL eseguito:\\ |
SELECT D6TIPC, D6TPOG, D6PEPR, D6TDOC, D6NDOC, D6NBOL, D6DBOL, D6NFAT, D6DFAT, D6COMM, D6CDOG, D6DESC, D6COD1, D6COD2, D6COD3, D6COD4, D6COD5, D6COD6, D6COD7, D6COD8, D6COD9, D6COD0, D6DTAG, D6ORAG, RRN(V5STAT0F) FROM V5STAT0F WHERE D6TDOC='FAT' AND D6TRIG='ART' AND D6CDCL='000001' AND D6AZIE='01' ORDER BY D6DT03 DESC\\ |
\\ |
\\ |
! Caso 5: Viene passato un Q2 nell'oggetto 4 e vi è un sql con un elenco di campi specificati nell' INPUT\\ |
es. F(EXB;LOA13_SE;ESE.SQL) 1(Q3;IDV5STAT0F;E/*JOB) 4(Q2;IDV5STAT0F;T/DFT) P( NRW(500)) INPUT(SELECT D6TIPC, D6TDOC, D6NDOC FROM V5STAT0F WHERE D6TDOC='FAT' ORDER BY D6DT03 DESC)\\ |
Il servizio ignora completamente il Q2, sia relativamente all'elenco dei campi che ai setup di matrice associati e usa l'sql ricevuto nell'input accodando alla where eventualmente presente nell'istruzione ulteriori campi indicati nell'eventuale Q3.\\ |
\\ |
Esempio di SQL eseguito:\\ |
SELECT D6TIPC, D6TDOC, D6NDOC , RRN(V5STAT0F) AS $_RRN FROM V5STAT0F WHERE D6TDOC='FAT' AND D6AZIE='01' ORDER BY D6DT03 DESC\\ |
\\ |
\\ |
''I Q2 DI TIPO T/ SUPPORTATI SONO DEFINITI IN SCP_NAV COME INDICATO NELLA PTF LO00901A.''\\ |
\\ |
!! Modalità di chiamata\\ |
L'__istruzione select SQL__ da eseguire viene passata al servizio nell' __INPUT()__ .\\ |
\\ |
In alternativa è possibile salvare l'istruzione select SQL da eseguire nella £G00:\\ |
%%quote |
C EVAL £G00FU='OUT' |
C EVAL £G00TS=[nome G00] |
C EVAL £G00RE=[istruzione SQL] . |
C EXSR £G00 |
/% |
---- |
e passare il nome utilizzato per scrivere la £G00 nel K3 della chiamata del servizio.\\ |
\\ |
__N.B.: L'istruzione SQL passata nel parametro INPUT() prevale su quella eventualmente impostata nella £G00__\\ |
\\ |
||__Parametro__||__Descrizione__||__Valori ammessi__||__Significato__ |
|__CHD()__ | Intestazioni colonne | ' '=Utilizza le etichette dei campi come intestazioni di colonna (DEFAULT) '1'=Utilizza i nomi dei campi come intestazioni di colonna|\\ |
|__TPZ()__ | Tipizzazione campi | ' '=Esegue la tipizzazione dei campi (DEFAULT) '2'=Non esegue la tipizzazione dei campi|\\ |
|__NRW()__ | Nr. righe paginazione iniziale | Numero intero | Numero in base al quale viene paginata la visualizzazione dei risultati la prima volta (se 0 o non impostato pagina per 1000 record). Dalla seconda paginazione il numero di record visualizzati viene di volta in volta raddoppiato.|\\ |
|__HML()__ | Formato Intest.matrice | ' '=Le intestazioni della matrice vengono suddivise su 2 righe (DEFAULT) '1'=Le intestazioni della matrice vengono presentate su una sola riga|\\ |
|__SNM()__ | Contesto setup | Alfanumerico fino a 50 caratteri | Aggiunge una chiave al contesto di salvataggio dei setup della matrice|\\ |
|__NOR()__ | Non aggiungere RRN | ' '=NO '1'='SI' | Disabilita l'aggiunta del RRN (Relative Record Number) all'instruzione SQL|\\ |
|__LVL()__ | Livello chiamata £SQLD. | Una lettera ad indicare la replica del B£SQLD01 da richiamare. La replica 'Z' è riservata all'utilizzo da comando UP SQL|\\ |
|__FXP()__ | Paginazione fissa. | ' ' oppure '0' = NO '1'='SI' | Imposta la paginazione fissa. Il numero di record richiesti al caricamento è costante ad ogni caricamento dati.|\\ |
\\ |
\\ |
__E' necessario specificare livello di chiamata quando abbiamo più sezioni che richiamano il servizio LOA13_SE, in modo da aprire cursori SQL differenti ed evitare interferenze tra una matrice e l'altra in caso di paginazione.__\\ |
\\ |
! Esempi di chiamata del servizio LOA13_SE\\ |
__Interrogazione sul BRARTI0F con tipizzazione campi attiva e descrizioni dei campi come intestazioni di colonna__\\ |
F(EXB;LOA13_SE;ESE.SQL) 1(;;) 2(;;) P(TPZ(1)) INPUT(SELECT * FROM BRARTI0F)\\ |
\\ |
__Interrogazione sul BRARTI0F senza tipizzazione campi e nomi di sistema dei campi come intestazioni di colonna__\\ |
F(EXB;LOA13_SE;ESE.SQL) 1(;;) 2(;;) P(CHD(1)) INPUT(SELECT * FROM BRARTI0F)\\ |
\\ |
__Interrogazione sul BRARTI0F con tipizzazione campi attiva e nomi di sistema dei campi come intestazioni di colonna__\\ |
F(EXB;LOA13_SE;ESE.SQL) 1(;;) 2(;;) P(CHD(1) TPZ(1)) INPUT(SELECT * FROM BRARTI0F)\\ |
\\ |
__Interrogazione sul BRARTI0F con tipizzazione campi attiva e paginazione ogni 5000 record (se non impostato 1000)__\\ |
F(EXB;LOA13_SE;ESE.SQL) 1(;;) 2(;;) P(TPZ(1) NRW(5000)) INPUT(SELECT * FROM BRARTI0F)\\ |
\\ |
__Interrogazione sul BRARTI0F con tipizzazione campi attiva e paginazione fissa ogni 100 record__\\ |
F(EXB;LOA13_SE;ESE.SQL) 1(;;) 2(;;) P(TPZ(1) NRW(100) FXP(1)) INPUT(SELECT * FROM BRARTI0F)\\ |
\\ |
\\ |
! Esempio di chiamata della scheda LOA13 come sottoscheda\\ |
F(EXD;*SCO;) 1(;;) 2(MB;SCP_SCH;LOA13) INPUT(SQL(SELECT * FROM BRARTI0F WHERE A§TIAR='ART') NRW(100))\\ |
\\ |
__Input__: contiene l'istruzione SQL con la SELECT da eseguire all'interno di un attributo SQL() e tutti i parametri sopra elencati per il servizio ciascuno all'interno del proprio attributo.\\ |
\\ |
\\ |
! Possibilità di forzare descrizione, oggetto e altre caratteristiche di un campo nella matrice\\ |
Utilizzando la clausola AS del linguaggio SQL è possibile indicare una descrizione alternativa per una colonna, ponendo tale descrizione tra "".\\ |
All'interno della descrizione (utilizzando come separatore il carattere '__;__' ) è possibile forzare altre caratteristiche della colonna.\\ |
__Di conseguenza non è possibile utilizzare il carattere ; (punto e virgola) all'interno di una clausola AS.__\\ |
\\ |
# Intestazione della colonna\\ |
# Oggetto SMEUP\\ |
# Codice colonna della matrice\\ |
# 'R' per indicare alla matrice di non visualizzare se uguale al precedente\\ |
# Lunghezza del campo (per i numerici indicare i decimali separati da '__,__' ad esempio 10,2 )\\ |
# I/O del campo\\ |
\\ |
In questo esempio alla colonna A§ARTI viene forzata come descrizione 'Codice', come oggetto '**', come codice della colonna 'C001' e come lunghezza 10 caratteri.\\ |
\\ |
F(EXB;LOA13_SE;ESE.SQL) P(LVL(A)) INPUT(SELECT A§ARTI AS "Codice;**;C001;;10" FROM BRARTI0F)\\ |
\\ |
__Nell'alias è possibile fare riferimento ad un altro campo per l'oggettizazione dinamica sostituendo le [ ] del riferimento al campo con le ( ).__\\ |
\\ |
F(EXB;LOA13_SE;ESE.SQL) INPUT(SELECT A§TIAR, A§ARTI AS "Codice;AR(A§TIAR)", A§DEAR as "Descrizione", A§PESO FROM BRARTI0F)\\ |
\\ |
! Paginazione progressiva e paginazione fissa\\ |
Quando il flag di paginazione fissa (FXP) è assente o inattivo, la paginazione della matrice dell' UP SQL non avviene in base ad un numero fisso di record, ma raddoppia ogni volta il numero di record caricati.\\ |
Il pulsante di paginazione indica inoltre nella propria descrizione il numero di paginazioni effettuate rispetto al numero di paginazioni totali così come il numero di record caricati rispetto ai record totali.\\ |
Ad esempio : "Segue (1 / 4 - 1000 / 12025)" dove 1 / 4 indica che si è paginato una volta rispetto ad un totale di 4 paginazioni e 1000 / 12025 indica che sono stati caricate mille righe su un totale di 12025.\\ |
Quando invece FXP è valorizzato ad 1, la paginazione è fissa al valore indicato nel parametro NRW (se NRW non è presente, il numero di record caricati di default è 1000).\\ |
\\ |
!!! AUTORIZZAZIONI (richiamo come comando UP SQL)\\ |
\\ |
!! Autorizzazioni di esecuzione del comando UP SQL:\\ |
\\ |
E' stata aggiunta una nuova classe di autorizzazione sul comando UP.\\ |
Si consiglia l'impostazione delle autorizzazioni in particolare relativamente alla funzione UP SQL , in modo da limitare solo alle persone autorizzate l'esecuzione di istruzioni SQL sui file. Qualora non venga creato l'elemento UP di B£P e non vengano impostate le autorizzazioni , le funzioni UP rimarranno autorizzate.\\ |
L'impostazione predefinita (PTF B£81211) prevede l'inserimento della classe UP in B£P , autorizzazioni SI su funzione '**' e autorizzazione NO su funzione 'SQL'.\\ |
\\ |
\\ |
!! Autorizzazioni su istruzioni eseguite tramite comando UP SQL:\\ |
E' stata aggiunta una nuova classe di autorizzazione (UPSQL) sulle istruzioni SQL eseguite tramite comando UP SQL.\\ |
* 01 : autorizzazione all'inserimento di record (istruzione INSERT o SELECT INTO)\\ |
* 02 : autorizzazione alla modifica di record (istruzione UPDATE)\\ |
* 04 : autorizzazione alla cancellazione di record (istruzione DELETE)\\ |
* 05 : autorizzazione all'interrogazione (istruzione SELECT)\\ |
* DDL: autorizzazione alla modifica di oggetti di database (istruzioni CREATE, ALTER, DROP e GRANT)\\ |
\\ |
In relazione a queste modifiche è stata implementata l'apposita PTF B£00723A, che crea automaticamente l'elemento UPSQL di B£P e imposta le autorizzazioni predefinite (solo interrogazione).\\ |
\\ |
Le istruzioni di manipolazione dei dati e degli oggetti vengono comunque eseguite con le autorizzazioni di sistema dell'utente (e non del proprietario del programma) sugli oggetti relativi.\\ |
\\ |
!! Servizio di aggiornamento generico LOSUP_13\\ |
[SER Sevizio di aggiornamento generico|MBDOC_SER-LOSUP_13]\\ |