forked from moreus/ABAPDesignPattern
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathzdp_decorator.abap
152 lines (125 loc) · 3.37 KB
/
zdp_decorator.abap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
*&---------------------------------------------------------------------*
*& Report ZDP_DECORATOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zdp_decorator.
CLASS output DEFINITION ABSTRACT.
PUBLIC SECTION.
METHODS: process_output ABSTRACT.
ENDCLASS.
CLASS alv_output DEFINITION INHERITING FROM output.
PUBLIC SECTION.
METHODS: process_output REDEFINITION.
ENDCLASS.
CLASS alv_output IMPLEMENTATION.
METHOD process_output.
WRITE: / 'Standard ALV output'.
ENDMETHOD.
ENDCLASS.
CLASS op_decorator DEFINITION INHERITING FROM output.
PUBLIC SECTION.
METHODS:
constructor IMPORTING io_decorator TYPE REF TO output,
process_output REDEFINITION.
PRIVATE SECTION.
DATA: o_decorator TYPE REF TO output.
ENDCLASS.
CLASS op_decorator IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
me->o_decorator = io_decorator.
ENDMETHOD.
METHOD process_output.
CHECK o_decorator IS BOUND.
o_decorator->process_output( ).
ENDMETHOD.
ENDCLASS.
CLASS op_pdf DEFINITION INHERITING FROM op_decorator.
PUBLIC SECTION.
METHODS: process_output REDEFINITION.
ENDCLASS.
CLASS op_pdf IMPLEMENTATION.
METHOD process_output.
super->process_output( ).
WRITE: /(10) space, 'Generating PDF'.
ENDMETHOD.
ENDCLASS.
CLASS op_xls DEFINITION INHERITING FROM op_decorator.
PUBLIC SECTION.
METHODS: process_output REDEFINITION.
ENDCLASS.
CLASS op_xls IMPLEMENTATION.
METHOD process_output.
super->process_output( ).
WRITE: /(10) space, 'Generating Excel'.
ENDMETHOD.
ENDCLASS.
CLASS op_email DEFINITION INHERITING FROM op_decorator.
PUBLIC SECTION.
METHODS: process_output REDEFINITION.
ENDCLASS.
CLASS op_email IMPLEMENTATION.
METHOD process_output.
super->process_output( ).
WRITE: /(10) space, 'Sending Email'.
ENDMETHOD.
ENDCLASS.
CLASS op_alv DEFINITION INHERITING FROM op_decorator.
PUBLIC SECTION.
METHODS: process_output REDEFINITION.
ENDCLASS.
CLASS op_alv IMPLEMENTATION.
METHOD process_output.
super->process_output( ).
WRITE: /(10) space, 'Generating ALV'.
ENDMETHOD.
ENDCLASS.
CLASS main_app DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:run IMPORTING
iv_pdf TYPE flag
iv_email TYPE flag
iv_xls TYPE flag.
ENDCLASS.
CLASS main_app IMPLEMENTATION.
METHOD run.
DATA: lo_decorator TYPE REF TO output,
lo_pre TYPE REF TO output.
CREATE OBJECT lo_decorator TYPE alv_output.
lo_pre = lo_decorator.
IF iv_pdf IS NOT INITIAL.
CREATE OBJECT lo_decorator
TYPE op_pdf
EXPORTING
io_decorator = lo_pre.
lo_pre = lo_decorator.
ENDIF.
IF iv_email IS NOT INITIAL.
CREATE OBJECT lo_decorator
TYPE op_email
EXPORTING
io_decorator = lo_pre.
lo_pre = lo_decorator.
ENDIF.
IF iv_xls IS NOT INITIAL.
CREATE OBJECT lo_decorator
TYPE op_xls
EXPORTING
io_decorator = lo_pre.
lo_pre = lo_decorator.
ENDIF.
lo_decorator->process_output( ).
ENDMETHOD.
ENDCLASS.
PARAMETERS: p_pdf AS CHECKBOX,
p_email AS CHECKBOX,
p_xls AS CHECKBOX.
START-OF-SELECTION.
main_app=>run(
iv_pdf = p_pdf
iv_email = p_email
iv_xls = p_xls
).