CLASS_CONSTRUCTOR – CONSTRUCTOR

Instanzkonstruktor und statischer Konstruktor

Die Methoden constructor und class_constructor sind reservierte Namen.

class oref

public section.

method constructor.

class oref

public section.

class-method class_constructor.

Aufruf mit

create object oref exporting i = a…

Bsp. für einen class_constructor, der einmal pro Klasse aufgerufen wird.

*&---------------------------------------------------------------------*
*& Report  ZTEST37
*&
*&---------------------------------------------------------------------*
*&
*& Demonstration of class_constructor
*&
*&---------------------------------------------------------------------*

REPORT ZTEST37.
"REPORT demo_joins NO STANDARD PAGE HEADING.

DATA demo_join1 TYPE TABLE OF demo_join1.
DATA demo_join2 TYPE TABLE OF demo_join2.
TYPES: wa1 TYPE demo_join1,
       wa2 TYPE demo_join2.
TYPES BEGIN OF wat.
INCLUDE TYPE wa1 AS wa1 RENAMING WITH SUFFIX 1.
INCLUDE TYPE wa2 AS wa2 RENAMING WITH SUFFIX 2.
TYPES END OF wat.


CLASS demo DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS: class_constructor,
      main.
  PRIVATE SECTION.
    CLASS-DATA out TYPE REF TO if_demo_output.
ENDCLASS.

CLASS demo IMPLEMENTATION.
  METHOD main.
    DATA itab TYPE TABLE OF wat.
    out->begin_section( `Inner Joins`
      )->begin_section( `demo1 INNER JOIN demo2` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join1 AS t1
         INNER JOIN demo_join2 AS t2 ON t2~d = t1~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->write( itab
      )->next_section( `demo2 INNER JOIN demo1` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join2 AS t2
         INNER JOIN demo_join1 AS t1 ON t1~d = t2~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->write( itab
      )->end_section(
      )->next_section( `Outer Joins`
      )->begin_section( `demo1 LEFT OUTER JOIN demo2` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join1 AS t1
         LEFT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->write( itab
      )->next_section( `demo2 LEFT OUTER JOIN demo1` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join2 AS t2
         LEFT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->write( itab
      )->end_section(
      )->begin_section( `demo1 RIGHT OUTER JOIN demo2` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join1 AS t1
         RIGHT OUTER JOIN demo_join2 AS t2 ON t2~d = t1~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->write( itab
      )->next_section( `demo2 RIGHT OUTER JOIN demo1` ).
    SELECT t1~a AS a1, t1~b AS b1, t1~c AS c1, t1~d AS d1,
           t2~d AS d2, t2~e AS e2, t2~f AS f2, t2~g AS g2, t2~h AS h2
       FROM demo_join2 AS t2
         RIGHT OUTER JOIN demo_join1 AS t1 ON t1~d = t2~d
       ORDER BY t1~d
       INTO CORRESPONDING FIELDS OF TABLE @itab.
    out->display( itab ).
  ENDMETHOD.
  METHOD class_constructor.

    "DATA out TYPE REF TO if_demo_output.
    out = cl_demo_output=>new( )->begin_section( `Database Tables` ).

    DELETE FROM demo_join1.
*DATA wa_1 TYPE demo_join1.
*wa_1-a = 'a1'. wa_1-b = 'b1'. wa_1-c = 'c1'. wa_1-d = 'uu'.
*INSERT INTO demo_join1 VALUES wa_1.
*wa_1-a = 'a2'. wa_1-b = 'b2'. wa_1-c = 'c2'. wa_1-d = 'uu'.
*INSERT INTO demo_join1 VALUES wa_1.
*wa_1-a = 'a3'. wa_1-b = 'b3'. wa_1-c = 'c3'. wa_1-d = 'vv'.
*INSERT INTO demo_join1 VALUES wa_1.
*wa_1-a = 'a4'. wa_1-b = 'b4'. wa_1-c = 'c4'. wa_1-d = 'ww'.
*INSERT INTO demo_join1 VALUES wa_1.
    DATA wat_1 TYPE TABLE OF demo_join1.
    wat_1 = VALUE #(
          ( a = 'a1' b = 'b1' c = 'c1'  d = 'uu' )
          ( a = 'a2' b = 'b2' c = 'c2'  d = 'uu' )
          ( a = 'a3' b = 'b3' c = 'c3'  d = 'vv' )
          ( a = 'a4' b = 'b4' c = 'c4'  d = 'ww' ) ).
    INSERT demo_join1 FROM TABLE wat_1.
    SELECT * FROM demo_join1 INTO TABLE @DATA(itab1).

    DELETE FROM demo_join2.
*DATA wa_2 TYPE demo_join2.
*wa_2-d = 'uu'. wa_2-e = 'e1'. wa_2-f = 'f1'. wa_2-g = 'g1'.  wa_2-h = 'h1'.
*INSERT INTO demo_join2 VALUES wa_2.
*wa_2-d = 'ww'. wa_2-e = 'e2'. wa_2-f = 'f2'. wa_2-g = 'g2'.  wa_2-h = 'h2'.
*INSERT INTO demo_join2 VALUES wa_2.
*wa_2-d = 'xx'. wa_2-e = 'e3'. wa_2-f = 'f3'. wa_2-g = 'g3'.  wa_2-h = 'h3'.
*INSERT INTO demo_join2 VALUES wa_2.
    DATA wat_2 TYPE TABLE OF demo_join2.
    wat_2 = VALUE #(
          ( d = 'uu' e = 'e1' f = 'f1'  g = 'g1'  h = 'h1' )
          ( d = 'ww' e = 'e2' f = 'f2'  g = 'g2'  h = 'h2' )
          ( d = 'xx' e = 'e3' f = 'f3'  g = 'g3'  h = 'h3' ) ) .
    INSERT demo_join2 FROM TABLE wat_2.
    SELECT * FROM demo_join2 INTO TABLE @DATA(itab2).

    "out->display( ).
    out->begin_section( `demo1`
      )->write( itab1
      )->next_section( `demo2`
      )->write( itab2
      )->end_section(
      )->end_section( ).
    out->display( ).

  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  demo=>main( ).