È possibile utilizzare gli script globali per definire le funzioni comuni che è possibile richiamare da un hook dello schema. Gli script globali sono simili ad una libreria di routine secondarie; il software Rational ClearQuest non le richiama direttamente.
Gli script globali sono utili quando si dispone di più tipi di record che richiamano lo stesso codice di hook. Consentono di centralizzare la manutenzione del codice hook e di evitare la copia del codice hook in più percorsi. Ad esempio, lo script globale incluso nel pacchetto Email di Rational ClearQuest consente a più azioni di inviare la notifica richiamando uno script globale.
L'unico modo per richiamare uno script globale è richiamarlo da un altro script. Tuttavia, un richiamo ad uno script globale deve essere memorizzato su un richiamo ad un hook in base al record, come un hook field, action o uno script record. Poiché i richiami ad uno script globale possono essere memorizzati sempre in un hook basato sul record, ogni script globale viene fornito con un oggetto entity implicito trasferito all'hook basato sul record che ha originato il richiamo.
È possibile scrivere gli script utilizzando VBScript e Perl, ma un tipo di linguaggio non può richiamare l'altro tipo. Durante la scrittura di uno script globale, scriverlo nello stesso linguaggio dello script che lo richiama.
Utilizzare le funzioni solo in un hook globale poiché, a meno che non si trovi in una funzione, tutto il codice presente in uno script globale viene eseguito.
Per ulteriori informazioni, consultare Scrittura di script e Contesto operativo per utilizzare gli script.
Per esempi di script relativi, consultare > Esempio dello script globale
Per Perl, le variabili $entity e $session sono variabili globali che diventano attive quando viene eseguito un hook. Queste variabili sono definite al runtime e possono essere utilizzate nel codice dello script globale. Tuttavia, non utilizzare queste variabili per richiamare i metodi dell'oggetto Entity o Session all'interno del contesto di uno script globale.
$info = $session->GetProductInfo();Non è sufficiente posizionare la chiamata $session in una routine secondaria globale. Ad esempio,il seguente codice riporta un esito negativo per le stesse ragioni poiché tenta di risolvere $productInfo in fase di compilazione:
$productInfo = GetProductInfo();
sub GetProductInfo
{
return $session->GetProductInfo();
}
Anziché utilizzare le variabili globali come la chiamata $productInfo GetProductInfo() per richiamare il valore.
Durante l'esecuzione di hook Perl, $session è sempre impostato sulla sessione corrente. Tuttavia, per ottenere risultati ottimali, non definire le variabili globali sensibili ai dati dell'oggetto Session o Entity; ma scrivere funzioni di accesso globali (ad esempio, GetUserLoginName()) per richiamare i valori.
Gli script globali devono essere utilizzati come raccolta di routine secondarie che possono essere richiamate da altri hook (quali, hook access control, initialization e validation). Per consentire tale operazione, il codice dello script globale è incluso come parte del codice Perl utilizzato per ogni esecuzione di hook. Tuttavia, il codice dello script globale può includere istruzioni esterne all'ambito della routine secondaria (nell'ambito file).
A partire dalla versione 7.0.1, è disponibile un nuovo miglioramento di hook Perl che esegue la clonazione di script globali. Quando questo miglioramento è abilitato, viene creato un ambiente hook Perl; tutto il codice dello script globale viene compilato e poi clonato per creare nuovi ambienti hook. Il processo di clonazione impedisce la ricompilazione del codice e consente agli ambienti hook di condividere una struttura di analisi. La clonazione degli script consente di risparmiare tempo e memoria per ogni ambiente hook Perl, che fornisce risultati ottimali (con miglioramenti significativi per Rational ClearQuest Web).
Gli sviluppatori di schemi devono considerare le modalità di utilizzo della clonazione durante la scrittura di script globali. Se la clonazione è abilitata per gli hook globali, le istruzioni dell'ambito file presenti negli script globali vengono eseguite una sola volta. I risultati vengono poi clonati per gli interpreti Perl successivi. Se la clonazione è disabilitata, questo codice viene eseguito ogni volta che viene creato l'ambiente hook (una volta per ogni azione di record e una per ogni chiamata script del record).
our $run_once;
sub DoSetup
{
return if defined($run_once);
$run_once = 1;
# do setup here
}
sub Defect_Initialization {
DoSetup();
# …
# …
#reset of Defect_Initialization code….
# …
}
In questo esempio di codice, la variabile $run_once non è definita quando viene creato un ambiente hook. Quando viene clonato, questa variabile non è ancora definita. Quando gli hook vengono eseguiti per la prima volta e viene richiamato DoSetup(), viene eseguito il codice di impostazione.