You can work with more than one session at a time in Reflection. This sample shows how to get text from one session and put it into another session.
Add property and create terminals |
Copy Code
|
---|---|
using System; using System.Threading; using Attachmate.Reflection.Framework; using Attachmate.Reflection.Emulation.IbmHosts; using Attachmate.Reflection.UserInterface; namespace WorkWithSessions { class MultipleSessions { //The value to copy between screens static private string _textToCopy = string.Empty; static public string TextToCopy { get { return _textToCopy; } set { _textToCopy = value; } } static void Main(string[] args) { //Start a visible instance of Reflection or get the instance running at the given channel name Application app = MyReflection.CreateApplication("myWorkspace", true); //Create an IBM 5250 terminal control IIbmTerminal terminalA = (IIbmTerminal)app.CreateControl(new Guid("{AF03A446-F278-4624-B9EF-C896DF2CA1CA}")); //Create an IBM 3270 terminal control IIbmTerminal terminalB = (IIbmTerminal)app.CreateControl(new Guid("{09E5A1B4-0BA6-4546-A27D-FE4762B7ACE1}")); //Get the screens for each terminal IIbmScreen screenA = terminalA.Screen; IIbmScreen screenB = terminalB.Screen; //Use the host addresses for the Reflection onboard demos terminalA.HostAddress = "demo:ibm5250.sim"; terminalB.HostAddress = "demo:ibm3270.sim"; //Make the sessions visible IFrame frame = (IFrame)app.GetObject("Frame"); frame.CreateView(terminalA); frame.CreateView(terminalB); //Create event handlers to handle navigation for each screen screenA.NewScreenReady += screenA_NewScreenReady; screenB.NewScreenReady += screenB_NewScreenReady; Console.ReadKey(); } } } |
Add property and create terminals |
Copy Code
|
---|---|
using System; using System.Threading; using Attachmate.Reflection.Framework; using Attachmate.Reflection.Emulation.IbmHosts; using Attachmate.Reflection.Emulation.OpenSystems; using Attachmate.Reflection.UserInterface; using Attachmate.Reflection.Productivity; using ScreenPoint = Attachmate.Reflection.Emulation.OpenSystems.ScreenPoint; using IBMControlKeyCode = Attachmate.Reflection.Emulation.IbmHosts.ControlKeyCode; using OSControlKeyCode = Attachmate.Reflection.Emulation.OpenSystems.ControlKeyCode; namespace WorkWithSessions { class MultipleSessions { //The value to copy between screens static private string _textToCopy = string.Empty; static public string TextToCopy { get { return _textToCopy; } set { _textToCopy = value; } } static void Main(string[] args) { //Start a visible instance of Reflection or get the instance running at the given channel name Application app = MyReflection.CreateApplication("myWorkspace", true); //Create an IBM 3270 terminal control and assign the Reflection onboard demo as the host address IIbmTerminal terminalIBM = (IIbmTerminal)app.CreateControl(new Guid("{09E5A1B4-0BA6-4546-A27D-FE4762B7ACE1}")); terminalIBM.HostAddress = "demo:ibm3270.sim"; //Open an Open Systems session and get a handle to the terminal control string sessionPath = Environment.GetEnvironmentVariable("UserProfile") + @"\Documents\Micro Focus\Reflection\demoSession.rdox"; ITerminal terminalOS = (ITerminal)app.CreateControl(sessionPath); //Get the screens for each terminal IIbmScreen screenIBM = terminalIBM.Screen; IScreen screenOS = terminalOS.Screen; //Make the sessions visible IFrame frame = (IFrame)app.GetObject("Frame"); frame.CreateView(terminalOS); frame.CreateView(terminalIBM); //Create an event handler to handle navigation for the IBM screen screenIBM.NewScreenReady += screenIBM_NewScreenReady; //Navigate to the Open Systems screen with the data and get the data GetScreenData(screenOS); Console.ReadKey(); } } } |
Navigate to screen in first session and get text |
Copy Code
|
---|---|
//Navigate to the appropriate screen and set the text for the TextToCopy property static void screenA_NewScreenReady(object sender, EventArgs e) { IIbmScreen screen = (IIbmScreen)sender; //Get text strings for screen positions and compare these strings to //known values for each screen to determine which screen the program is on string ScreenID1 = screen.GetText(1, 36, 4); string ScreenID2 = screen.GetText(1, 40, 4); string ScreenID3 = screen.GetText(1, 25, 13); if (ScreenID1 == "Sign") { screen.SendControlKey(ControlKeyCode.Transmit); } if (ScreenID2 == "Main") { screen.SendKeys("kayak"); screen.SendControlKey(ControlKeyCode.Transmit); } if (ScreenID3 == "INTERNATIONAL") { //Get the text and assign it to the TextToCopy property TextToCopy = screen.GetText(1, 39, 5); } } |
Navigate to screen in Open Systems session and get text |
Copy Code
|
---|---|
static void GetScreenData(IScreen screenOS) { //Enter the user name screenOS.WaitForHostSettle(2000, 3000); screenOS.SendKeys("user"); screenOS.WaitForHostSettle(2000, 3000); screenOS.SendControlKey(OSControlKeyCode.Return); screenOS.WaitForHostSettle(2000, 3000); //Prompt for a password ITerminal terminalOS = screenOS.Parent; string password = terminalOS.Macro.PasswordBox("Enter any password", "OS Password"); screenOS.SendKeys(password); screenOS.WaitForHostSettle(2000, 3000, true); screenOS.SendControlKey(OSControlKeyCode.Return); //navigate to the screen with the data screenOS.WaitForHostSettle(2000, 3000, false); screenOS.SendKeys("demodata"); screenOS.SendControlKey(OSControlKeyCode.Return); screenOS.WaitForHostSettle(2000, 3000, true); screenOS.SendControlKey(OSControlKeyCode.Return); //Find the row and column on the screen to get the data from ScreenPoint pointForRow = screenOS.SearchText("Jan", 1, 1, FindOptions.Forward); ScreenPoint pointForCol = screenOS.SearchText("Profit", 1, 1, FindOptions.Forward); //Get the data TextToCopy = screenOS.GetText(pointForRow.Row, pointForCol.Column + 1, 5); } |
Navigate to screen in second session and enter text |
Copy Code
|
---|---|
//Navigate to the appropriate screen and put the text in the TextToCopy property on that screen static void screenB_NewScreenReady(object sender, EventArgs e) { IIbmScreen screen = (IIbmScreen)sender; //Get text strings for screen positions and compare these strings to //known values for each screen to determine which screen the program is on string ScreenID1 = screen.GetText(1,2,3); string ScreenID2 = screen.GetText(1, 1, 5); string ScreenID3 = screen.GetText(2, 2, 6); string ScreenID4 = screen.GetText(2, 2, 7); if (ScreenID1 == "ATM") { screen.SendControlKey(ControlKeyCode.Transmit); } if (ScreenID2 == "LOGON") { screen.SendKeys("ISPF"); screen.SendControlKey(ControlKeyCode.Transmit); } if (ScreenID3 == "OPTION") { screen.SendKeys("1"); screen.SendControlKey(ControlKeyCode.Transmit); } if (ScreenID4 == "COMMAND") { //Make sure the text is retrieved from the other screen while (string.IsNullOrEmpty(TextToCopy)) { System.Threading.Thread.Sleep(500); } //Put the text in field and reset the TextToCopy property screen.PutText(TextToCopy, 5, 18); TextToCopy = string.Empty; } } |
Navigate to screen in IBM session and enter text |
Copy Code
|
---|---|
//Navigate to the appropriate screen and put the text in the TextToCopy property on that screen static void screenIBM_NewScreenReady(object sender, EventArgs e) { IIbmScreen screen = (IIbmScreen)sender; //Get text strings for screen positions and compare these strings to //known values for each screen to determine which screen the program is on string ScreenID1 = screen.GetText(1, 2, 3); string ScreenID2 = screen.GetText(1, 1, 5); string ScreenID3 = screen.GetText(2, 2, 6); string ScreenID4 = screen.GetText(2, 2, 7); if (ScreenID1 == "ATM") { //Enter the user name screen.PutText("userName", 20, 16); //No password is required for the IBM demo - Do not hard code a password //Use a password store or get the password from user input screen.SendControlKey(IBMControlKeyCode.Transmit); } if (ScreenID2 == "LOGON") { screen.SendKeys("ISPF"); screen.SendControlKey(IBMControlKeyCode.Transmit); } if (ScreenID3 == "OPTION") { screen.SendKeys("1"); screen.SendControlKey(IBMControlKeyCode.Transmit); } if (ScreenID4 == "COMMAND") { //Make sure the text is retrieved from the other screen while (string.IsNullOrEmpty(TextToCopy)) { System.Threading.Thread.Sleep(500); } //Put in the text retrieved from the Open Systems program and reset the TextToCopy property screen.PutText("Profit", 6, 18); screen.PutText(TextToCopy, 6, 33); //Reset the TextToCopy property TextToCopy = string.Empty; } } |