Walkthroughs > Other Automation Tasks > Run VBA Macro |
This sample opens a session document, prompts for a user log on, and then runs a demo macro in the document if the macro exists.
When the macro has completed execution, it closes the InfoConnect workspace.
Open the InfoConnect workspace and create a demo session as follows:
If you are using IBM, create an IBM3270 session with a host name of "demo:ibm3270.sim" and save the session as demoSession.rd3x in the default folder (...\myDocuments\Micro Focus\InfoConnect.)
If you are using Open Systems, create a VT session with a host name of "demo:UNIX" and save the session as demoSession.rdox in the default folder.
Run a Macro |
Copy Code
|
---|---|
using System; using Attachmate.Reflection.Emulation.IbmHosts; using Attachmate.Reflection.Framework; using Attachmate.Reflection.UserInterface; namespace CreateSessionFromExistingSessionFile { public class Program { // Declare the InfoConnect application (workspace) private static Attachmate.Reflection.Framework.Application reflectionApplication; // Close InfoConnect after the macro has completed private static void rMacro_MacroCompleted(object sender, EventArgs e) { Console.WriteLine("Closing InfoConnect"); reflectionApplication.Close(ApplicationCloseOption.CloseNoSave); } public static void Main(string[] args) { // Get a handle to the workspace if it is running reflectionApplication = MyReflection.ActiveApplication; // If workspace is not running, create an instance of the workspace if (reflectionApplication == null) { reflectionApplication = MyReflection.CreateApplication("myWorkspace", true); } // Make the workspace invisible IFrame frame = (IFrame)reflectionApplication.GetObject("Frame"); frame.Visible = false; if (reflectionApplication != null) { string sessionPath = Environment.GetEnvironmentVariable("USERPROFILE") + @"\Documents\Micro Focus\InfoConnect\demoSession.rd3x"; // Create a terminal from the session document file IIbmTerminal terminal = (IIbmTerminal)reflectionApplication.CreateControl(sessionPath); // Fire event when macro is completed terminal.Macro.MacroCompleted += new EventHandler(rMacro_MacroCompleted); if (terminal != null) { // Create a view - required for our macro IView view = frame.CreateView(terminal); terminal.Connect(); // Wait for the connection. (You can also use the AfterConnect event to do this.) while (!terminal.IsConnected) { System.Threading.Thread.Sleep(500); } // Enter the password terminal.Macro.PasswordBox("Enter the password", "Log on to InfoConnect"); // Get a list of macro names in the session document folder string[] names = terminal.Macro.GetMacroNames(MacroEnumerationOption.Document); foreach (string macroName in names) { // Print the names of the macros in the session Console.WriteLine(macroName); // Run this Macro if it is in the session document if (macroName == "Module1.DemoMacro") { terminal.Macro.RunMacro(MacroEnumerationOption.Document, "Module1.DemoMacro"); break; } } } else { Console.WriteLine("Can not create the control. Please check the session file path."); } } else { Console.WriteLine("Failed to get Application object."); } } } } |
Run a Macro |
Copy Code
|
---|---|
using System; using System.Collections.Generic; using System.Text; using Attachmate.Reflection.Framework; using Attachmate.Reflection.Emulation.OpenSystems; using Attachmate.Reflection.UserInterface; namespace CreateSessionFromExistingSessionFile { class Program { //Declare the InfoConnect application (workspace) static public Attachmate.Reflection.Framework.Application reflectionApplication; //Close InfoConnect after the macro has completed static void rMacro_MacroCompleted(object sender, EventArgs e) { Console.WriteLine("Closing InfoConnect"); reflectionApplication.Close(ApplicationCloseOption.CloseNoSave); } static void Main(string[] args) { //Get a handle to the workspace if it is running reflectionApplication = MyReflection.ActiveApplication; //If workspace is not running, create an instance of the workspace if (reflectionApplication == null) { reflectionApplication = MyReflection.CreateApplication("myWorkspace", true); } if (reflectionApplication != null) { string sessionPath = Environment.GetEnvironmentVariable("USERPROFILE") + @"\Documents\Micro Focus\InfoConnect\demoSession.rdox"; //Create a terminal from the session document file ITerminal terminal = (ITerminal)reflectionApplication.CreateControl(sessionPath); //Fire event when macro is completed terminal.Macro.MacroCompleted += new EventHandler(rMacro_MacroCompleted); if (terminal != null) { terminal.Connect(); //Wait for the connection. (You can also use the AfterConnect event to do this.) while (!terminal.IsConnected) { System.Threading.Thread.Sleep(500); } //Get the Frame and create a view - required for our macro IFrame frame = (IFrame)reflectionApplication.GetObject("Frame"); IView view = frame.CreateView(terminal); //Wait for the screen to settle terminal.Screen.WaitForHostSettle(3000); //Get a list of macro names in the session document folder string[] names = terminal.Macro.GetMacroNames(ProjectOption.CurrentProject); foreach (string macroName in names) { //print the names of the macros in the session Console.WriteLine(macroName); //Run this macro if it is in the session document if (macroName == "Module1.DemoMacro") { terminal.Macro.RunMacro(ProjectOption.CurrentProject, "Module1.DemoMacro"); } } } else Console.WriteLine("Cannot create the control. Please check the session file path."); } else Console.WriteLine("Failed to get Application object."); } } } |