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