Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

uso di Access/Assign per sostituire variabili globali

14 views
Skip to first unread message

summario

unread,
Mar 12, 2020, 5:17:27 PM3/12/20
to
buonasera a tutti i nottambuli di Visual Objects.
ho un problema che mi toglie qualche notte di sonno e provo a sottoporlo al gruppo, con la certezza che sicuramente, insieme una soluzione si trova.

METHOD Buttoncerca() CLASS DocTraspoReso

LOCAL oResoRiceddt as ResoRiceddt // finestra dalla quale rilevo la presenza del Doc. di reso se presente in archivio
LOCAL oTestaddt AS Testaddt //Archivio dei documenti
LOCAL oTabdocU := TabdocU{} AS OBJECT /Archivio tabella tipi di documenti
LOCAL oConsegne AS Consegne //Achivio di dettaglio del documento
LOCAL fatturata AS LOGIC
LOCAL Datafattura, fattura as STRING
//LOCAL sDataReso, sNumreso as STRING
//local aResoDDT as ARRAY

fatturata := FALSE

IF Empty(NumeroConsegna) .and. Empty(DataConsegna) // due variabili globali da sostituire
//Ricerca per la prima volta
//SELF:sModo := "MODIFICA"
//SELF:SETUP()
SELF:Caption := "MODIFICA del documento di Trasporto" // si scrive il titolo della finestra
//cerco il movimento e se lo trovo lo gestisco
oResoRiceddt := ResoRiceddt{self:Owner,,,}
oResoRiceddt:Show()

ELSE
//Annullo i movimenti dell'archivio di appoggio temporaneo
self:oSFTestaresi_DETAIL:Server:Gotop()
DO WHILE !self:oSFTestaresi_DETAIL:Server:EOF
IF NetRecLock(self,self:oSFTestaresi_DETAIL:Server, 1200)
self:oSFTestaresi_DETAIL:Server:DELETE()
self:oSFTestaresi_DETAIL:Server:Commit()
self:oSFTestaresi_DETAIL:Server:Unlock()
ENDIF
self:oSFTestaresi_DETAIL:Server:Skip()
ENDDO
self:oSFTestaresi_DETAIL:Server:Pack()
self:oSFTestaresi_DETAIL:Server:Refresh()
SELF:Caption := "MODIFICA del documento di Trasporto" // si scrive il titolo della finestra
//cerco il movimento e se lo trovo lo gestisco
oResoRiceddt := ResoRiceddt{self:Owner,,,}
oResoRiceddt:Show()
ENDIF
else
//Proseguo per la visualizzazione ed elaborazione
endif
Ecco il quesito:
Come posso evitare l'uso delle variabili globali ???
Premessa: sapendo che la procedura di access/assign, mi pare lavori solo in ambito della stessa classe, mentre, da come si evince dallo stralcio io uso una classe per effettuare la ricerca e la selezione con l'uso delle variabili globali che comporranno il filtro di ricerca nell'ambito del metodo che al termine del rilevamento provvede a popolare la windows della procedura "DocTraspoReso".
Ho fiducia che saprete darmi suggerimenti in grado di sbrogliare questa matassa che mi affrancherebbe dall'uso eccessivo di variabili globali a vantaggio di variabili "export" o altro e che terminano la loro funzione una volta conclusa la procedura interessata, liberando risorse importanti.
Grazie ed attendo ogni vostro prezioso suggerimento in merito.
Mario Summa

Wolfgang Riedmann

unread,
Mar 13, 2020, 8:50:29 AM3/13/20
to
Ciao Mario,

da anni uso una propria classe derivata dalla classe App.
Tutto quello che mi serve in maniera globale non è poi altro che una
variable della classe App estesa.
L'unica variabile globale perciò è il oggetto App stesso.
Il bello di questa soluzione è che al termine programma il garbage
collector "pulisce" questo oggetto automaticamente.

La mia funzione Start() è questa:

FUNCTION Start()

ErrorBlock( {|oError| WDefError(oError)} )

oApp := EnhancedApp{}
__SetAppObject( oApp )
oApp:Start()

oApp:Quit()
oApp:Destroy()
oApp := NULL_OBJECT

RETURN NIL

e la classe EnhancedApp inizia così (in certi programmi ha qualche
centinaio di variabili perchè ci metto tutte le impostazioni, cache di
dati ecc.

class EnhancedApp inherit App
export cPrgPath as string
export cDataPath as string
export oShell as AppShellWindow

Saluti

Wolfgang

P.S. in X# per queste impostazioni uso un oggetto tipo Singleton (che
può esistere una sola volta).
--

0 new messages