How to Add Custom Actions to Screens Projects

Introduction

Some Screens solutions might require screen actions that are not mapped by default to our action-mappings (such as PA actions, SYSREQ, PRINT, etc.).
This means that we need to "tell" our connector how to send these actions to the backend (AS400/Mainframe).
Before version 4.5, adding these actions required changing a significant number of configuration beans. From version 4.5, we made it easier to add custom terminal screen actions.
We do so by following these steps:


Step-by-Step Guide

Open the project's configuration file located at {project-name-base-package}.config e.g. MyProjectConfiguration.java and edit the configuration as follows:

	@Bean
	public AdditionalMappingClass actionMappings(TerminalActionMapper tam) {
		return new AdditionalMappingClass(tam);
	}
	public class AdditionalMappingClass {

		private TerminalActionMapper tam;

		public AdditionalMappingClass(TerminalActionMapper tam) {
			this.tam = tam;
		}

		@PostConstruct
		public void init() {
			tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F1(),"[pa1]");
			tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F2(),"[pa2]");
			tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F3(),"[pa3]");
		}
	}

Note that when working with h3270 connector (mainframe screens), the value of the action should be without the brackets []

tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F1(),"pa1");
tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F2(),"pa2");
tam.addActionToMapping(TerminalAction.AdditionalKey.ALT, AdditionalTerminalActions.F3(),"pa3");

In order to execute your additional action in the emulation press the combined key on the screen e.g: ALT + F1.

On runtime, you can use to combine terminal action for example:


ScreenEntity screenEntity = terminalSession.doAction(TerminalActions.combined(TerminalAction.AdditionalKey.ALT, TerminalActions.f2()), NextEntity);