Indice articolo

Come è possibile modificare oggetti e OAV di oggetti senza scrivere una sola riga di codice RPGLE?
Semplice!, basta utilizzare le istruzioni virtuali create ad hoc per questo scopo che riescono a rendere il processo molto veloce e snello. Come faccio quindi a modificare solamente script di scheda per ottenere questi risultati? Andiamo a vedelo assieme in questo articolo…

Vederemo quindi come è possibile utilizzare le istruzioni virtuali o le FUN a costruttori che ci permettono di soddifare lo scopo di poter avere un concetto di CRUD (Create,Read,Update,Delete) anche con gli oggetti di SmeUP.
Non sai cosa sono le istruzioni virtuali? Allora prima di procedere forse è meglio che dai uno sguardo all’articolo precedente qui.

OAV di un oggetto

Durante la lettura dell’articolo verrà ripetuto spesso di utilizzare gli OAV di un oggetto. Ma cosa significa OAV in SmeUP?
L’anagramma OAV sta a significare Oggetto Attributo Valore, ovvero sono quegli attributi (e relativi valori assunti) collegati ad ogni oggetto di SmeUP.
Per facilitare meglio la comprensione prendiamo per esempio la classe AR ART. Avremo che la classe AR avrà dei particolari attributi (come per esempio il “file master – J/002” oppure “classe riferimento – J/048”)che saranno ereditati dalle sue istanze, in questo caso ART. A loro volta ogni istanza di ART erediterà i suoi attributi dalla classe di appartenenza che potrà utilizzare o ridefinirne le caratteristiche.
Ma sicuramente ci si starà chiedendo dove reperire il codice dell’OAV che ci serve?

In LoocUP:  cliccare sul “bollone” in alto a sinistra “UP” e scorrere nel menu e cliccare sul SMEUP->OGGETTI.


Dopodichè scegliere la classe dell’oggetto (in questo caso “Articolo”), scegliere il tab “Info” e nella tabella “Dati” scegliere il tipo di Setup “Tutti tecnica” per veder comparire nella tabella la colonna relativa agli OAV di quell’oggetto (che in questo caso è l’oggetto OG OG AR, ovvero la classe degli oggetti articoli).

In WebUP:  scrivere nello spotlight la parola “oggetti”

Dopodichè scegliere il tab “Principali”  e la classe dell’oggetto (in questo caso “Articolo”), scegliere il tab “Info” e nella tabella “Dati” scegliere tramite i tre puntini posti in alto a destra le impostazioni di seguito.


Il simbolo dell’ingranaggio identifica le “Impostazioni” e dal menù a tendina che compare, scegliere il tipo di Setup “Tutti tecnica” per veder comparire nella tabella la colonna relativa agli OAV di quell’oggetto (che in questo caso è l’oggetto OG OG AR, ovvero la classe degli oggetti articoli).

CRUD di un oggetto

La gestione di uno o più oggetti può risultare alquanto confusa data la varietà dei componenti messi a disposizione.
Ho riassunto quindi nella tabella (a doppia entrata) sottostante le varie strade che si possono intrapprendere per gestire il CRUD di un’oggetto (e dei relativi OAV), differenziando quelli legati ad una singola istanza (un oggetto) o multi-istanza(più oggetti “contemporaneamente”). Dopodichè la divisione è stata fatta per quelle operazioni che richiedono la modifica/conferma dell’utente e quindi interattiva e quella invece in cui l’azione viene demandata al server senza l’ausilio necessario di un utente.

Creare Modificare Visualizzare Eliminare
Istanza singola LOA36 LOA36
LOA10_SU
LOA36 
B£SER_09
LOA36  Modalità interattiva
LOA40_SI LOA40_SI LOA40_SI LOA40_SI Modalità batch
Multi-istanza
X LOA10_SU LOA10_SE X  Modalità interattiva
LOA40_SE LOA40_SE X LOA40_SE Modalità batch

Nel corso di questo articolo ci concentreremo sull’istanza singola e sulla multi-istanza nella sola accezione di funzionamento in interattivo.
La parte della modalità batch verrà trattata in un secondo articolo.

Creazione – istanza singola – modalità interattiva (LOA36)

