In this video, we demonstrate how to use reflection. Reflection is an object oriented concept that helps developers build tools and frameworks. With reflection, you can inspect classes, interfaces, properties and methods at runtime without knowing the names of them at compile time. Programmers who need reflection know exactly why they need it. If you are new to reflection, this video provides a brief introduction to how programmers might use it. The Class Browser view in Progress Developer Studio for OpenEdge is an example of something you could build into your tools with the help of reflection. The tool is able inspect the Package, Class, and Methods like Clone. Let’s review how you could collect this same information at runtime to inspect the classes in the OpenEdge.Mobile package. We have enhanced Progress.Lang.Class in OpenEdge 11.6 by adding new methods to get that information. In this example we use GetMethods. We added several new built-in classes that inherit from Progress.Lang.Object in 11.6. The image shows an alphabetic list of these new classes. Each class includes new methods and properties to assist with reflection. We also added new built-in classes that inherit from the new Progress.Lang.Enum class in 11.6. The comments introduce the sample, which builds a .json file of the information collected for the OpenEdge.Mobile package. A complete TreeView would need to collect all the details. For this example, we’ll focus on the classes and methods. We create two temp tables. ttType with a field TypeType stores a class, interface or enum value. ttMember stores the Member type. The dataset combines the temp tables to gather all the classes and their related members. To simulate a runtime value, we pull input from a file with a list of files in a package and get the classes in that package. We create a type record and store whether the class is abstract class. Using GetMethods, we get the methods for each class. We loop through each one to add details about the method such as Name, NumParameters, AccessMode, etc. Then we write the dataset to a file. Opening the json file, we search for the following text. This jumps to the json for that typeName and it shows that this is an abstract class. Copyright © 2015 Progress Software Corporation. All rights Reserved. If we search for the string again, we land on the first method, Initialize , for that class showing the details we collected including Name, NumParameters, AccessMode, etc. If we search further to find the clone method, The DeclaringClass and the AccessLevel are being found at runtime using reflection. Comparing this with our ClassBrowser from earlier, the PUBLIC is our AccessMode and the Member of is the Declaring Class. Now that you have the basic code to build the ProDataSet, you can use the online help files to build DataSource and link that DataSource to a TreeView. Copyright © 2015 Progress Software Corporation. All rights Reserved.
© Copyright 2024