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