This sample illustrates how to page through a variable number of screens and process the data on each screen.
// Create a new macro function.
var macro = createMacro(function*(){
'use strict';
// Create variable(s) for later use
var password;
var accountNumber;
var transactionCount = 0;
var row = 0;
// Obtain a reference to the PresentationSpace object.
var ps = session.getPresentationSpace();
try {
// Enter Username and Password to log on to the application.
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);
// Enter an application command.
yield wait.forCursor(new Position(20, 38));
ps.sendKeys('4');
ps.sendKeys(ControlKey.ENTER);
// Going to list transactions for an account.
yield wait.forCursor(new Position(13, 25));
ps.sendKeys('2');
// Input an account number. Hard coded here for simplicity.
yield wait.forCursor(new Position(15, 25));
accountNumber = yield ui.prompt('Account Number:', '167439459');
ps.sendKeys(accountNumber);
ps.sendKeys(ControlKey.ENTER);
// Wait until on account profile screen
yield wait.forText('ACCOUNT PROFILE', new Position(3, 33));
// Search for text that indicates the last page of record has been reached
while (ps.getText(new Position(22, 12), 9) !== 'LAST PAGE') {
// While the last page of record has not been reached, go to the next page of records.
ps.sendKeys(ControlKey.PF2);
yield wait.forCursor(new Position(1, 1));
// If the cursor position does not change between record screens, and there is no text
// on the screen you can check to confirm a screen is updated, you may wait for a
// fixed time period after an aid key is sent for the screen to settle.
// For example:
// yield wait.forFixedTime(1000);
// For each of the rows, increment the count variable if it contains data.
for (row = 5; row <= 21; row++) {
// There are 2 columns on the screen. Check data on column 1.
// In this example we know that if there is a space at a particular
// position then there is a transaction.
if (ps.getText(new Position(row, 8), 1) !== ' ') {
transactionCount++;
}
// Check data on column 2.
if (ps.getText(new Position(row, 49), 1) !== ' ') {
transactionCount++;
}
}
}
// After going through all record pages, display the number of records in a message box.
yield ui.message('There are ' + transactionCount + ' records found for account ' + accountNumber + '.');
// 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();