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