-
Notifications
You must be signed in to change notification settings - Fork 1
/
ycl_hcm_application_log.abap
501 lines (382 loc) · 11.6 KB
/
ycl_hcm_application_log.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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
CLASS ycl_hcm_application_log DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CONSTANTS:
BEGIN OF ty_log,
object TYPE bal_s_log-object VALUE 'YHCM',
subobject TYPE bal_s_log-subobject VALUE 'YHCM0001',
alprog TYPE bal_s_log-alprog VALUE 'YHCM0012',
END OF ty_log,
BEGIN OF message,
id TYPE bapiret2-id VALUE 'ZHCM',
END OF message .
TYPES:
BEGIN OF ty_header_log,
title TYPE bal_s_log-extnumber,
object TYPE bal_s_log-object,
subobject TYPE bal_s_log-subobject,
alprog TYPE bal_s_log-alprog,
handle TYPE balloghndl,
lognumber TYPE balognr,
END OF ty_header_log .
"! <p class="shorttext synchronized" lang="pt">Recebe info iniciais</p>
METHODS constructor
IMPORTING
!iv_title TYPE bal_s_log-extnumber
!iv_object TYPE bal_s_log-object DEFAULT 'YHCM'
!iv_subobject TYPE bal_s_log-subobject DEFAULT 'YHCM0001'
!iv_alprog TYPE bal_s_log-alprog .
"! <p class="shorttext synchronized" lang="pt">Adiciona mensagens do tipo BAPIRET1</p>
METHODS add_bapiret1
IMPORTING
!is_message TYPE bapiret1 .
"! <p class="shorttext synchronized" lang="pt">Adiciona mensagens do tipo BAPIRET2</p>
METHODS add_bapiret2
IMPORTING
!message TYPE bapiret2 .
"! <p class="shorttext synchronized" lang="pt">Salva os dados que foram adicionados anteriormente</p>
METHODS save .
"! <p class="shorttext synchronized" lang="pt">Exibe mensagens de log</p>
METHODS show .
"! <p class="shorttext synchronized" lang="pt">Exibe mensagens de log (salvos)</p>
CLASS-METHODS show_saved
IMPORTING
!log_numbers TYPE bal_t_logn
!option TYPE i DEFAULT 0 .
"! <p class="shorttext synchronized" lang="pt">Retorna o numero do log</p>
METHODS get_lognumber
RETURNING
VALUE(result) TYPE balognr .
CLASS-METHODS save_single
IMPORTING
!is_header TYPE ty_header_log
!is_message TYPE bapiret1
RETURNING
VALUE(result) TYPE balognr .
"! <p class="shorttext synchronized" lang="pt">Retorna nro do Log apos salvar os dados da tabela passada</p>
CLASS-METHODS save_bapiret2_tab
IMPORTING
!is_header TYPE ty_header_log
!it_message TYPE bapiret2_t
RETURNING
VALUE(result) TYPE balognr .
"! <p class="shorttext synchronized" lang="pt">Retorna as mensagens de acordo com o numero passado</p>
CLASS-METHODS get_log_bapiret2
IMPORTING
!is_log_number TYPE balognr
RETURNING
VALUE(result) TYPE bapiret2_t .
"! <p class="shorttext synchronized" lang="pt">Retorna tabela de erros referente ao texto informado</p>
CLASS-METHODS map_excep_to_bapiret2
IMPORTING
!message TYPE string
RETURNING
VALUE(result) TYPE bapiret2_t .
PROTECTED SECTION.
PRIVATE SECTION.
DATA:
gs_header TYPE ty_header_log .
METHODS create .
METHODS set_lognumber
IMPORTING
!iv_lognumber TYPE balognr .
METHODS add
IMPORTING
!is_message TYPE bal_s_msg .
ENDCLASS.
CLASS ycl_hcm_application_log IMPLEMENTATION.
METHOD constructor .
me->gs_header = VALUE ty_header_log(
title = iv_title
object = iv_object
subobject = iv_subobject
alprog = iv_alprog
).
me->create( ) .
ENDMETHOD.
METHOD add_bapiret1 .
IF ( is_message IS INITIAL ) .
RETURN .
ENDIF .
DATA(bal_message) = VALUE bal_s_msg(
msgty = is_message-type
msgid = is_message-id
msgno = is_message-number
msgv1 = is_message-message_v1
msgv2 = is_message-message_v2
msgv3 = is_message-message_v3
msgv4 = is_message-message_v4 ) .
me->add( bal_message ) .
ENDMETHOD .
METHOD add_bapiret2 .
IF ( message IS INITIAL ) .
RETURN .
ENDIF .
DATA(bal_message) =
cl_rmps_trf_service=>convert_bapiret2_to_balmsg( is_bapiret2 = message ).
IF ( bal_message IS INITIAL ) .
RETURN .
ENDIF .
me->add( bal_message ) .
ENDMETHOD.
METHOD save.
DATA:
lt_lognumbers TYPE bal_t_lgnm.
IF ( me->gs_header-handle IS INITIAL ) .
RETURN .
ENDIF .
DATA(lt_handles) = VALUE bal_t_logh( ( me->gs_header-handle ) ).
CALL FUNCTION 'BAL_DB_SAVE_PREPARE'
EXPORTING
i_replace_in_all_logs = abap_on
* i_t_replace_in_these_logs =
* i_t_replace_message_variables =
* i_t_replace_context_fields =
EXCEPTIONS
log_not_found = 1
OTHERS = 2.
IF ( sy-subrc NE 0 ) .
RETURN .
ENDIF .
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
i_client = sy-mandt
* i_in_update_task = space
* i_save_all = lv_save_all
i_t_log_handle = lt_handles
* i_2th_connection = space
* i_2th_connect_commit = space
* i_link2job = 'x'
IMPORTING
e_new_lognumbers = lt_lognumbers
* e_second_connection =
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4.
IF ( sy-subrc EQ 0 ) .
me->gs_header-lognumber = VALUE #(
lt_lognumbers[ 1 ]-lognumber OPTIONAL ) .
ENDIF.
ENDMETHOD.
METHOD show.
DATA:
lt_handles TYPE bal_t_logh,
ls_display_profile TYPE bal_s_prof.
" Get standard display profile
CALL FUNCTION 'BAL_DSP_PROFILE_SINGLE_LOG_GET'
IMPORTING
e_s_display_profile = ls_display_profile
EXCEPTIONS
OTHERS = 1.
IF ( sy-subrc NE 0 ) .
RETURN.
ENDIF.
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
i_s_display_profile = ls_display_profile
i_t_log_handle = lt_handles.
ENDMETHOD.
METHOD show_saved.
DATA:
lt_log_handle TYPE bal_t_logh,
lt_msg_handle TYPE bal_t_msgh,
g_t_log_header TYPE balhdr_t.
IF ( lines( log_numbers ) EQ 0 ) .
RETURN .
ENDIF .
DATA(log_range) = VALUE bal_r_logn(
FOR r IN log_numbers (
sign = if_fsbp_const_range=>sign_include
option = if_fsbp_const_range=>option_equal
low = r
)
).
DATA(log_filter) = VALUE bal_s_lfil(
lognumber = log_range
).
" Search on DB for these logs
CALL FUNCTION 'BAL_DB_SEARCH'
EXPORTING
i_s_log_filter = log_filter
IMPORTING
e_t_log_header = g_t_log_header
EXCEPTIONS
OTHERS = 0.
IF ( sy-subrc NE 0 ) .
RETURN .
ENDIF .
" load logs from DB
CALL FUNCTION 'BAL_DB_LOAD'
EXPORTING
i_t_log_header = g_t_log_header
EXCEPTIONS
OTHERS = 0.
IF ( sy-subrc NE 0 ) .
RETURN .
ENDIF .
DATA(display_profile) = VALUE bal_s_prof(
disvariant = VALUE disvariant(
report = sy-repid
handle = 'LOG'
)
).
CALL FUNCTION 'BAL_DSP_LOG_DISPLAY'
EXPORTING
i_s_display_profile = display_profile.
ENDMETHOD.
METHOD get_lognumber .
IF ( me->gs_header IS INITIAL ) .
RETURN .
ENDIF .
result = me->gs_header-lognumber .
ENDMETHOD .
METHOD save_single .
IF ( is_header IS INITIAL ) .
RETURN .
ENDIF .
IF ( is_message IS INITIAL ) .
RETURN .
ENDIF.
DATA(lo_app) =
NEW ycl_hcm_application_log( iv_title = is_header-title
iv_object = is_header-object
iv_subobject = is_header-subobject
iv_alprog = is_header-alprog ) .
IF ( lo_app IS BOUND ) .
lo_app->add_bapiret1( is_message ) .
lo_app->save( ) .
result = lo_app->get_lognumber( ).
ENDIF .
FREE lo_app .
ENDMETHOD .
METHOD save_bapiret2_tab .
IF ( is_header IS INITIAL ) .
RETURN .
ENDIF .
IF ( it_message IS INITIAL ) .
RETURN .
ENDIF.
DATA(lo_app) =
NEW ycl_hcm_application_log( iv_title = is_header-title
iv_object = is_header-object
iv_subobject = is_header-subobject
iv_alprog = is_header-alprog ) .
IF ( lo_app IS BOUND ) .
LOOP AT it_message INTO DATA(ls_message) .
lo_app->add_bapiret2( ls_message ) .
ENDLOOP.
lo_app->save( ) .
result = lo_app->get_lognumber( ).
FREE lo_app .
ENDIF .
ENDMETHOD .
METHOD get_log_bapiret2 .
DATA:
lognumbers_filter TYPE STANDARD TABLE OF szal_lognumber,
saved_messages TYPE STANDARD TABLE OF balm.
IF ( is_log_number IS INITIAL ) .
RETURN .
ENDIF .
lognumbers_filter = VALUE #( ( item = is_log_number ) ) .
CALL FUNCTION 'APPL_LOG_READ_DB_WITH_LOGNO'
TABLES
lognumbers = lognumbers_filter
messages = saved_messages.
IF ( lines( saved_messages ) GT 0 ) .
result = VALUE bapiret2_t(
FOR l IN saved_messages (
type = l-msgty
id = l-msgid
number = l-msgno
message_v1 = l-msgv1
message_v2 = l-msgv2
message_v3 = l-msgv3
message_v4 = l-msgv4
) ) .
ENDIF .
ENDMETHOD .
METHOD map_excep_to_bapiret2 .
DATA:
lt_lines TYPE trtexts,
ls_message TYPE bapiret2.
IF ( message IS INITIAL ) .
RETURN .
ENDIF .
CALL FUNCTION 'TR_SPLIT_TEXT'
EXPORTING
iv_text = CONV char1250( message )
iv_len = 50
IMPORTING
et_lines = lt_lines.
LOOP AT lt_lines INTO DATA(line) .
CASE sy-tabix MOD 4 .
WHEN 1 .
ls_message = VALUE #(
type = if_xo_const_message=>error
id = ycl_hcm_application_log=>message
number = 000
message_v1 = line ) .
WHEN 2 .
ls_message-message_v2 = line .
WHEN 3 .
ls_message-message_v3 = line .
WHEN 0 .
ls_message-message_v4 = line .
APPEND ls_message TO result .
CLEAR ls_message .
ENDCASE .
ENDLOOP.
IF ( ls_message IS NOT INITIAL ) .
APPEND ls_message TO result .
ENDIF.
ENDMETHOD .
METHOD create.
DATA(ls_log) = VALUE bal_s_log(
extnumber = me->gs_header-title
object = me->gs_header-object
subobject = me->gs_header-subobject
aldate = sy-datum
altime = sy-uzeit
aluser = sy-uname
altcode = sy-tcode
alprog = me->gs_header-alprog
del_before = abap_on ) .
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = ls_log
IMPORTING
e_log_handle = me->gs_header-handle
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
IF ( sy-subrc NE 0 ) .
RETURN .
ENDIF .
CALL FUNCTION 'BAL_DB_LOGNUMBER_GET'
EXPORTING
i_log_handle = me->gs_header-handle
IMPORTING
e_lognumber = me->gs_header-lognumber.
ENDMETHOD.
METHOD set_lognumber .
IF ( iv_lognumber IS NOT INITIAL ) .
me->gs_header-lognumber = iv_lognumber .
ENDIF .
ENDMETHOD .
METHOD add .
IF ( me->gs_header-handle IS INITIAL ) .
RETURN.
ENDIF .
IF ( is_message IS INITIAL ) .
RETURN.
ENDIF .
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = me->gs_header-handle
i_s_msg = is_message.
ENDMETHOD.
ENDCLASS.