Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
JerryWang
Advisor
Advisor

Today I am going through the SAP help for BRFplus stuff and come across with some introduction about ABAP code composer.


I would like to share with you a very simple example to demonstrate its logic.



How to find the above help document in a quick way? Just google with key word "ABAP CODE COMPOSER" and click the first hit.



And here below are steps how to generate ABAP codes which contains a singleton pattern using ABAP code composer.


1. Create a new program with type "INCLUDE":



And paste the following source code to include and activate it:



*---------------------------------------------------------------------*
* CLASS $I_PARAM-class$ DEFINITION
*---------------------------------------------------------------------*
* Instance pattern: SINGLETON
*---------------------------------------------------------------------*
CLASS $I_PARAM-class$ DEFINITION
@if I_PARAM-GLOBAL @notinitial
\ PUBLIC
@end
\ FINAL CREATE PRIVATE.
PUBLIC SECTION.
INTERFACES:
$I_PARAM-interface$.
CLASS-METHODS:
s_get_instance
RETURNING
value(r_ref_instance) TYPE REF TO $I_PARAM-interface$
@if I_PARAM-exception @notinitial
RAISING
$I_PARAM-exception$
@end
\.
PRIVATE SECTION.
CLASS-DATA:
s_ref_singleton TYPE REF TO $I_PARAM-interface$.
CLASS-METHODS:
s_create_instance
RETURNING
value(r_ref_instance) TYPE REF TO $I_PARAM-class$
@if I_PARAM-exception @notinitial
RAISING
$I_PARAM-exception$
@end
\.
ENDCLASS. "$I_PARAM-class$ DEFINITION
*---------------------------------------------------------------------*
* CLASS $I_PARAM-class$ IMPLEMENTATION
*---------------------------------------------------------------------*
* Instance pattern: SINGLETON
*---------------------------------------------------------------------*
CLASS $I_PARAM-class$ IMPLEMENTATION.
************************************************************************
* METHOD S_CREATE_INSTANCE
*----------------------------------------------------------------------*
* Constructs an instance of $I_PARAM-class$
*......................................................................*
METHOD s_create_instance.
* RETURNING
* value(r_ref_instance) TYPE REF TO $I_PARAM-class$
@if I_PARAM-exception @notinitial
* RAISING
* $I_PARAM-exception$
@end
************************************************************************
@if I_PARAM-exception @notinitial
DATA:
l_ref_instance TYPE REF TO $I_PARAM-class$.
************************************************************************
CREATE OBJECT l_ref_instance.
@slot object_construction
* Construction of the object which can lead to $I_PARAM-exception$
@end
r_ref_instance = l_ref_instance.
@else
CREATE OBJECT r_ref_instance.
@end
ENDMETHOD. "s_create_instance
************************************************************************
* METHOD S_GET_INSTANCE
*----------------------------------------------------------------------*
* Keeps track of instances of own class -> only one
*......................................................................*
METHOD s_get_instance.
* RETURNING
* value(r_ref_instance) TYPE REF TO $I_PARAM-interface$
@if I_PARAM-exception @notinitial
* RAISING
* $I_PARAM-exception$
@end
************************************************************************
IF s_ref_singleton IS NOT BOUND.
s_ref_singleton = s_create_instance( ).
ENDIF.
r_ref_instance = s_ref_singleton.
ENDMETHOD. "s_get_instance
ENDCLASS. "$I_PARAM-class$ IMPLEMENTATION

The string wrapped with a pair of @,for example, the string "$I_PARAM-class$", acts as a importing parameter of code composer, which means during the code generation, you must tell code composer what is the actual class name in generated code, by passing the actual name to this parameter.


This activated include will act as a code generation template. We now have the following importing parameter:




  • $I_PARAM-class$

  • $I_PARAM-global$

  • $I_PARAM-interface$

  • $I_PARAM-exception$


2. create another driver program which will call code composer API to generate the code with the help of the template include created in step1. The complete source code of this program could be found from attachment.



I just use the cl_demo_output=>display_data( lt_tab_code ) to simply print out the source code.


In the output we see all of the placeholder ( $XXXX$ ) in the template have been replaced with the hard coded value we specify in the driver program.



Although the google result shows the code composer API is marked as for SAP internal use only and thus could not be used in application code, however I think we can still leverage it to design some tool which can improve our daily work efficiency.




2 Comments