Durchlaufen von Daten

Dieses Beispiel zeigt, wie eine beliebige Anzahl an Bildschirmen durchlaufen wird und die Daten auf den jeweiligen Bildschirmen verarbeitet werden.

 // Neue Makrofunktion erstellen.
var macro = createMacro(function*(){
	'use strict';
	
	// Variable(n) für eine spätere Verwendung erstellen
	var password;
	var accountNumber;
	var transactionCount = 0;
	var row = 0;
	
	// Eine Referenz zum PresentationSpace-Objekt abrufen.
	var ps = session.getPresentationSpace();
	
	try {
		// Für die Anmeldung bei der Anwendung Benutzername und Kennwort eingeben.
		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);
		
		// Anwendungsbefehl eingeben.
		yield wait.forCursor(new Position(20, 38));
		ps.sendKeys('4');
		ps.sendKeys(ControlKey.ENTER);
		
		// Transaktionen für ein Konto werden aufgelistet.
		yield wait.forCursor(new Position(13, 25));
		ps.sendKeys('2');
		// Kontonummer eingeben. Hier zur Erleichterung hartcodiert.
		yield wait.forCursor(new Position(15, 25));
		accountNumber = yield ui.prompt('Kontonummer:', '167439459');
		ps.sendKeys(accountNumber);
		ps.sendKeys(ControlKey.ENTER);

		// Warten, bis auf dem Kontoprofilbildschirm vorhanden
		yield wait.forText('ACCOUNT PROFILE', new Position(3, 33));
		
		// Nach Text suchen, der anzeigt, dass die letzte Seite des Datensatzes erreicht wurde
		while (ps.getText(new Position(22, 12), 9) !== 'LAST PAGE') {
		
			// Während die letzte Seite mit Datensätzen nicht erreicht wurde, zur nächsten Seite mit Datensätzen wechseln.
			ps.sendKeys(ControlKey.PF2);
			yield wait.forCursor(new Position(1, 1));
			
			// Wenn die Cursorposition nicht zwischen Datensatzbildschirmen wechselt und der Bildschirm keinen Text enthält,
			// können Sie prüfen, ob ein Bildschirm aktualisiert wurde. Sie können eine
			// festgelegte Zeitspanne warten, bis eine aid-Taste für den Aufbau des Bildschirms gesendet wird.
			// Zum Beispiel:
			// yield wait.forFixedTime(1000);
			
			// Für alle Zeilen die Zählvariable erhöhen, wenn sie Daten enthalten.
			for (row = 5; row <= 21; row++) {
			
				// Es befinden sich zwei Spalten auf dem Bildschirm. Daten in Spalte 1 prüfen.
				// In diesem Beispiel wissen wir: Wenn sich an einer bestimmten
				// Position ein Leerzeichen befindet, liegt eine Transaktion vor.
				if (ps.getText(new Position(row, 8), 1) !== ' ') {
					transactionCount++;
				}
				// Daten in Spalte 2 prüfen.
				if (ps.getText(new Position(row, 49), 1) !== ' ') {
					transactionCount++;
				}
			}
		}
		
		// Nach dem Durchlaufen aller Datensatzseiten die Anzahl der Datensätze in einem Meldefenster anzeigen.
		yield ui.message('Es wurden ' + transactionCount + ' für Ihre Konto ' + accountNumber + ' gefunden.');
		
		// Log out of the application
		ps.sendKeys(ControlKey.PF13);
		ps.sendKeys(ControlKey.PF12);

		// The try / catch allows all errors to be caught and reported in a central location
	} catch (error) {
		// Here we use the ui object to display a message that an error occurred
		yield ui.message(error.message);
	}
});

// Here we run the macro and return the results to the Macro Runner
// The return statement is required as the application leverages
// this to know if the macro succeeded
return macro();