La creazione di un’oggetto in modalità interattiva viene effettuata attraverso il costruttore LOA36 con parametro AziExe impostato al valore “01”.
Così facendo è possibile per esempio includere la creazione di un oggetto all’interno di un pulsante, che una volta premuto, ci darà (come da immagine sottostante) la possibilità di ultimare il completamento degli OAV gestiti dell’oggetto oltre ad evidenziare quelli già inseriti perchè decisi al momento della pressione del pulsante stesso e a pre-compliarne altri in automatico prendendo il default.
Dopo la scelta se immettere altri campi o essere già soddisfatti di quelli già a video, è possibile confermare e creare fisicamente l’oggetto in essere.
Nel nostro caso un nuovo articolo di nome “PROI9” avente descrizione (OAV I/02) “Non plus ultra tra i processori Intel” e peso (OAV I/08) “0,2”.
Il codice può essere così scritto:

::G.SEZ Pos(1)
 ::G.SUB.BTN Tit="*NONE"    
  ::G.DIN When="Click" Exec="F(EXD;*SCO;) 1(AR;ART;PROI9) 2(MB;SCP_SCH;LOA36) P(MsgExe(Yes) AziExe(01) CloFin(Yes) InzDat(I/02(Non plus ultra tra i processori Intel) I/08 (0,2)))"
  ::D.OGG D(Crea Nuovo Articolo)

E la risultante scheda mostrata del LOA36 è visualizzata qui sotto:

In questo esempio cliccando sul pulsante conferma riceverò un errore (visualizzato qui sotto) per un campo obbligatorio non inserito.
Dopo aver sistemato questo problema, e riconfermando, verrà creato fisicamente l’oggetto.

Modifica – istanza singola – modalità interattiva (LOA36 / LOA10_SU)

La modifica di un’oggetto in modalità interattiva viene effettuata attraverso due modalità: il costruttore LOA36 con parametro AziExe impostato al valore “02” oppure attravero il LOA10_SU con l’istruzione virtuale D.FUN.LIS.

LOA36

Il costruttore sopracitato sarà utilizzato per aggiornare gli OAV dell’oggetto che viene passato nel parametro 1. Gli OAV da aggiornare saranno inseriti nel campo InzDat indicando il numero dell’OAV ed il relativo nuovo valore.

Se volessimo per esempio aggiornare la descrizione dell’OAV appena creato nel punto qui sopra, ed aggiungere anche che la classificazione della programmazione (I/11) è l’Acciaio,  basterà (rimanendo dell’idea di inserire un pulsante per fare ciò) inserire il codice sottostante:

::G.SEZ Pos(1)
 ::G.SUB.BTN Tit="*NONE"    
  ::G.DIN When="Click" Exec="F(EXD;*SCO;) 1(AR;ART;PROI9) 2(MB;SCP_SCH;LOA36) 
                       P(MsgExe(Yes) AziExe(02) CloFin(Yes) InzDat(I/02(Più potente tra i processori Intel) I/11(CC)))"
  ::D.OGG D(Aggiorna OAV Articolo)

  • LOA10_SU

Come citato nel precedente articolo che trovate in testa a questa pagina, per utilizzare il costruttore LOA10_SU viene utilizzato l’istruzione virtuale D.FUN.LIS  (che solitamente permette la gestione di liste di oggetti ma tramite una piccola accortezza può essere utilizzata anche per gestire una singola istanza).
L’accortezza da utilizzare nel caso si voglia modificare un solo oggetto è quella di passare nel campo “LISCod” il valore “*<nomeIstanza>” dove “*” sta ad indicare appunto un singolo oggetto.

Nell’esempio seguente per esempio si è scelto di modificare l’OAV I/02 e l’OAV I/11 dell’istanza PROI9 della classe ARART:

::G.SEZ Pos(1)
 ::G.SUB.EXU Tit="*NONE" ToolBarState="Invisible"
  ::G.SET.EXU ShowCmdBar="No" ButtonsPosition="Bottom" ReadOnly="No" UpdSvc="LOA10_SU" UpdPar="OAV(I/02;I/11)" ModPendMsg="Yes" ShowMsgBar="No" Parent="A01" Name="Agg"
  ::D.FUN.LIS LISCom="EXB" LISTpa="ARART" LISCod="*PROI9" LISPag="500" LISPar="Flt(N) Sch(A/01) Opz(No) NK01(1)"

