Spostamento nei dati

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();