Gli hook sono punti di immissione, come trigger, per script che vengono eseguiti in determinati intervalli per controllare come gli utenti utilizzano un ambiente Rational ClearQuest.
Gli hook vengono eseguiti con privilegi di super utente e quindi non sono soggetti al solito controllo accessi o alle limitazioni del funzionamento del campo. È possibile utilizzare hook per impostare e reimpostare i valori nei campi che, di solito, sono di sola lettura. Non è possibile reimpostare i campi del sistema, ad esempio il campo Cronologia. I campi richiesti restano obbligatori. Per ulteriori informazioni, consultare Riferimento API IBM Rational ClearQuest e Azioni e controllo accessi .
Sono supportati quattro tipi di hook:
Gli hook campo forniscono una modalità per controllare il valore di un campo durante l'esecuzione e per regolare gli altri campi in base alle esigenze. Ad esempio, è possibile convalidare il contenuto di un campo o assegnarlo ad un valore predefinito.
Gli hook azione forniscono una modalità per eseguire attività sui punti chiave nella durata di un record. In generale, gli hook azione sono associati ad eventi che influiscono sull'intero record. Ad esempio, è possibile convalidare l'intero record ed inviare le notifiche al termine dell'azione.
Gli script del record forniscono una modalità per eseguire attività specifiche durante il runtime. Sono specifici per un tipo di record e di solito sono associati ai controlli del modulo.
Gli script globali forniscono una modalità per definire le librerie di routine che possono essere condivise da tutti i tipi di record nello schema. Ad esempio, è possibile scrivere una routine secondaria, quale una notifica e-mail, che può essere richiamata da un hook in un tipo di record.
È possibile scrivere gli hook in VBScript (per Windows) e Perl (per il sistema UNIX e Windows). Per impostazione predefinita, gli hook vengono eseguiti in VBScript su Windows. Per informazioni sull'esecuzione degli hook in Perl per Windows, consultare Linguaggi di script .
È possibile aggiungere uno script scritto in VBScript o Perl agli hook campo e azione. Se si creano gli script globali o gli script del record, è necessario utilizzare VBScript o Perl.
Per riferimento e memorizzazione, è possibile scrivere gli script VBScript e Perl nello stesso schema. Tuttavia, uno schema esegue script solo nel linguaggio specificato per tale schema. Per ulteriori informazioni, consultare Linguaggi di script).
Scrivere o modificare gli script nell'editor di script. Quando viene definito un nuovo script, Designer aggiunge la sintassi di richiamo per tale hook alla finestra dell'editor di script. La sintassi di richiamo non può essere modificata. Designer aggiunge anche il testo del corpo di esempio che può essere modificato in base alle esigenze. (Il testo del corpo iniziale viene impostato come commento e non viene eseguito se non si rimuovono gli indicatori di commento).
Designer fornisce un editor di script per VBScript e Perl e indica il tipo di editor nella barra dei titoli della finestra. Verificare che sia attivo l'editor corretto prima di scrivere il codice.
Il processo di scrittura di hook VBScript e Perl è semplificato dal momento che il sistema operativo è congruente. Prima che un hook richiami uno script VBScript o Perl, il software Rational ClearQuest crea un oggetto Sessione e registra l'utente nel sistema. Poiché tutti gli hook (inclusi gli script globali) sono eseguiti dal contesto del record corrente, viene fornito un oggetto Entità che corrisponde a tale record. Gli script globali condividono l'oggetto Entità associato all'hook che lo ha richiamato.
All'interno di uno script, è possibile richiamare i metodi di Entità senza specificare un identificativo iniziale. Ad esempio, è possibile richiamare il metodo GetSession dell'Entità nel seguente modo:
set curSession = GetSession
Quando i metodi vengono richiamati in questo modo, il software Rational ClearQuest presuppone il richiamo di un metodo dell'oggetto Entità implicito trasferito all'hook. Se si desidera fare riferimento a questo oggetto Entità esplicitamente, è possibile utilizzare il nome del tipo di record come identificativo per l'oggetto. L'utilizzo di questo identificativo può chiarire il codice che gestisce più oggetti Entità alla volta, come nel seguente modo, che contrassegna un'entità come duplicato di un altro:
set curSession = GetSession
idName = GetFieldValue("id").GetValue
set currentObj = curSession.GetEntity("defect", idName)
' Mark the entity with ID="SAMPL00000031" as a duplicate of this entity.
' Use the action named "duplicate".
set dupEntityObj = curSession.GetEntity("defect", "SAMPL00000031")
curSession.MarkEntityAsDuplicate dupEntityObj, currentObj, "duplicate"
Poiché gli script possono influire sul funzionamento di un campo, è opportuno progettare e verificare attentamente il codice hook. Ad esempio, se un hook richiede che un campo contenga alcuni valori, il campo diventa obbligatorio anche se il funzionamento non è impostato su MANDATORY.
Il codice hook, se non viene scritto correttamente, può introdurre errori non immediatamente evidenti in fase di runtime. Un hook verrà compilato quando si convalida lo schema e ogni errore di sintassi o di grammatica verrà contrassegnato. Verificare uno schema con un database di test prima di eseguire il checkin ed eseguire il backup del database dell'utente prima di applicare le modifiche dello schema. Per ulteriori informazioni, consultare Test dello schema con un database di test.
Quando vengono pianificati gli hook, considerare quanto segue:
Molti problemi correlati agli hook in esecuzione in un ambiente replicato sono gli stessi di quelli relativi al blocco dei database in una singola sede. Anche il test funzionale degli hook è la stessa in una singola sede o in un ambiente replicato. Tuttavia, l'esecuzione di alcuni hook ClearQuest può essere diversa in un ambiente replicato rispetto ad un ambiente con singola sede. Ad esempio, gli hook che aggiornano altri record nel contesto dell'azione di un record possono rilevare errori se l'altro record non è amministrato nella sede corrente e, quindi, non è modificabile.
Ciascun record del database può solo essere aggiornato nella sede in cui viene amministrato (ciò viene indicato dal nome della sede della replica nel campo ratl_mastership del record). Nelle applicazioni complesse, è possibile aggiornare più record come parte di una transazione complessa. Al momento della progettazione e del test degli hook per un ambiente replicato, è necessario tenere in considerazione questi principi.
Consultare anche Blocco di record e Convalida di schemi .
Quando si installa un package, gli hook del campo o gli script del record possono essere aggiunti allo schema. Questi script fanno parte del package, non del codice hook.
Gli script del package non possono essere eliminati o modificati e non fanno parte del codice che appartiene a uno schema. Per questo motivo, non vi è alcuna relazione tra l'impostazione del linguaggio predefinito scelta per il codice hook e il linguaggio in cui gli hook che appartengono a un package sono implementati.