Skip to Content
Author's profile photo Flavio Furlan

First Version of ABAPDoc2 Model

Sometime ago I published here in the SCN Weblogs the ABAP101 Projects to aim juniors ABAP developers get some experience through open source projects. In summary, we “hire” ABAP newbies to work in the open source projects with our coaching.

The project chosen was ABAPDoc and we called our project as ABAPDoc2. The first goal of this project is to refactory the original code to able next level of improvements, like templates, XML (SAPLink), Web Dynpro etc. To able those future improvements, we will follow MVC framework and the text here I will explain the ABAPDoc2 Model.


ABAP Workbench Model


The goal of this model is to abstract all types of ABAP Workbench objects, like packages, function groups and global classes. Check picture bellow of ABAPDoc2 model:

Let’s start identifying all classes to represent the objects in the workbench, which starts with ZCL_WB_, where WB states workbench.

Representing function groups, we have the class ZCL_WB_FUNCTION_GROUP associated with class ZCL_WB_FUNCTION_MODULE that represent function modules. The association chosen here was composition, because the function module can only exist if it’s linked to only one function group.

It must be considered at implementation time and most probably the class ZCL_WB_FUNCTION_GROUP will be responsible to create all objects of class ZCL_WB_FUNCTION_MODULE. However, it’s an implementation detail that the program must have to respect when he/she is coding it.

The class ZCL_WB_SOURCECODE represents the source code, even for function modules or method implementation.

The class ZCL_WB_CLASS is responsible to provide services related with global classes. Like function group and function modules relationship, the class ZCL_WB_METHOD is linked to ZCL_WB_CLASS and the ZCL_WB_METHOD objects can only exists if it’s associated to a ZCL_WB_CLASS object. 

The third object in the workbench is the package, represented by class ZCL_WB_PACKAGE. In the ABAP Workbench a package can contains others packages and WB objects. However we decided to do not represent it in the model, because SAPLink still does not support it and it should be included in the next release.

All WB classes heritage from the same class called ZCL_WB_OBJECT that implements ZIF_WB_OBJECT interface. This interface is very important because it defines all methods that must be implement in the all WB classes. Based on this picture, all WB objects have follow methods:


  • LOAD( ) is responsible to extract the information from the system and load all attributes in the object. For instance, if I create an object from ZCL_WB_CLASS, with NAME attribute as “CL_GUI_ALV_GRID” and call LOAD( ) method, the implementation must read information of class CL_GUI_ALV_GRID in the system and load all object attributes.
  • SET_NAME( ) and GET_NAME( ), those methods are responsible to define and return NAME attribute.
  • GET_HTML( ) is responsible to generate and return the HTML code.



So you can see that LOAD( ) and GET_HTML( ) are the most important methods in this Model.

Project Class 

To coordinate all services from workbench model we have ZCL_ABAPDOC_PROJECT class, who is responsible to provide all services to load and generate HTML code.

In the method list you found SET and GET that are responsible to define and return attributes. Bellow I describe two most import methods in this class:

  • LOAD_ALL( ), this method will loop at all objects associated with ZCL_ABAPDOC_PROJECT and call method LOAD( ), using polymorphism calling LOAD( ) method implementation according the object type.
  • EXPORT_TO_HTML( ), here the HTML files are going to be generated in the user desktop.

Next Steps

For this release, the ABAPDoc2 are going to only generate HTML files. In the future, we plan to also generate Web Dynpro component. I still do not know how to do that, but I’m sure that Model can allow us to generate any type of output, include allow to user use template to format HTML output.

Assigned tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo Former Member
      Former Member
      How cool is that?  Learning ABAP from the best with open source.  That would be a great thing for any person coming out of college to put on their resume.
      Author's profile photo Flavio Furlan
      Flavio Furlan
      Blog Post Author
      Hi Michelle, it's the core of our idea: give some opportunity to beginners show off your work prior any project experience.
      Author's profile photo Fabio Pagoti
      Fabio Pagoti
      Without a shadow of a doubt, this is a amazing opportunity to transform people coming out of college into really great developers and professionals.

      In my opinion, Code Exchange platform wasn't explored enough yet (and it's quite normal as it's still young). The initiative to use Open Source Projects is cool for everyone (SAP, community, ABAP rookies, market) and also it's a great way to explore Code Exchange Platform. I hope to see and work on more cool ideas like this one in the near future.


      Author's profile photo Former Member
      Former Member
      Correct me if im wrong but shouldn't ZCL_WB_SOURCECODE also we connected with ZCL_WB_CLASS and ZCL_WB_FUNCTIONGROUP. The global definitions of classes and functions groups are in these objects and not in methods and functions, and that global definitions are also code.

      As already commented in your webpage 101 i think the best solution is create ZIF_WB_SOURCECODE interface and implement it on all objects with code, including ZCL_WB_CLASS and ZCL_WB_FUNCTIONGROUP.

      Thanks for this new 101 project, keep up the good work!!