<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Design Patterns, The Decorator in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485392#M1419609</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Fixed your formatting for you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 22 Dec 2009 06:47:39 GMT</pubDate>
    <dc:creator>matt</dc:creator>
    <dc:date>2009-12-22T06:47:39Z</dc:date>
    <item>
      <title>Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485391#M1419608</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;When trying to implement the classic decorator design patterns your decorator executable might look like this:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;lt;pre&amp;gt;&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    DATA: Validator TYPE REF TO validation_manager.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;   CREATE OBJECT:&lt;/P&gt;&lt;P&gt;     Validator TYPE validation_manager.&lt;/P&gt;&lt;P&gt;    ,Validator TYPE validate_format                 EXPORTING x_validator = Validator&lt;/P&gt;&lt;P&gt;    ,Validator TYPE validate_values                 EXPORTING x_validator = Validator&lt;/P&gt;&lt;P&gt;    ,Validator TYPE validate_relation_input       EXPORTING x_validator = Validator&lt;/P&gt;&lt;P&gt;    ,Validator TYPE validate_relation_database EXPORTING x_validator = Validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_result = validator-&amp;gt;validate( me-&amp;gt;lst_data ).&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing Validate Activity'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The validate method ends up in endless resurcion in the memory. The reason is that I'm using the same variable as the resulting instanse and as parameter. It seems like the constructor treats both the result and the parameter as the same field/instanse regardless import parameter such as VALUE/REFERENCE. If I change the method to use an extra field in the method validate like:&lt;/P&gt;&lt;P&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;pre&amp;gt;&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;      validator  TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,recursive  TYPE REF TO validation_manager.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT validator TYPE validation_manager.&lt;/P&gt;&lt;P&gt;    recursive ?= validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT validator TYPE validate_format&lt;/P&gt;&lt;P&gt;      EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;    recursive ?= validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT validator TYPE validate_values&lt;/P&gt;&lt;P&gt;     EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;    recursive ?= validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT validator TYPE validate_relation_input&lt;/P&gt;&lt;P&gt;      EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;    recursive ?= validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT validator TYPE validate_relation_database&lt;/P&gt;&lt;P&gt;      EXPORTING x_validator = recursive .&lt;/P&gt;&lt;P&gt;    recursive ?= validator.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_result = validator-&amp;gt;validate( me-&amp;gt;lst_data ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing Validate Activity'.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now the decorator engine works, but why does the first implementation not work when the same one executes fine in php, c++, delphi, java and other languages.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you do not know what I'm trying to discuss, look up "Design Patterns - Simply", and jump to the chapter about the decorator design pattern. I'm trying to use this design pattern for a validation manager within my Business Process Engine, which needs to be able to configure what types of validation needed for on specific process (BPMN).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 00:23:51 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485391#M1419608</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2009-12-22T00:23:51Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485392#M1419609</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Fixed your formatting for you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 06:47:39 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485392#M1419609</guid>
      <dc:creator>matt</dc:creator>
      <dc:date>2009-12-22T06:47:39Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485393#M1419610</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Could you also post the constructor.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;matt&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 06:51:20 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485393#M1419610</guid>
      <dc:creator>matt</dc:creator>
      <dc:date>2009-12-22T06:51:20Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485394#M1419611</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Matt, Thanks for the formatting..:) I will post the complete program as it's only a prototype program. Trying to get the format under control.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;P&gt;&amp;lt;/body&amp;gt;&lt;/P&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;}*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Report  ZDP_DECORATOR_XMP01&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;REPORT  zdp_decorator_xmp01.&lt;/P&gt;&lt;P&gt;parameters: bestimpl  TYPE boolean_01 default 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;TYPES:&lt;/P&gt;&lt;P&gt;  BEGIN OF processdata&lt;/P&gt;&lt;P&gt;   ,name   TYPE char30&lt;/P&gt;&lt;P&gt;   ,street TYPE char30&lt;/P&gt;&lt;P&gt;   ,zip    TYPE char5&lt;/P&gt;&lt;P&gt;   ,city   TYPE char30&lt;/P&gt;&lt;P&gt;   ,email  TYPE char50&lt;/P&gt;&lt;P&gt;   ,phone  TYPE char20&lt;/P&gt;&lt;P&gt; ,END OF processdata&lt;/P&gt;&lt;P&gt; ,BEGIN OF result&lt;/P&gt;&lt;P&gt;   ,msgid  TYPE msgid&lt;/P&gt;&lt;P&gt;   ,msgtyp TYPE msgty&lt;/P&gt;&lt;P&gt;   ,msgno  TYPE msgno&lt;/P&gt;&lt;P&gt;   ,status TYPE char1&lt;/P&gt;&lt;P&gt; ,END OF result.&lt;/P&gt;&lt;P&gt;CONSTANTS:&lt;/P&gt;&lt;P&gt; true     TYPE boolean_01 VALUE 1&lt;/P&gt;&lt;P&gt;,false    TYPE boolean_01 VALUE 0.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validationmanager DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validation_manager DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      validate&lt;/P&gt;&lt;P&gt;        IMPORTING&lt;/P&gt;&lt;P&gt;          x_data             TYPE processdata&lt;/P&gt;&lt;P&gt;        RETURNING&lt;/P&gt;&lt;P&gt;          value(y_result)    TYPE result.&lt;/P&gt;&lt;P&gt;ENDCLASS. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validationmanager IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validation_manager IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    WRITE: / 'Common validation'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;ENDCLASS. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS Validate_Decorator DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_decorator DEFINITION INHERITING FROM validation_manager ABSTRACT .&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    DATA: validator TYPE REF TO validation_manager.&lt;/P&gt;&lt;P&gt;ENDCLASS.  &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_format DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_format DEFINITION INHERITING FROM validate_decorator.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      constructor&lt;/P&gt;&lt;P&gt;       IMPORTING value(x_validator) TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,validate REDEFINITION.&lt;/P&gt;&lt;P&gt;ENDCLASS.    &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_format IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_format IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CALL METHOD super-&amp;gt;constructor( ).&lt;/P&gt;&lt;P&gt;    me-&amp;gt;validator = x_validator.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    y_result = validator-&amp;gt;validate( x_data ).&lt;/P&gt;&lt;P&gt;    IF y_result-status IS INITIAL.&lt;/P&gt;&lt;P&gt;      WRITE: / 'Now doing the format checks'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;ENDCLASS. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_values DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_values  DEFINITION INHERITING FROM validate_decorator.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      constructor&lt;/P&gt;&lt;P&gt;       IMPORTING value(x_validator) TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,validate REDEFINITION.&lt;/P&gt;&lt;P&gt;ENDCLASS. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_values IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_values IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CALL METHOD super-&amp;gt;constructor( ).&lt;/P&gt;&lt;P&gt;    me-&amp;gt;validator = x_validator.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    y_result = validator-&amp;gt;validate( x_data ).&lt;/P&gt;&lt;P&gt;    IF y_result-status IS INITIAL.&lt;/P&gt;&lt;P&gt;      WRITE: / 'Now doing the values checks'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;ENDCLASS.  &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_relation_input DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_relation_input DEFINITION INHERITING FROM validate_decorator.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      constructor&lt;/P&gt;&lt;P&gt;       IMPORTING value(x_validator) TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,validate REDEFINITION.&lt;/P&gt;&lt;P&gt;ENDCLASS. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_relation_input IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_relation_input IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CALL METHOD super-&amp;gt;constructor( ).&lt;/P&gt;&lt;P&gt;    me-&amp;gt;validator = x_validator.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    y_result = validator-&amp;gt;validate( x_data ).&lt;/P&gt;&lt;P&gt;    IF y_result-status IS INITIAL.&lt;/P&gt;&lt;P&gt;      WRITE: / 'Now doing the relation input checks'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;ENDCLASS.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_relation_database DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_relation_database DEFINITION INHERITING FROM validate_decorator.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      constructor&lt;/P&gt;&lt;P&gt;       IMPORTING value(x_validator) TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,validate REDEFINITION.&lt;/P&gt;&lt;P&gt;ENDCLASS.   &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS validate_relation_database IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS validate_relation_database IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD constructor.&lt;/P&gt;&lt;P&gt;    CALL METHOD super-&amp;gt;constructor( ).&lt;/P&gt;&lt;P&gt;    me-&amp;gt;validator = x_validator.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "constructor&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    y_result = validator-&amp;gt;validate( x_data ).&lt;/P&gt;&lt;P&gt;    IF y_result-status IS INITIAL.&lt;/P&gt;&lt;P&gt;      WRITE: / 'Now doing the relation database checks'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;ENDCLASS.   &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS process_execution DEFINITION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS process_execution DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    METHODS:&lt;/P&gt;&lt;P&gt;      startevent&lt;/P&gt;&lt;P&gt;     ,getdata&lt;/P&gt;&lt;P&gt;     ,validate&lt;/P&gt;&lt;P&gt;     ,process&lt;/P&gt;&lt;P&gt;     ,endevent.&lt;/P&gt;&lt;P&gt;  PRIVATE SECTION.&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;      lst_data   TYPE processdata&lt;/P&gt;&lt;P&gt;     ,lst_result TYPE result.&lt;/P&gt;&lt;P&gt;ENDCLASS.                    "process_execution DEFINITION&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS process_execution IMPLEMENTATION&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS process_execution IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD startevent.&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing startevent'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "startevent&lt;/P&gt;&lt;P&gt;  METHOD getdata.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-name        = 'Hans Andersen'.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-street      = 'H.C Andersens Boulevard 112'.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-zip         = '1557'.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-city        = 'København'.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-email       = 'hcATandersen.dk'.&lt;/P&gt;&lt;P&gt;    me-&amp;gt;lst_data-phone       = '0045-31162211'.&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing Get_Data Activity'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "getdata&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;  METHOD validate.&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;      validator  TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     ,recursive  TYPE REF TO validation_manager&lt;/P&gt;&lt;P&gt;     .&lt;/P&gt;&lt;P&gt;    IF bestimpl = true.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT:&lt;/P&gt;&lt;P&gt;        validator TYPE validation_manager&lt;/P&gt;&lt;P&gt;       ,validator TYPE validate_format EXPORTING x_validator = recursive&lt;/P&gt;&lt;P&gt;       ,validator TYPE validate_values EXPORTING x_validator = recursive&lt;/P&gt;&lt;P&gt;       ,validator TYPE validate_relation_input EXPORTING x_validator = recursive&lt;/P&gt;&lt;P&gt;       ,validator TYPE validate_relation_database EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT validator TYPE validation_manager.&lt;/P&gt;&lt;P&gt;      recursive ?= validator.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT validator TYPE validate_format&lt;/P&gt;&lt;P&gt;        EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;      recursive ?= validator.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT validator TYPE validate_values&lt;/P&gt;&lt;P&gt;       EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;      recursive ?= validator.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT validator TYPE validate_relation_input&lt;/P&gt;&lt;P&gt;        EXPORTING x_validator = recursive.&lt;/P&gt;&lt;P&gt;      recursive ?= validator.&lt;/P&gt;&lt;P&gt;      CREATE OBJECT validator TYPE validate_relation_database&lt;/P&gt;&lt;P&gt;        EXPORTING x_validator = recursive .&lt;/P&gt;&lt;P&gt;      recursive ?= validator.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Recursive call of the validate and it's successors&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    me-&amp;gt;lst_result = validator-&amp;gt;validate( me-&amp;gt;lst_data ).&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing Validate Activity'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "validate&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD process.&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing Process Activity'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "process&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  METHOD endevent.&lt;/P&gt;&lt;P&gt;    WRITE: / 'Processing endevent'.&lt;/P&gt;&lt;P&gt;  ENDMETHOD.                    "endevent&lt;/P&gt;&lt;P&gt;ENDCLASS.     &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS mainapp DEFINITION                                             *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS mainapp DEFINITION.&lt;/P&gt;&lt;P&gt;  PUBLIC SECTION.&lt;/P&gt;&lt;P&gt;    CLASS-METHODS:&lt;/P&gt;&lt;P&gt;      main.&lt;/P&gt;&lt;P&gt;ENDCLASS.    &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;CLASS mainapp IMPLEMENTATION                                         *&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------------------------------------------" /&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;CLASS mainapp IMPLEMENTATION.&lt;/P&gt;&lt;P&gt;  METHOD main.&lt;/P&gt;&lt;P&gt;    DATA:&lt;/P&gt;&lt;P&gt;      p89 TYPE REF TO process_execution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;    CREATE OBJECT p89.&lt;/P&gt;&lt;P&gt;    p89-&amp;gt;startevent( ).&lt;/P&gt;&lt;P&gt;    p89-&amp;gt;getdata( ).&lt;/P&gt;&lt;P&gt;    p89-&amp;gt;validate( ).&lt;/P&gt;&lt;P&gt;    p89-&amp;gt;process( ).&lt;/P&gt;&lt;P&gt;    p89-&amp;gt;endevent( ).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;  ENDMETHOD.   &lt;/P&gt;&lt;P&gt;ENDCLASS.      &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt;  mainapp=&amp;gt;main( ).&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Edited by: Matt on Dec 22, 2009 2:03 PM Fixed formatting &lt;SPAN __jive_emoticon_name="wink"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 11:31:33 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485394#M1419611</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2009-12-22T11:31:33Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485395#M1419612</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It goes into endless LOOP because when system executes this statement it carries the new object created in the X_VALIDATOR parameter. So, the object has the reference of its OWN object instead of the SUPER object. This happens because as soon as system executes the statement CREATE OBJECT it creates the object before calling the constructor. SO, when it reaches to constructor it has its OWN object reference instead of the SUPER object reference. &lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;
      CREATE OBJECT:
        validator TYPE validation_manager
       ,Validator TYPE validate_format                 EXPORTING x_validator = Validator
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From Help:&lt;/P&gt;&lt;PRE&gt;&lt;CODE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The CREATE OBJECT statement creates an instance of a class or object and assigns the object reference to the reference variable oref. &lt;U&gt;&lt;EM&gt;Directly after the object has been created, the instance constructor of the class is executed.&lt;/EM&gt;&lt;/U&gt; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&lt;A href="http://help.sap.com/abapdocu_70/en/ABAPCREATE_OBJECT.htm" target="test_blank"&gt;http://help.sap.com/abapdocu_70/en/ABAPCREATE_OBJECT.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, you need to use the temporary variable to hold the super's reference and pass this variable while instantiating the object.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Naimesh Patel&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 14:36:38 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485395#M1419612</guid>
      <dc:creator>naimesh_patel</dc:creator>
      <dc:date>2009-12-22T14:36:38Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485396#M1419613</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;As I mentioned in an email discussion with Benny - there are some seriously talented people in this forum. &lt;SPAN __jive_emoticon_name="happy"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 18:18:12 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485396#M1419613</guid>
      <dc:creator>matt</dc:creator>
      <dc:date>2009-12-22T18:18:12Z</dc:date>
    </item>
    <item>
      <title>Re: Design Patterns, The Decorator</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485397#M1419614</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am truly honored &lt;SPAN __jive_emoticon_name="happy"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 22 Dec 2009 19:01:40 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/design-patterns-the-decorator/m-p/6485397#M1419614</guid>
      <dc:creator>naimesh_patel</dc:creator>
      <dc:date>2009-12-22T19:01:40Z</dc:date>
    </item>
  </channel>
</rss>

