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