Titolo: Convertire un metodo per eseguirlo su Server
Categoria: Codice |
|
Ultimo Aggiornamento: 21/08/05 |
Alcune procedure eseguite su Client sarebbero eseguite in maniera molto più veloce su Server, ad esempio se si modificano tanti record e non ci sono legami all'interfaccia. Ora supponiamo di avere una procedura fatta così:
`MioMetodo
C_REAL($0;Tot_l)
Tot_l:=0
ALL RECORDS([Tabella])
APPLY TO SELECTION([Tabella];Tot_l:=Tot_l+([Tabella]Prezzo*[Tabella]Quantità))
$0:=Tot_l
Per evitare di modificare tutte le procedure che chiamano MioMetodo, interveniamo sullo stesso premettendo una chiamata a se stessa come stored procedure aggiungendo un parametro; poi aspettiamo il risultato dal server e lo ritorniamo come valore, mantenendo così invariato il funzionamento di MioMetodo dal punto di vista delle altre procedure.
`MioMetodo
C_REAL($0;Tot_l)
C_TEXT($1;$Parametro_t)
C_LONGINT($Processo_l)
C_BOOLEAN(Pronto_b;HoLetto_b)
Case of : (Count parameters=0)
$Processo_l:=Execute on server(Current method name;
Maxint;Current method name;"SulServer")
`Questo ciclo aspetta che la Stored Procedure sia Pronta a darmi il valore Pronto_b:=
False Repeat DELAY PROCESS(Current process;60)
IDLE
GET PROCESS VARIABLE($Processo_l;Pronto_b;Pronto_b)
Until (Pronto_b)
GET PROCESS VARIABLE($I_Process;Tot_l;Tot_l)
`E poi avverto la Stored Procedure che ho letto, così si chiude HoLetto_b:=
True SET PROCESS VARIABLE($I_Process;HoLetto_b;HoLetto_b)
`Ritorno il valore $0:=Tot_l
Else `Questa parte viene eseguita sul server come Stored Procedure Pronto_b:=
False `CODICE ORIGINALE Tot_l:=0
ALL RECORDS([Tabella])
APPLY TO SELECTION([Tabella];Tot_l:=Tot_l+([Tabella]Prezzo*[Tabella]Quantità))
`avverto che il risultato è pronto Pronto_b:=
True `aspetto che il client abbia letto e poi chiudo HoLetto_b:=
False Repeat DELAY PROCESS(Current process;3)
IDLE
Until (HoLetto_b)
End case
Inviato da: Umberto Migliore |
|
Visite: 11736 |
Se accedi con utente e password, puoi aggiungere dei commenti.