Sviluppo4d.it
Sito indipendente di informazioni tecniche per sviluppatori 4th Dimension italiani  

Sviluppatori 4D

Utility 4D

Risorse 4D



4d logo
Naviga: Prev Next

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.


Accesso

User:
Pass: Accedi

Cerca

Se non trovi le informazioni che cerchi scrivi a aiuto@sviluppo4d.it

4D Principali

4D Discussioni

Faq random


Crediti

Dominio registrato da ZetaNet
Sito realizzato da Nexus srl
4D SQL 11.9.0 offerto da 4D & Italsoftware
Icone di FAMFAMFAM
Moderato da Umberto Migliore
318 utenti registrati

Pagina servita il 09/10/24 alle 15:42:23 Valid HTML 4.01! Valid CSS!

Mutuo Facile, iDigitalScout, iDigitalTags e altre app di Nexid srl per iPhone e iPad

Cidroid, distributore italiano lettori barcode per IOS Apple iPhone, iPod, iPad