Object-Oriented ABL Techniques

This group will serve as a focal point for discussions, examples, and projects intended to help people utilize the object-oriented language features which became available in OE10.1. The intention is to:
1) Develop established object-oriented design principles in a way that is consistent with a 4GL;
2) Provide OO-based contributions to OERA-compliant architectures; and
3) Assist in the utilization of OO techniques in the context of existing procedural code.
Contributions to this purpose will include white paper discussions, code fragments illustrating techniques, and complete model components to use in building applications.


Connect to a Progress OpenEdge Repository

In order to use an OpenEdge data repository in EA follow the steps below:

1. In the Open Project dialog, select the Connect to Server checkbox. This is in the upper right corner.

2. Click on the [...] (Browse) button, as you normally would to browse for a project. As you have selected Connect to Server, the Data Link Properties dialog displays instead of the Browse Directories dialog.

3. Select Microsoft OLE DB Provider for ODBC Drivers from the list.

4. Click on the Next button. The Connection tab displays.


SQL setup for use with EA

Different people have different ideas of how they want to set up databases for SQL access, but in case this is an area unfamiliar to someone trying to setup an OpenEdge database for use with Enterprise Architect, the following describes one approach.


Using An OpenEdge Database as a Repository for Enterprise Architect

The standard repository for Enterprise Architect uses the JET database engine. This makes it accessible with Access and SQL, but those working with ABL may prefer to use an OpenEdge database and ABL, being more familiar and more powerful. An OpenEdge database is required for some of the ABL to UML tools available here.


Using Enterprise Architect with OpenEdge

The Enterprise Architect product from Sparx Systems is emerging as the preferred UML modeling tool at many OpenEdge sites. In order to make it easy for people to get started using this powerful tool, information will be collected here to assist people in this process.


.Net and Progress Gui

I'm not sure this is even possible but figured I'd throw it out there, it's at least good for an eye roll and muttered "WTF?"...

We have a legacy application, heavily based upon adm2. The idea is being explored to redo the UI, and instead of doing the entire app at once, the goal is to impliment pieces at a time. The solution that is being explored is to embed a web browser in the application, write the new functionality in Asp.net with ajax and utilize the embedded browser to view the page, essentially "overriding" the former functionality.


How to Solve the Problem

Hai All,

I am facing a problem while accessing the procedure FactP existed in Progress 4GL file namely FactProc.p. Here i am giving the step-by-step procedure what i did.

i Create a Progress 4GL file namely FactProc.p and it content is:

PROCEDURE FactP:
DEFINE INPUT PARAMETER n AS INTEGER.
DEFINE OUTPUT PARAMETER m AS INTEGER.
m=1.
REPEAT:
IF n EQ 0 THEN LEAVE.
m = m * n.
n = n - 1.
END.
END PROCEDURE.


Stage 2. ABL2UML Initial Release

The attached code represents the initial release of the ABL2UML open source tool set. This is an evolving project, so expect this code to evolve and expand over time.


ABL2UML - Modeling Existing ABL Systems with UML

Overview
Given the need to enhance or transform a large existing ABL application, one is often hampered in the task by limited or out of date documentation. This project seeks to create a tool set that will read existing ABL code and the corresponding database to build a UML model of the application. This model can then be used for analysis and potentially can serve as the basis for future changes.

This project will consist of three stages:
1. Defining a UML "Profile" for ABL so that there are appropriate UML stereotypes to express the structural realities and relationships of ABL code and the corresponding dictionary.
2. Creating a tool for loading Progress dictionary information into a UML modeling tool using these stereotypes.
3. Creating a tool which will read and analyze ABL code and then load this information into a UML modeling tool using the stereotypes of the Profile.


How To Connect to AppServer

Hai,
This is Shaji Kumar VK. I am fresher to OpenEdge and working on how to connect with OpenEdge from C#.NET. Could anybody help me How to programmatically connect to AppServer and call a simple procedure. Please provide me an example, if your able or tell me the URL from where i will get simple and efficient help on it. Thanks in advance.

Regards & Thanks,
Shaji Kumar.V.K


Phase 1: Defining the UML Profile for ABL

A UML profile is intended to provide a mapping from a particular domain language or the language of a particular methodology onto underlying UML constructs. This mapping is a combination of “stereotypes”, which are terms from the domain or methodology equated to a particular UML constructs, as well as additional constraints, rules of “well-formedness”, and identification of which particular elements will be used to model the elements associated with the domain or methodology.


Stage 1: UML Profile for ABL

This stage is directed at defining a UML Profile for ABL Code and Progress dictionary information. The goal is to arrive at an open standard since there will be far greater potential synergy if all people working on UML modeling are using a common vocabulary. This stage will occur in three phases:


4GLTrace LOG-MANAGER Reporter

Reads output from a LOG-MANAGER:LOG-ENTRY-TYPE = "4GLTRACE:4" and reports the line number, date, time, statement elapsed time, total elapsed time, nesting level, action, action adjective, and remaining data in a columnar format


OO Wish List

At the 2013 PUG Challenge Americas, there was a sort of semi-spontaneous OO information exchange with Rob Holzel, Evan Bleicher, and Shelley Chase.

I repeated this session at the 2013 PUG Challenge EMEA with assistance from Peter Judge, Rob Straight, and Shelley Chase. what follows is the result of these two sessions.

The new OO features in 11.3 include:

  • Private and protected are class, not instance, i.e., appropriate members of the same class can read attributes in other instances of the same class as in other OO languages. Implies statics can also access private members of instances to which they have a handle.
  • Dynamic access to Progress built-in classes, notably VST classes.
  • Cleaned up chained syntax.

With the usual disclaimers of no promises and no schedule, we reviewed a list of additions to OO which had been requested at one time or another and solicited additions to this list from the audience. Below is the combined list in four categories - Roadmap, Next, Other, and Last Set (interpretation is left to the reader and qualifications about no promises and no schedule clearly apply). There is no significant to the order within category. Priorities are likely to change over time and may be dependent both on the perceived value and the ease of implementation. There have been indications that upgrade of OO may be a higher priority now than in the past so items farther down on this list may not be as distant as one would have assumed them to be in the past, but again, nothing one can count on. There are always limitations in budget and personnel and competing priorities.


Replacing A Session SuperProcedure With A Class In OOABL

Progress Software has numerous references in documentation and whitepapers to the parallels between superprocedures and classes, including a fairly lengthy, if somewhat flawed example in the Getting Started: Object-Oriented Programming manual for 10.1A that shows two parallel examples, one worked using superprocedures and one worked using classes. However, what is not shown is an example in which a class replaces a superprocedure while retaining the original program structure as a set of procedures. For a local super-procedure, this substitution is simple because the class does not need to be accessible except from the procedure that instantiates it. For a session superprocedure, a different functionality is required because the internal procedures of the session superprocedure become a part of the name space of procedures that did not invoke the superprocedure.


#
Syndicate content