Al pezzo di codice qui sopra è associato anche un layout  (di nome ARART_01) in cui vengono definiti gli OAV che intendiamo modificare. Nel nonstro esempio gli OAV I/02 e I/11 saranno modificabili (Cio=”B” significa sia di visualizzazione che di inserimento) mentre l’OAV I/01 che identifica il nome sarà di sola visualizzazione (Cio=”O” significa di OUTPUT):

::Sez Pos="1"
::Sez Pos="1A"
::Fld Nam="I/01" Cio="O"
::Fld Nam="I/02" Cio="B"
::Fld Nam="I/11" Cio="B"

Il risultato finale dovrebbe essere qualcosa di simile a quello riportato qui di seguito :

Visualizzazione – istanza singola – modalità interattiva (LOA36 / B£SER_09)

La visualizzazione di un’oggetto in modalità interattiva viene effettuata attraverso due modalità: il costruttore LOA36 con parametro AziExe impostato al valore “05” oppure attraverso il costruttore B£SER_09 con l’istruzione virtuale D.FUN.OAV.

  • LOA36

Attraverso il costruttore LOA36 sarà possibile visualizzare gli OAV dell’oggetto passato nel parametro 1.
A titolo esemplificativo, scrivendo questo pezzo di codice sarà possibile visualizzare una scheda riassuntiva degli OAV dell’oggetto creato in precedenza (qui):

::G.SEZ Pos(1)
 ::G.SUB.SCH Tit="*NONE"
  ::D.FUN.STD F(EXD;*SCO;) 1(AR;ART;PROI9) 2(MB;SCP_SCH;LOA36) P(MsgExe(Yes) AziExe(05) CloFin(Yes))

  • B£SER_09

Attraverso l’utilizzo del costruttore B£SER_09 e dell’azione virtuale D.FUN.OAV sarà invece possibile visualizzare a video solo gli OAV di interesse, e cosa ancor più fondamentale, sarà possibile cambiare il tipo di ritorno e darli in pasto a qualche componente che accetti un albero o una matrice come input di dati. Infatti il servizio B£SER_09 è in grado di recuperare un singolo OAV o una lista di OAV (scelti dall’utente) a livello di configuratore e di restituire strutture dati di tipo EXB o TRE.

Dopo aver aggiunto dei parametri aggiuntivi all’oggetto creato precedentemente si è scelto di visualizzare le sue proprietà all’interno di un box e inserire il peso all’interno di una label di tipo knob.
Il risultato è visualizzabile qui sotto:

::G.SEZ Pos(1)
 ::G.SEZ Pos(1A)
  ::G.SUB.BOX Tit="Informazioni sull'oggetto PROI9"
   ::G.SET.BOX Layout="WETEST_0B"
   ::D.FUN.OAV OAVCom="EXB" OAVTip="AR" OAVPar="ART" OAVCod="PROI9" OAVInp="Det(C) L01(J/053) L02(I/01) L03(I/02) L04(I/19)"
 
 ::G.SEZ Pos(1B)
  ::G.SUB.BOX Tit="Informazioni sull'oggetto A02"
   ::G.SET.BOX Layout="WETEST_0B"
   ::D.FUN.OAV OAVCom="EXB" OAVTip="AR" OAVPar="ART" OAVCod="A02" OAVInp="Det(C) L01(J/053) L02(I/01) L03(I/02) L04(I/19)"
 
 ::G.SEZ Pos(2)
  ::G.SEZ Pos(2A)
   ::G.SUB.LAB Tit="Peso oggetto PROI9"
   ::G.SET.LAB Border="Yes" FontColor="R255G051B051"
   ::D.FUN.OAV OAVCom="TRE" OAVTip="AR" OAVPar="ART" OAVCod="PROI9" OAVInp="Det(C) L01(I/08)" 

 ::G.SEZ Pos(2B)
  ::G.SUB.LAB Tit="Peso oggetto A02"
   ::G.SET.LAB Border="Yes" FontColor="R255G051B051"
   ::D.FUN.OAV OAVCom="TRE" OAVTip="AR" OAVPar="ART" OAVCod="A02" OAVInp="Det(C) L01(I/08)"

