Questo esempio illustra come spostarsi in un numero variabile di schermi ed elaborare i dati di ogni schermo.
// Creare una nuova funzione macro.
var macro = createMacro(function*(){
'use strict';
// Creare una o più variabili da utilizzare successivamente
var password;
var accountNumber;
var transactionCount = 0;
var row = 0;
// Ottenere un riferimento all'oggetto PresentationSpace.
var ps = session.getPresentationSpace();
try {
// Immettere nome utente e password per accedere all'applicazione.
yield wait.forCursor(new Position(19, 48));
ps.sendKeys('bjones' + ControlKey.TAB);
yield wait.forCursor(new Position(20, 48));
password = yield ui.prompt('Password:', null, true);
ps.sendKeys(password);
ps.sendKeys(ControlKey.ENTER);
// Immettere un comando dell'applicazione.
yield wait.forCursor(new Position(20, 38));
ps.sendKeys('4');
ps.sendKeys(ControlKey.ENTER);
// Creare l'elenco delle transazioni per un conto.
yield wait.forCursor(new Position(13, 25));
ps.sendKeys('2');
// Immettere un numero di conto. In questo esempio ne è stato inserito uno per maggior chiarezza.
yield wait.forCursor(new Position(15, 25));
accountNumber = yield ui.prompt('Account Number:', '167439459');
ps.sendKeys(accountNumber);
ps.sendKeys(ControlKey.ENTER);
// Attendere fino a quando raggiunge lo schermo del profilo del conto
yield wait.forText('ACCOUNT PROFILE', new Position(3, 33));
// Cercare il testo che indica che è stata raggiunta l'ultima pagina del record
while (ps.getText(new Position(22, 12), 9) !== 'LAST PAGE') {
// Quando non è ancora stata raggiunta l'ultima pagina del record, passare alla pagina successiva di record.
ps.sendKeys(ControlKey.PF2);
yield wait.forCursor(new Position(1, 1));
// Se la posizione del cursore non cambia da uno schermo di record all'altro e non è presente testo sullo schermo,
// è possibile attendere che uno schermo venga aggiornato. È possibile specificare
// il periodo di tempo di attesa dopo che è stato inviato un tasto AID per il completo aggiornamento dello schermo.
// Ad esempio:
// yield wait.forFixedTime(1000);
// Per ogni riga, incrementare la variabile count se contiene dati.
for (row = 5; row <= 21; row++) {
// Sullo schermo sono presenti 2 colonne. Verificare i dati nella colonna 1.
// In questo esempio, sappiamo che se è presente uno spazio in una posizione
// particolare, esiste una transazione.
if (ps.getText(new Position(row, 8), 1) !== ' ') {
transactionCount++;
}
// Verificare i dati nella colonna 2.
if (ps.getText(new Position(row, 49), 1) !== ' ') {
transactionCount++;
}
}
}
// Dopo essere passati in tutte le pagine di record, visualizzare il numero di record in una casella di messaggio.
yield ui.message('There are ' + transactionCount + ' records found for account ' + accountNumber + '.');
// Disconnettersi dall'applicazione
ps.sendKeys(ControlKey.PF13);
ps.sendKeys(ControlKey.PF12);
// try/catch consente di rilevare gli errori e segnalarli in un'ubicazione centrale
} catch (error) {
// Qui viene utilizzato l'oggetto ui per visualizzare un messaggio che informa che si è verificato un errore
yield ui.message(error.message);
}
});
// Qui viene eseguita la macro e i risultati vengono restituiti a Macro Runner
// L'istruzione return è necessaria poiché l'applicazione la utilizza
// per sapere se la macro è stata eseguita correttamente
return macro();