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