Da notare che tutto questo senza scrivere una riga di RPGLE, ma solamente tramite script di scheda.

Eliminazione – istanza singola – modalità interattiva (LOA36)

L’eliminazione di un singolo oggetto tramite il LOA36, risulta di immediata soluzione. Basta infatti settare come codice AziExe “04” per veder comparire la scheda di eliminazione dell’oggetto passato nel parametro 1.

Per didattica riporto il tutto nell’esempio sottostante dove alla pressione del tasto “Cancella Articolo” verrà mostrata l’immagine più in basso e confermando avverrà la reale cancelllazione dell’oggetto:

::G.SEZ Pos(1)
 ::G.SUB.BTN Tit="*NONE"
  ::G.DIN When="Click" Exec="F(EXD;*SCO;) 1(AR;ART;PROI9) 2(MB;SCP_SCH;LOA36) P(MsgExe(Yes) AziExe(04) CloFin(Yes))"
  ::D.OGG D(Cancella Articolo)


Modifica – multi istanza – modalità interattiva (LOA10_SU)

La modifica multi-istanza ricalca molto quello già visto per la singola istanza, con l’unica eccezione di trovarsi di fronte a poter visualizzare e modificare più OAV di più oggetti “contemporaneamente”.
Questo è reso possibile dal costruttore LOA10_SU e più precisamente dall’azione virtuale D.FUN.LIS. Vediamo subito un esempio…

Esso tramite il passaggio del parametro LISCod=”*” che identifica una lista, permette di poter modificare OAV di più istanze.
Nell’esempio riportato qui di seguito dopo un primo filtraggio dei dati nel campo LISWhe , in cui scelgo solo i record che abbiano l’OAV I/11 (ovvero la classe programmazione) non BLANKS, visualizzo in modalità editazione solo gli OAV di “Descrizione articolo”, “Classe programmazione”, “Note libere”, “Colori Ammessi”, “Taglie Ammesse” inserendo in SCP_LAY ARART_01 gli oav citati.

::G.SEZ Pos(1)
 ::G.SUB.EXU Tit="*NONE" ToolBarState="Invisible"
  ::G.SET.EXU ShowCmdBar="No" ButtonsPosition="Bottom" ReadOnly="No" UpdSvc="LOA10_SU" UpdPar="OAV(I/02;I/11;N/AR/NOT;P/ART/P05;P/ART/P15)" ModPendMsg="Yes" ShowMsgBar="No" Parent="A01" Name="Agg"
  ::D.FUN.LIS LISCom="EXB" LISTpa="ARART" LISCod="*" LISPag="500" LISWhe="Oav(I/11) Sel(<>) Val()" LISPar="Flt(N) Sch(A/01) Opz(No) NK01(1)"
::Sez Pos="1"
 ::Sez Pos="1A"
  ::Fld Nam="I/01" Cio="O"
  ::Fld Nam="I/02" Cio="B"
  ::Fld Nam="I/11" Cio="B" Cmp="Cmb"
  ::Fld Nam="J/022" Cio="B"
  ::Fld Nam="P/ART/P05" Cio="B" Cmp="Cmb"
  ::Fld Nam="P/ART/P15" Cio="B" Cmp="Cmb"

Visualizzazione – multi istanza – modalità interattiva (LOA10_SE)

Il metodo più semplice per visualizzare oggetti multipli è quello di utilizzare il LOA10_SU con l’azione virtuale D.FUN.ELE.

I parametri passabili sono il tipo di oggetto restituito (TRE o EXB), il tipo di oggetto, la paginazione. E’ inoltre possibile inserire dei filtri per filtrare le istanze.

Nel caso che mostro di seguito, è stato applicato un filtro che visualizza una lista di immagini dei collaboratori che iniziano con “SC”

::G.SEZ Pos(1)
 ::G.SUB.IML Tit="*NONE"    
    ::D.FUN.ELE ELECom="TRE" ELETip="CN" ELEPar="COL" ELEFlt="SC*" ELEPag="20"

Per oggi abbiamo finito, vedremo nella prossima puntata l’utilizzo della modalità Batch