O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Advanced Rational Robot A Tribute (http://www.geektester.blogspot.com)

10.806 visualizações

Publicada em

Rational Robot, Automation, Test automation, Software Testing

Publicada em: Tecnologia, Educação
  • Seja o primeiro a comentar

Advanced Rational Robot A Tribute (http://www.geektester.blogspot.com)

  1. 1. Advanced Rational Robot [email_address] www.itest.co.nr
  2. 2. Courseware Information <ul><li>This advanced course is designed to familiarize testing professionals with concept which are not used on daily basis but can be very handy in various situations. </li></ul><ul><li>The focus will be on applying Rational Robot to resolve complex automated testing challenges and to build effective, versatile test scripts through best practices. </li></ul>
  3. 3. Rational Robot Basics 4. View logs 2. Script Recording 3. Script Playback 1. Rational Robot Basics
  4. 4. Types of SQABasic Header Files <ul><li>SQABasic supports two types of header files. </li></ul><ul><li>Header files, stored in the SQABasic path. When a header file is in the SQABasic path, it is available to all modules in the same project and in other projects. </li></ul><ul><li>Project header files, stored in the TMS_Scripts folder of the project. Project header files are available to all modules in the same project. </li></ul><ul><li>Note: Both types of SQABasic header files have the extension .sbh. </li></ul>
  5. 5. SQABasic Path <ul><li>The SQABasic path is where Robot saves and looks for .sbl library files and header files. </li></ul><ul><li>The SQABasic path is user definable in Robot. </li></ul><ul><li>Once you explicitly define the SQABasic path in Robot, the path is persistent. </li></ul><ul><li>Robot automatically sets the SQABasic path when all of the following conditions are true: </li></ul><ul><ul><li>You have not yet explicitly defined an SQABasic path in Robot. </li></ul></ul><ul><ul><li>You have created a new project and datastore in Rational Administrator. </li></ul></ul><ul><ul><li>You open Robot using the newly created project and datastore. </li></ul></ul>
  6. 6. Absolute or Relative Path <ul><li>Optionally, you can use an absolute or relative path to reference header files and project header files. </li></ul><ul><li>For example, if you want a script to reference the header file MyHeader.sbh, regardless of the current SQABasic path, and the script and header file are in the default locations of the same project, you can use the following declaration: </li></ul><ul><li>'$Include &quot;SQABas32MyHeader.sbh&quot; </li></ul>
  7. 7. Creating an SQABasic Header File <ul><li>Project-wide header files can be referenced by any file in the project. </li></ul><ul><li>Creating a Header File </li></ul><ul><li>To create a new header file that can be accessed by any module in the project: </li></ul><ul><ul><ul><li>Click File -> New -> SQABasic File. </li></ul></ul></ul><ul><ul><ul><li>Click Header File, and then click OK. </li></ul></ul></ul>
  8. 8. Creating an Project Header file <ul><li>Use to create a new project header file (file extension .sbh). </li></ul><ul><li>SQABasic header files you create with this command have project-wide scope and are stored in the Script folder of the project. </li></ul><ul><li>Project header files can be referenced by any file in the project. </li></ul><ul><li>To create a new project header file: </li></ul><ul><ul><li>Click File -> New -> Project Header File. </li></ul></ul><ul><ul><li>You name the file (or accept the default name) the first time you save it. </li></ul></ul>
  9. 9. Metacommand <ul><li> '$CStrings : Tells the compiler to treat a backslash character () inside a string as an escape character. </li></ul><ul><li>SYNTAX: '$CStrings [ Save | Restore ] </li></ul><ul><li>The supported special characters are: </li></ul><ul><li> Newline (Linefeed) </li></ul><ul><li> Horizontal Tab </li></ul><ul><li> Backspace </li></ul><ul><li> Backslash </li></ul><ul><li>' Single Quote </li></ul><ul><li>&quot; Double Quote </li></ul>
  10. 10. Escape Sequence - example <ul><li>Sub main </li></ul><ul><li> '$CStrings </li></ul><ul><li> MsgBox &quot;This is line 1 This is line 2 (using C Strings)&quot; </li></ul><ul><li> '$NoCStrings </li></ul><ul><li> MsgBox &quot;This is line 1&quot; +Chr$(13)+Chr$(10)+&quot;This is line 2 (using Chr)&quot; </li></ul><ul><li>End Sub </li></ul>
  11. 11. DLL Library Files <ul><li>SQABasic procedures can call procedures stored in DLL files. For example, they can call the procedures stored in Microsoft Windows DLLs such as Kernel32.dll. </li></ul><ul><li>Robot does not provide a tool for creating DLLs. To add procedures to a DLL file, you need a tool such as Microsoft Visual C++ or Visual Basic. </li></ul><ul><li>Declare Sub MySub Lib &quot;MyDLL&quot; (ByVal arg1 As String, ByVal arg2 As Integer) </li></ul><ul><li>Declare a DLL File in a script or SQABasic library file, for use by the procedures in that module only or in a header file, for use by any module that references the header file </li></ul>
  12. 12. Steps to use DLL Functions <ul><li>Steps: </li></ul><ul><li>1. Create a Active X DLL Project </li></ul><ul><li>2. Define Functions / Sub Procedures </li></ul><ul><li>3. Save Class & Project </li></ul><ul><li><Proj Name>:TestDatastoreDefaultTestScriptDatastoreTMS_Scriptsdll) </li></ul><ul><li>4. Create a DLL & Register it. </li></ul><ul><li>5. Create a Header File </li></ul><ul><li>6. Declare the Function or Sub procedure (from DLL) </li></ul><ul><li>7. Create GUI Script </li></ul><ul><li>8. Call Function or Sub Procedure </li></ul>
  13. 13. Steps .. In detail <ul><li>Step 1: </li></ul><ul><li>Create a Visual Basic – “Active X dll Project” </li></ul><ul><li>Step 2: </li></ul><ul><li>Public Function temp() As String </li></ul><ul><li>temp = “At last its working&quot; </li></ul><ul><li>End Function </li></ul><ul><li>Step 3: </li></ul><ul><li>Save Project & Class </li></ul><ul><li>Project: Prj.vbp </li></ul><ul><li>Class: temp.cls </li></ul><ul><li>Step 4 (a): Create a DLL < temp.dll > </li></ul>
  14. 14. Steps .. In detail <ul><li>Step 4(b): Registering a DLL </li></ul><ul><li>RegSvr32 “<DLL Path> emp.dll> </li></ul><ul><li>Step 5 & 6 : Create a Header File (Rational Robot) </li></ul><ul><li>Declare Function temp Lib &quot;temp.dll&quot; () </li></ul><ul><li>Step 7 & 8 : Create a GUI Script and Call DLL function </li></ul><ul><li>'$include “temp.sbh&quot; </li></ul><ul><li> Dim x as Object </li></ul><ul><li> Set x = CreateObject(“prj.temp&quot;) </li></ul><ul><li> MsgBox x.temp </li></ul>
  15. 15. Libraries - Comparision <ul><li>The following table summarizes the differences between library files: </li></ul>.sbl .rec .dll Location SQABasic path Datastore (folder TMS_Scripts) in the current project TMS_Scriptsdll folder, or a user assigned location Scope When in the SQABasic path, available to files in the same project or other projects Available to files in the same project Depends on location VP No Support Support all standard robot VP Supports Custom VP
  16. 16. Argument Type - ByVal <ul><li>By default, the actual arguments are passed by Far reference. </li></ul><ul><li>For external DLL procedures, there are two additional keywords, ByVal and Any, that can be used in the argument list. </li></ul><ul><li>When ByVal is used, it must be specified before the argument it modifies. When applied to numeric data types, ByVal indicates that the argument is passed by value, not by reference. </li></ul><ul><li>When applied to string arguments, ByVal indicates that the string is passed by Far pointer to the string data. By default, strings are passed by Far pointer to a string descriptor. </li></ul>
  17. 17. Argument Type - Any <ul><li>Any can be used as a type specification, and permits a call to the procedure to pass a value of any data type. </li></ul><ul><li>When Any is used, type checking on the actual argument used in calls to the procedure is disabled (although other arguments not declared as type Any are fully type-safe). </li></ul>
  18. 18. SQABasic Header Files <ul><li>Types of SQABasic Header Files </li></ul><ul><li>Header files, stored in the SQABasic path. When a header file is in the SQABasic path, it is available to all modules in the same project and in other projects. </li></ul><ul><li>Project header files, stored in the TMS_Scripts folder of the project. Project header files are available to all modules in the same project. </li></ul><ul><li>Both types of SQABasic header files have the extension .sbh. </li></ul>
  19. 19. SQABasic Header Files - Creation <ul><li>Creating a Header File </li></ul><ul><li>To create a header file in the current SQABasic path: </li></ul><ul><li>1. In Robot, click File - > New - > SQABasic File. </li></ul><ul><li>2. Click Header File, and then click OK. </li></ul><ul><li>Save the file in the default location. You name the file (or accept the default name) the first time you save it. </li></ul>
  20. 20. SQABasic Header Files - Use <ul><li>Includes statements from the specified header or source file. </li></ul><ul><ul><li>'$Include: &quot;filename&quot; </li></ul></ul><ul><li>It is recommended (although not required) that you specify a file extension of .SBH if filename is a header file. </li></ul><ul><li>SQABasic header files can be accessed by modules within the current project or within any other project. </li></ul><ul><li>Typically, the '$Include meta command is located before the beginning of the sub procedure. </li></ul>
  21. 21. Recording Modes <ul><li>Object-Oriented Recording – Examines objects in the AUT at the Windows layer during recording and playback. Robot uses internal object names to identify objects. If objects in your application's graphical user interface (GUI) change locations, your tests still pass because the scripts are not location dependent. </li></ul><ul><li>Low-level recording – Tracks detailed mouse movements and keyboard actions by screen coordinates and exact timing. Use low-level recording when you are testing functionality that requires the tracking of detailed mouse actions, such as in painting, drawing, or CAD applications. </li></ul>
  22. 22. Low Level Recording <ul><li>When you click Record -> Turn Low-Level Recording On or Press CTRL+SHIFT+R during recording, subsequent mouse and keyboard actions are automatically stored in an external file. </li></ul><ul><li>Robot inserts the PlayJrnl command into the script to reference the external low-level file. </li></ul><ul><li>Low-level scripts are listed in the Robot Asset pane. </li></ul><ul><li>To display the contents of a low-level file, double-click the file's ID. </li></ul><ul><li>To return to Object-Oriented Recording, click Record -> Turn Low-Level Recording Off or Press CTRL+SHIFT+R. </li></ul>
  23. 23. Playing back Low-Level Scripts <ul><li>During playback, the PlayJrnl command invokes the low-level file. This file plays back all recorded actions in real time, exactly as recorded. This differs from Object-Oriented Recording, which examines Windows objects in the application-under-test, and does not depend on precise timing or screen coordinates. </li></ul><ul><li>When you switch to low-level recording, Robot does the following: </li></ul><ul><li>Records low-level actions in a binary script file that cannot be edited. </li></ul><ul><li>Gives the low-level script file the next consecutive number, and displays the number in the Asset (left) pane. </li></ul><ul><li>Adds a PlayJrnl command to your script that references the low-level script file. </li></ul>
  24. 24. PlayJrnl Utility Command <ul><li>Starts playback of a series of low-level recorded mouse and keyboard actions. </li></ul><ul><li>Syntax: </li></ul><ul><li>PlayJrnl scriptID </li></ul><ul><li>scriptID: A unique number that Robot assigns to the low-level script file. </li></ul><ul><li>Example: PlayJrnl &quot;001&quot; </li></ul>
  25. 25. Clipboard Verification Point <ul><li>Use the Clipboard verification point to capture text contained in objects that cannot be captured using any of the other verification points. </li></ul><ul><li>To use the Clipboard verification point, the application-under-test must supply a Copy or Cut capability so you can place the data in the Clipboard. </li></ul><ul><li>This verification point is useful for capturing data from spreadsheet and word processing applications as well as terminal emulators. You cannot use it to test bitmaps. </li></ul>
  26. 26. Clipboard Commands <ul><li>The Windows Clipboard can be accessed directly in your program to enable you to get text from and put text into other applications that support the Clipboard. </li></ul><ul><li>SYNTAX </li></ul><ul><li>Clipboard.Clear </li></ul><ul><li>Clipboard.GetText() </li></ul><ul><li>Clipboard.SetText string$ </li></ul><ul><li>string$: A string or string expression containing the text to send to the Clipboard. Used with the .SetText method. </li></ul>
  27. 27. SQAShellExecute Utility Command <ul><li>If filename references an application, SQAShellExecute runs the application. </li></ul><ul><li>If filename references a file other than an application executable, SQAShellExecute opens the file through the application that has a Windows association with the file type. (Windows maintains associations between an application and its file types by associating the application with a particular file extension.) For example, suppose Microsoft Word has a Windows association with .DOC files. If filename references MEMO.DOC, SQAShellExecute runs Word and opens MEMO.DOC in the Word environment. </li></ul><ul><li>Example: SQAShellExecute “C:WinntSystem32Notepad.Exe”,””,”” </li></ul>
  28. 28. SQASetProperty Command <ul><li>Assigns a value to a specified property. </li></ul><ul><li>status% = SQASetProperty(recMethod$, property$, value) </li></ul><ul><li>Example: SQASetProperty &quot;Name=FirstName&quot;, &quot;Text&quot;, &quot;Michael“ </li></ul>
  29. 29. SQAGetPropertyNames <ul><li>Retrieves an array containing the names of all the object's properties. </li></ul><ul><li>status% = SQAGetPropertyNames(recMethod$, aPropNames()) </li></ul><ul><li>Example: </li></ul><ul><li>Dim a() as String </li></ul><ul><li>Window SetContext, &quot;Caption=Advanced.txt - Notepad&quot;, &quot;&quot; </li></ul><ul><li>x = SQAGEtPropertyNames(&quot;Type=EditBox;ObjectIndex=1&quot;,a) </li></ul><ul><li>For i = LBound(a) to UBound(a) </li></ul><ul><li> MsgBox a(i) </li></ul><ul><li> Next i </li></ul>
  30. 30. SQAGetPropertyArray Command <ul><li>Retrieves an array of values for the specified property. </li></ul><ul><li>status% = SQAGetPropertyArray(recMethod$, property$, aPropValues()) </li></ul><ul><li>Example: </li></ul><ul><li> Dim a() as variant </li></ul><ul><li> Window SetContext, &quot;Caption=Font&quot;, &quot;&quot; </li></ul><ul><li>x = SQAGetPropertyArray(&quot;Type=ComboListBox;Label=Font style:&quot;,&quot;List&quot;,a) </li></ul><ul><li> For i = Lbound(a) to Ubound(a) </li></ul><ul><li> MsgBox a(i) </li></ul><ul><li>Next i </li></ul>
  31. 31. GUI Playback Options - Trap tab Tool -> GUI Playback Options -> Trap Use to specify what information the Trap utility captures about general protection faults that occur during playback and the recovery method to use.
  32. 32. GUI Playback Options - Trap tab <ul><li>To include the contents of the stack for non-current tasks, select Stack trace. </li></ul><ul><li>To include the module and class list information, select Module and class list. </li></ul><ul><li>Click one of the following to specify what Trap should do after detecting a GPF: </li></ul><ul><li>Restart windows session – Trap restarts Windows. </li></ul><ul><li>Call user-defined sub procedure – Trap calls the sub-procedure in the module that you specify. Select this option to specify your own custom SQABasic error handling. Type the names of the library source file (with an .sbl extension) and the sub-procedure. </li></ul>
  33. 33. SQATrap Log file <ul><li>The Sqatrap.log file can contain a variety of information about failure events. </li></ul><ul><li>The following failure information is always written to Sqatrap.log: </li></ul><ul><li>Contents of the stack for the current task </li></ul><ul><li>Names of functions that were called just before the error occurred </li></ul><ul><li>Contents of CPU registers </li></ul><ul><li>Date/Time stamp and Fault Number </li></ul><ul><li>After every trapped event, Trap appends error data to the existing Sqatrap.log file in the Rational Test installation directory, or creates a new file if one does not exist. </li></ul><ul><li>A trapped event’s entry in the file begins with line: </li></ul><ul><li><!SQA: ROBOT - start Log File for current UAE/Fault!> </li></ul><ul><li>End of LOG File for given UAE/Fault </li></ul><ul><li><!STOP!> </li></ul>
  34. 34. Trap <ul><li>Robot uses the Trap utility to detect the occurrence of General Protection Faults (GPF) and the location of the offending function call. If a GPF is detected, Robot updates a log file that provides information about the state of the Windows session that was running. </li></ul><ul><li>The occurrence of a GPF usually results in a crash of the running application and may also result in a loss of data. </li></ul><ul><li>Capture information about GPFs. </li></ul><ul><li>Write the state of your environment to a log file when a GPF is detected. </li></ul><ul><li>Specify the type of information to write to the log file. </li></ul><ul><li>Automatically restart Windows or call your own error handling sub-procedure before performing any other action. </li></ul>
  35. 35. Trap – Contd.. <ul><li>Trap detects and traps the following events: </li></ul><ul><li>UAE: General Protection Fault #13 </li></ul><ul><li>Stack Overflow: Fault #12 </li></ul><ul><li>Invalid Op Code: Fault #6 </li></ul><ul><li>Divide by Zero: Fault #0 </li></ul>
  36. 36. Module Existence VP <ul><li>Use to verify whether a specified module is loaded into a specified context (process), or is loaded anywhere in memory. </li></ul><ul><li>In the Windows environment, modules are defined as executable programs (.exe), dynamic link libraries (.dll or other extension), device drivers (.sys or .drv), or display fonts (.fon). </li></ul><ul><li>Each process has its own context, which includes a set of loaded modules. When you create this verification point, you select the name of the module. You may also select the name of a context (process), in which case the verification point tests whether the module is loaded into that process. If no context is specified, the verification point tests whether the module is loaded anywhere in memory. </li></ul>
  37. 37. Module Existence VP <ul><li>Click Insert -> Verification Point -> Module Existence. </li></ul>
  38. 38. Object Data Test Definition <ul><li>Use to set the options for a data test. </li></ul><ul><li>What do you want to do? </li></ul><ul><li>Create or edit a custom data test </li></ul><ul><li>Create or edit the expression in a custom data test </li></ul><ul><li>Rename a custom data test </li></ul><ul><li>Copy a data test </li></ul><ul><li>Delete a custom data test </li></ul>
  39. 39. Object Data Test Definition
  40. 40. Object List <ul><li>Use to select an object to test from the Windows desktop while creating a verification point. </li></ul><ul><li>Show hidden </li></ul><ul><li>Invert object </li></ul>
  41. 41. Object List <ul><li>Show Hidden: Shows all objects on the Windows desktop. </li></ul><ul><li>Objects with a Visible property of False. Examples are hidden Visual Basic Data controls and PowerBuilder DataWindows. </li></ul><ul><li>Objects with no GUI component. Examples are PowerBuilder DataStore controls and Oracle Forms blocks. </li></ul><ul><li>Invert Object: </li></ul><ul><li>When you select an object in the list, inverts the object's colors in the application window if the object is visible. </li></ul>
  42. 42. Skip VP & Acknowledge Results Select Acknowledge results to have Robot display a pass/fail result message for each verification point. You must click OK before playback continues. If selected, Robot skips verification points during playback. You may want to skip verification points for debugging during the test development phase, but not for actual testing.
  43. 43. Unexpected Active Window Use to specify how Robot responds to the appearance of an unexpected active window during playback. An unexpected active window is any window that is not expected by Robot during playback and that prevents the expected window from being made active.
  44. 44. GUI Record Options Type the default prefix for every new GUI script that you record. Each time you record a new GUI script, the prefix is appended with a consecutive number. Records a mouse drag as a mouse click within a push button, option button, check box, and label while recording. This prevents inadvertent mouse drags from being written in the script as drags.
  45. 45. Manage Queries Dialog Box Use this dialog box to manage script or session queries. To open: Click Tools -> Manage Script Queries . Click the New or Edit button in the Manage Queries dialog box.
  46. 46. Manager Queries Dialog Box
  47. 47. Begin Dialog .. End Dialog <ul><li>Begins and ends a dialog-box declaration. </li></ul><ul><li>Begin Dialog dialogName [x , y ,] dx , dy [, caption$ ] </li></ul><ul><li>... ' dialog box definition statements </li></ul><ul><li>End Dialog </li></ul><ul><li>ButtonGroup Statement: </li></ul><ul><li>Begins the definition of a group of custom buttons for a dialog box. </li></ul><ul><li>ButtonGroup .field </li></ul>
  48. 48. Begin Dialog .. End Dialog <ul><li> Begin Dialog UserDialog 274, 171, &quot;SQABasic Dialog Box&quot; </li></ul><ul><li>ButtonGroup .ButtonGroup1 </li></ul><ul><li>Text 9, 3, 69, 13, &quot;Filename:&quot;, .Text1 </li></ul><ul><li> TextBox 9, 3, 69, 13, .Text3 </li></ul><ul><li>DropComboBox 9, 14, 81, 119, ComboBox1(), .ComboBox1 </li></ul><ul><li>Text 106, 2, 34, 9, &quot;Directory:&quot;, .Text2 </li></ul><ul><li>ListBox 106, 12, 83, 39, ListBox1(), .ListBox2 </li></ul><ul><li> Text 106, 52, 42, 8, &quot;Drive:&quot;, .Text3 </li></ul><ul><li> DropListBox 106, 64, 95, 44, DropListBox1(), .DropListBox1 </li></ul><ul><li>CheckBox 9, 142, 62, 14, &quot;List .TXT files&quot;, .CheckBox1 </li></ul><ul><li> GroupBox 106, 111, 97, 57, &quot;File Range&quot; </li></ul><ul><li>OKButton 213, 6, 54, 14 </li></ul><ul><li> CancelButton 214, 26, 54, 14 </li></ul><ul><li> PushButton 213, 52, 54, 14, &quot;Help&quot;, .Push1 </li></ul><ul><li> End Dialog </li></ul><ul><li> Dim mydialog as UserDialog </li></ul><ul><li> On Error Resume Next </li></ul><ul><li> Dialog mydialog </li></ul><ul><li> If Err=102 then </li></ul><ul><li> MsgBox &quot;Dialog box canceled.&quot; </li></ul><ul><li> End If </li></ul>
  49. 49. CreateObject Function <ul><li>Creates a new OLE2 automation object. </li></ul><ul><li>SYNTAX: CreateObject( class ) </li></ul><ul><li>class: The name of the application, a period, and the name of the object to be used. </li></ul><ul><li>To create an object, you first must declare an object variable, using Dim, and then Set the variable equal to the new object, as follows: </li></ul><ul><li>Dim OLE2 As Object </li></ul><ul><li>Set OLE2 = CreateObject(“Excel.Application&quot;) </li></ul>
  50. 50. New Operator <ul><li>Allocates and initializes a new OLE2 object of the named class. </li></ul><ul><li>SYNTAX </li></ul><ul><li>Set objectVar = New className (or) </li></ul><ul><li>Dim objectVar As New className </li></ul><ul><li>objectVar: The OLE2 object to allocate and initialize. </li></ul><ul><li>className: The class to assign to the object. </li></ul><ul><li>In the Dim statement, New marks objectVar so that a new object will be allocated and initialized when objectVar is first used. If objectVar is not referenced, then no new object will be allocated. </li></ul>
  51. 51. Dynamic Data Exchange <ul><li>Dynamic Data Exchange (DDE) is a process by which two applications communicate and exchange data. One application can be an SQABasic script. </li></ul><ul><li>Here's a high-level overview of a DDE exchange. Click a topic for more information: </li></ul><ul><li>Open a DDE channel </li></ul><ul><li>Communicate with the application </li></ul><ul><li>Close the channel </li></ul>
  52. 52. DDE – Open a Channel <ul><li>To &quot;talk&quot; to another application and send it data, open a connection (called a DDE channel) using the statement DDEInitiate. </li></ul><ul><li>DDEInitiate requires two arguments: </li></ul><ul><li>The DDE application name. For example, the DDE name for Microsoft Word is WINWORD. </li></ul><ul><li>The topic name. This name is usually a open filename. Many applications that support DDE recognize a topic named System, which is always available and can be used to find out which other topics are available. </li></ul><ul><li>Note: The application must already be running before you can open a DDE channel. To start an application, use the Shell command. </li></ul>
  53. 53. DDE – Communicate with the App <ul><li>After you open a channel to an application, you can get text and numbers (DDERequest), send text and numbers (DDEPoke), or send commands (DDEExecute). See the application's documentation for a list of supported DDE commands. </li></ul><ul><li>To make sure the application performs a DDE task as expected, use DDEAppReturnCode. If an error does occur, your program can notify the user. </li></ul><ul><li>Systems: A list of all items in the System topic </li></ul><ul><li>Topics: A list of available topics </li></ul><ul><li>Formats: A list of all the Clipboard formats supported </li></ul>
  54. 54. DDE – Close the channel <ul><li>When you're finished communicating with the application, you should close the DDE channel using DDETerminate. Because you have a limited number of channels available at once (depending on the operating system in use and the amount of memory you have available), it's a good idea to close a channel as soon as you finish using it. </li></ul>
  55. 55. Dynamic Data Exchange <ul><li>DDEAppReturnCode: Return a code from an application on a DDE channel. </li></ul><ul><li>DDEExecute: Send commands to an application on a DDE channel. </li></ul><ul><li>DDEInitiate: Open a dynamic data exchange (DDE) channel. </li></ul><ul><li>DDEPoke: Send data to an application on a DDE channel. </li></ul><ul><li>DDERequest: Return data from an application on a DDE channel. </li></ul><ul><li>DDETerminate: Close a DDE channel. </li></ul>
  56. 56. DDE Example <ul><li> appname=&quot;WinWord&quot; </li></ul><ul><li> path=&quot;D:Program FilesMicrosoft OfficeOffice&quot; </li></ul><ul><li> topic=&quot;System&quot; </li></ul><ul><li> item=&quot;Page1&quot; </li></ul><ul><li> testtext=&quot;Hello, world.&quot; </li></ul><ul><li> On Error Goto Errhandler </li></ul><ul><li> x=Shell(path & appname & &quot;.EXE&quot;) </li></ul><ul><li> channel = DDEInitiate(appname, topic) </li></ul><ul><li> If channel=0 then </li></ul><ul><li> MsgBox &quot;Unable to open Word.&quot; </li></ul><ul><li> Exit Sub </li></ul><ul><li> End If </li></ul><ul><li> DDEPoke channel, item, testtext </li></ul><ul><li> pcommand=&quot;[FileSaveAs .Name = &quot; & Chr$(34) & &quot;C:xxx.doc&quot; & Chr$(34) & &quot;]&quot; </li></ul><ul><li> DDEExecute channel, pcommand </li></ul><ul><li> pcommand=&quot;[FileClose]&quot; </li></ul><ul><li> DDEExecute channel, pcommand </li></ul><ul><li> DDETerminate channel </li></ul>
  57. 57. Questions