Navegar Por Datos

Este ejemplo explica cómo navegar por un número variable de pantallas y procesar los datos en cada pantalla.

 // Función Crear una nueva macro.
var macro = createMacro(function*(){
  'use strict';
  
  // Crear variable(s) para uso posterior
  var password;
  var accountNumber;
  var transactionCount = 0;
  var row = 0;
  
  // Obtener una referencia para el objeto PresentationSpace.
  var ps = session.getPresentationSpace();
  
  try {
    // Introducir nombre de usuario y contraseña para iniciar sesión en la aplicación.
    yield wait.forCursor(new Position(19, 48));
    ps.sendKeys('bjones' + ControlKey.TAB);
    
    yield wait.forCursor(new Position(20, 48));
    password = yield ui.prompt('Contraseña:', null, true);
    ps.sendKeys(password);
    ps.sendKeys(ControlKey.ENTER);
    
    // Introducir un comando de aplicación.
    yield wait.forCursor(new Position(20, 38));
    ps.sendKeys('4');
    ps.sendKeys(ControlKey.ENTER);

    // Ir a la lista de transacciones para una lista.
    yield wait.forCursor(new Position(13, 25));
    ps.sendKeys('2');
    // Ingresar un número de cuenta. Codificación fija aquí para simplificar.
    yield wait.forCursor(new Position(15, 25));
    accountNumber = yield ui.prompt('Número de cuenta:', '167439459');
    ps.sendKeys(accountNumber);
    ps.sendKeys(ControlKey.ENTER);
    
    // Esperar hasta que esté en pantalla de perfil de cuenta
    yield wait.forText('ACCOUNT PROFILE', new Position(3, 33));
    
    // Buscar texto que indique que la última página de la grabación se ha alcanzado
    while (ps.getText(new Position(22, 12), 9) !== 'LAST PAGE') {
    
      // Mientras que la página de la grabación no se haya alcanzado, ir a la siguiente página de grabaciones.
      ps.sendKeys(ControlKey.PF2);
      yield wait.forCursor(new Position(1, 1));
      
      // Si la posición del cursor no cambia entre las pantallas de grabación y no hay texto
      // en la pantalla, puede verificar si una pantalla se ha actualizado, puede esperar durante un
      // periodo de tiempo fijo después de que una tecla de ayuda haya sido enviada hasta el establecimiento de la pantalla.
      // Por ejemplo:
      // yield wait.forFixedTime(1000);

      // Para cada una de las pantallas, incremente la variable de recuento si contiene datos.
      for (row = 5; row <= 21; row++) {
      
        // Hay 2 columnas en la pantalla. Comprobar datos en columna 1.
        // En este ejemplo, sabemos que si hay un espacio en una posición
        // específica, se trata de una transacción.
        if (ps.getText(new Position(row, 8), 1) !== ' ') {
          transactionCount++;
        }
        // Comprobar datos en columna 2.
        if (ps.getText(new Position(row, 49), 1) !== ' ') {
          transactionCount++;
        }
      }
    }
    
    // Después de haber pasado por todas las páginas de grabación, mostrar el número de grabaciones en un cuadro de mensaje.
    yield ui.message('Encontradas ' + transactionCount + ' grabaciones para cuenta ' + accountNumber + '.');
    
    // Salir de la aplicación
    ps.sendKeys(ControlKey.PF13);
    ps.sendKeys(ControlKey.PF12);
    
    // La try / catch permite capturar todos los errores y notificarlos a una ubicación central
  } catch (error) {
    // Aquí utilizamos el objeto ui para visualizar un mensaje que indica que se ha producido un error
    yield ui.message(error.message);
  }
});

// Aquí ejecutamos la macro y devolvemos los resultados al Ejecutor de macros
// La instrucción return es necesaria, ya que la aplicación aprovecha
// esto para saber si la macro se ha ejecutado correctamente y cuándo ha finalizado
return macro();