*&---------------------------------------------------------------------*
*& Report ZRMM008
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zrmm008.
CONSTANTS:
c_memory_id(19) TYPE c VALUE 'ZMMR50230_LOG_TABLE',
c_icon_led_green(4) TYPE c VALUE '@5B@',
c_icon_led_red(4) TYPE c VALUE '@5C@'.
CONSTANTS:
c_lenght_output TYPE i VALUE 512,
c_param_support_log TYPE memoryid VALUE 'Z_SUPPORT_LOG'.
TYPES:
BEGIN OF s_numvalue,
frggr TYPE frggr,
frgsx TYPE frggr.
INCLUDE STRUCTURE bapi1003_alloc_values_num.
TYPES:
table_field TYPE atfel,
entry TYPE i,
END OF s_numvalue.
TYPES:
BEGIN OF s_charvalue,
frggr TYPE frggr,
frgsx TYPE frgsx.
INCLUDE STRUCTURE bapi1003_alloc_values_char.
TYPES:
table_field TYPE atfel,
entry TYPE i,
END OF s_charvalue.
TYPES:
BEGIN OF s_currvalue,
frggr TYPE frggr,
frgsx TYPE frggr.
INCLUDE STRUCTURE bapi1003_alloc_values_curr.
TYPES:
table_field TYPE atfel,
entry TYPE i,
END OF s_currvalue.
TYPES:
BEGIN OF s_table_fields,
data_element TYPE rollname,
columns TYPE i,
column_name TYPE name_feld,
END OF s_table_fields.
TYPES:
BEGIN OF s_customizing,
version TYPE c,
status(3) TYPE c,
frggr TYPE frggr,
frgsx TYPE frgsx,
frgc1 TYPE frgco,
frgc2 TYPE frgco,
frgc3 TYPE frgco,
frgc4 TYPE frgco,
frgc5 TYPE frgco,
frgc6 TYPE frgco,
frgc7 TYPE frgco,
frgc8 TYPE frgco,
frgxt TYPE frgxt,
frgot TYPE frgot,
END OF s_customizing.
TYPES:
BEGIN OF s_not_ekgrp,
frggr TYPE frggr,
frgsx TYPE frgsx,
ekgrp TYPE ekgrp,
END OF s_not_ekgrp.
TYPES:
BEGIN OF s_log,
frggr TYPE frggr,
frgsx TYPE frgsx,
type TYPE char1,
datum TYPE datum,
uzeit TYPE uzeit,
ballog TYPE balloghndl,
scprlog TYPE scpr_handl,
has_error TYPE flag,
type_descr(5) TYPE c,
END OF s_log.
TYPES:
BEGIN OF s_code,
frggr TYPE frggr,
frgco TYPE frgco,
frgct TYPE frgct,
mark TYPE flag,
color(4) TYPE c,
END OF s_code.
TYPE-POOLS : abap, slis, icon.
DATA: v_type TYPE frgot.
DATA: " Customizing Information
t_t16fg TYPE TABLE OF v_t16fg, " Strategy Group
t_t16fc TYPE TABLE OF v_t16fc, " Release Code
t_t16fs TYPE TABLE OF v_t16fs, " Release Strategy
t_t16fk TYPE TABLE OF t16fk, " Release States
t_t024 TYPE TABLE OF t024.
DATA: "Classification Information
t_currvalues TYPE TABLE OF s_currvalue,
t_numvalues TYPE TABLE OF s_numvalue,
t_charvalues TYPE TABLE OF s_charvalue,
t_characteristics TYPE TABLE OF bapi_char,
t_not_ekgrp TYPE TABLE OF s_not_ekgrp,
v_classnum TYPE bapi1003_key-classnum,
v_curr_column_output_len TYPE i.
DATA: "Dynamic Table for Classification Information
dy_table TYPE REF TO data,
t_classification_current TYPE TABLE OF s_table_fields,
t_classification_new TYPE TABLE OF s_table_fields.
DATA: "Dynpro Control
lvc_t_fcat TYPE lvc_t_fcat,
lvc_w_layout TYPE lvc_s_layo,
lvc_t_filt TYPE lvc_t_filt,
v_file_uploaded TYPE flag,
v_filtered TYPE c,
v_request TYPE trkorr,
v_display_sel1 TYPE smp_dyntxt VALUE 'SEL1',
v_display_sel2 TYPE smp_dyntxt VALUE 'SEL2',
v_display_sel3 TYPE smp_dyntxt VALUE 'SEL3',
v_display_sel4 TYPE smp_dyntxt VALUE 'SEL4',
v_display_sel5 TYPE smp_dyntxt VALUE 'SEL5',
v_display_request TYPE smp_dyntxt,
c_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
c_newline TYPE c VALUE cl_abap_char_utilities=>cr_lf,
t_tvarvc TYPE TABLE OF tvarvc,
v_okcode TYPE syst-ucomm,
t_log TYPE TABLE OF s_log,
t_code TYPE TABLE OF s_code.
DATA:
v_trkorr TYPE trkorr,
t_file TYPE TABLE OF string,
v_header TYPE string.
SELECTION-SCREEN BEGIN OF BLOCK bl0 WITH FRAME TITLE text-bl0.
PARAMETERS: p_rc TYPE flag RADIOBUTTON GROUP gr1,
p_po TYPE flag RADIOBUTTON GROUP gr1,
p_fs TYPE flag RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK bl0.
FIELD-SYMBOLS:
<dyn_table> TYPE STANDARD TABLE.
INITIALIZATION.
CLEAR v_file_uploaded.
START-OF-SELECTION.
PERFORM set_type.
PERFORM select_data.
PERFORM process_data.
END-OF-SELECTION.
PERFORM call_alv.
*----------------------------------------------------------------------*
* CLASS support_log DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS support_log DEFINITION.
PUBLIC SECTION.
CLASS-DATA:
self_instance TYPE REF TO support_log.
DATA: id TYPE bal_s_log-extnumber READ-ONLY,
object TYPE bal_s_log-object READ-ONLY,
subobject TYPE bal_s_log-subobject READ-ONLY,
delimiter TYPE c VALUE '|'.
CLASS-METHODS:
class_constructor.
METHODS:
* TODO ---------------------------------------------------
log_string IMPORTING
value(msgty) TYPE syst-msgty OPTIONAL
value(string_value) TYPE string PREFERRED PARAMETER string_value,
log_string_table IMPORTING
value(msgty) TYPE syst-msgty OPTIONAL
value(string_table) TYPE table_of_strings PREFERRED PARAMETER
string_table,
log_value IMPORTING value(variable) TYPE char30 value(value) TYPE
char50,
log_table IMPORTING value(table_data) TYPE data
PREFERRED PARAMETER table_data,
* DONE ---------------------------------------------------
log_text IMPORTING
value(msgty) TYPE syst-msgty OPTIONAL
value(text) TYPE c PREFERRED PARAMETER text,
log_message_symsg,
log_message IMPORTING
value(msgid) TYPE syst-msgid
value(msgty) TYPE syst-msgty
value(msgno) TYPE syst-msgno
value(msgv1) TYPE syst-msgv1
value(msgv2) TYPE syst-msgv2
value(msgv3) TYPE syst-msgv3
value(msgv4) TYPE syst-msgv4,
set_object IMPORTING value(object) TYPE balobj_d,
set_subobject IMPORTING value(subobject) TYPE balsubobj,
set_id IMPORTING value(id) TYPE balnrext,
spool_split,
spool_close,
get_log_handler RETURNING value(handler) TYPE balloghndl,
log_system_stack,
constructor IMPORTING
value(object) TYPE balobj_d OPTIONAL
value(subobject) TYPE balsubobj OPTIONAL
value(id) TYPE balnrext OPTIONAL.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA:
system_type TYPE t000-cccategory,
support_parameter TYPE memoryid.
DATA: log_handler TYPE balloghndl,
spool_handler TYPE sy-tabix,
spool_id TYPE tsp01-rqident.
CLASS-METHODS:
call_message_x IMPORTING value(prog_reference) TYPE progname
PREFERRED PARAMETER prog_reference.
METHODS:
* TODO ---------------------------------------------------
log_components IMPORTING value(components) TYPE abap_compdescr_tab,
spool_write IMPORTING value(string_val) TYPE string
PREFERRED PARAMETER string_val,
spool_write_string_table IMPORTING value(string_table) TYPE
table_of_strings,
dump_table IMPORTING reference(table_ref) TYPE STANDARD TABLE
RETURNING value(string_table) TYPE table_of_strings,
* DONE ---------------------------------------------------
save_db_log,
spool_start,
update_handler,
get_system_stack RETURNING value(stack) TYPE abap_callstack.
ENDCLASS. "support_log DEFINITION
*----------------------------------------------------------------------*
* CLASS log IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS support_log IMPLEMENTATION.
METHOD class_constructor.
CREATE OBJECT support_log=>self_instance.
SELECT SINGLE cccategory FROM t000 INTO support_log=>system_type
WHERE mandt = sy-mandt.
GET PARAMETER ID c_param_support_log FIELD
support_log=>support_parameter.
ENDMETHOD. "class_constructor
METHOD constructor.
IF object IS SUPPLIED.
me->object = object.
ENDIF.
IF subobject IS SUPPLIED.
me->subobject = subobject.
ENDIF.
IF id IS SUPPLIED.
me->id = id.
ENDIF.
me->update_handler( ).
ENDMETHOD. "constructor
METHOD get_system_stack.
CALL FUNCTION 'SYSTEM_CALLSTACK'
* EXPORTING
* MAX_LEVEL = 0
IMPORTING
callstack = stack
* ET_CALLSTACK =
.
ENDMETHOD. "get_system_stack
METHOD set_object.
me->object = object.
me->update_handler( ).
ENDMETHOD. "set_object
METHOD set_subobject.
me->subobject = subobject.
me->update_handler( ).
ENDMETHOD. "set_subobject
METHOD set_id.
me->id = id.
me->update_handler( ).
ENDMETHOD. "set_id
METHOD update_handler.
DATA: bal_s_log TYPE bal_s_log,
timestampl TYPE timestampl.
IF me->id IS NOT INITIAL.
bal_s_log-extnumber = me->id.
ELSE.
GET TIME STAMP FIELD timestampl .
bal_s_log-extnumber = timestampl.
CONDENSE bal_s_log-extnumber NO-GAPS.
ENDIF.
IF me->object IS NOT INITIAL.
bal_s_log-object = me->object.
ELSE.
bal_s_log-object = 'BTC'.
ENDIF.
IF me->subobject IS INITIAL AND bal_s_log-object = 'BTC'.
bal_s_log-subobject = 'DEFAULT'.
ELSE.
bal_s_log-subobject = me->subobject.
ENDIF.
bal_s_log-aldate = sy-datum.
bal_s_log-altime = sy-uzeit.
bal_s_log-aluser = sy-uname.
bal_s_log-altcode = sy-tcode.
bal_s_log-alprog = sy-cprog.
* BAL_S_LOG-ALMODE
* BAL_S_LOG-ALCHDATE
* BAL_S_LOG-ALCHTIME
* BAL_S_LOG-ALCHUSER
* BAL_S_LOG-ALDATE_DEL
* BAL_S_LOG-DEL_BEFORE
* BAL_S_LOG-ALSTATE
* BAL_S_LOG-CONTEXT
* BAL_S_LOG-PARAMS
CALL FUNCTION 'BAL_LOG_CREATE'
EXPORTING
i_s_log = bal_s_log
IMPORTING
e_log_handle = me->log_handler
EXCEPTIONS
log_header_inconsistent = 1
OTHERS = 2.
IF sy-subrc <> 0 OR me->log_handler IS INITIAL..
support_log=>call_message_x('BAL_LOG_CREATE' ).
ENDIF.
* me->spool_start( ).
*
* me->log_string( ).
ENDMETHOD. "update_handler
METHOD log_message.
DATA: i_s_msg TYPE bal_s_msg.
CHECK me->log_handler IS NOT INITIAL.
i_s_msg-msgty = msgty.
i_s_msg-msgid = msgid.
i_s_msg-msgno = msgno.
i_s_msg-msgv1 = msgv1.
i_s_msg-msgv2 = msgv2.
i_s_msg-msgv3 = msgv3.
i_s_msg-msgv4 = msgv4.
CALL FUNCTION 'BAL_LOG_MSG_ADD'
EXPORTING
i_log_handle = me->log_handler
i_s_msg = i_s_msg
EXCEPTIONS
log_not_found = 1
msg_inconsistent = 2
log_is_full = 3
OTHERS = 4.
IF sy-subrc <> 0.
support_log=>call_message_x('BAL_LOG_MSG_ADD' ).
ENDIF.
me->save_db_log( ).
*
* DATA: message_output TYPE string.
* MESSAGE
* ID msgid TYPE msgty NUMBER msgno
* WITH msgv1 msgv2 msgv3 msgv4
* INTO message_output.
* me->spool_write( message_output ).
ENDMETHOD. "log_message
METHOD log_message_symsg.
me->log_message(
msgid = syst-msgid
msgty = syst-msgty
msgno = syst-msgno
msgv1 = syst-msgv1
msgv2 = syst-msgv2
msgv3 = syst-msgv3
msgv4 = syst-msgv4
).
ENDMETHOD. "log_message_sy
METHOD log_system_stack.
DATA: stack TYPE abap_callstack.
stack = get_system_stack( ).
me->log_table( stack ).
ENDMETHOD. "log_system_stack
METHOD log_text.
DATA: v_msgty TYPE syst-msgty.
CHECK me->log_handler IS NOT INITIAL.
IF msgty IS NOT SUPPLIED.
v_msgty = 'I'.
ELSE.
v_msgty = msgty.
ENDIF.
DATA: c_200(200) TYPE c.
c_200 = text.
CALL FUNCTION 'BAL_LOG_MSG_ADD_FREE_TEXT'
EXPORTING
i_log_handle = me->log_handler
i_msgty = v_msgty
* I_PROBCLASS = '4'
i_text = c_200
* I_S_CONTEXT =
* I_S_PARAMS =
* IMPORTING
* E_S_MSG_HANDLE =
* E_MSG_WAS_LOGGED =
* E_MSG_WAS_DISPLAYED =
* EXCEPTIONS
* LOG_NOT_FOUND = 1
* MSG_INCONSISTENT = 2
* LOG_IS_FULL = 3
* OTHERS = 4
.
IF sy-subrc <> 0.
support_log=>call_message_x( 'BAL_LOG_MSG_ADD_FREE_TEXT' ).
ELSE.
me->save_db_log( ).
ENDIF.
DATA: s TYPE string.
s = text.
me->spool_write( s ).
ENDMETHOD. "log_text
METHOD log_table.
DATA: cl_tabledescr TYPE REF TO cl_abap_tabledescr,
cl_structdescr TYPE REF TO cl_abap_structdescr,
components TYPE abap_compdescr_tab,
column_name LIKE LINE OF components.
cl_tabledescr ?= cl_abap_typedescr=>describe_by_data( table_data ).
cl_structdescr ?= cl_tabledescr->get_table_line_type( ).
components = cl_structdescr->components.
me->log_components( components ).
FIELD-SYMBOLS: <table> TYPE ANY TABLE,
<wa> TYPE ANY,
<field> TYPE ANY.
ASSIGN table_data TO <table>.
ENDMETHOD. "log_table
METHOD log_value.
ENDMETHOD. "log_value
METHOD save_db_log.
CHECK me->log_handler IS NOT INITIAL.
* DATA: bal_t_logh TYPE bal_t_logh,
* balloghndl TYPE balloghndl.
* balloghndl = me->log_handler.
* APPEND balloghndl TO bal_t_logh.
CALL FUNCTION 'BAL_DB_SAVE'
EXPORTING
* I_CLIENT = SY-MANDT
* I_IN_UPDATE_TASK = ' '
i_save_all = 'X'
* i_t_log_handle = bal_t_logh
* I_2TH_CONNECTION = ' '
* I_2TH_CONNECT_COMMIT = ' '
* IMPORTING
* E_NEW_LOGNUMBERS =
* E_SECOND_CONNECTION =
EXCEPTIONS
log_not_found = 1
save_not_allowed = 2
numbering_error = 3
OTHERS = 4
.
IF sy-subrc <> 0.
support_log=>call_message_x( 'BAL_DB_SAVE').
ENDIF.
ENDMETHOD. "save_db_log
METHOD spool_start.
DATA: l_layout TYPE tsp01-rqpaper,
l_title TYPE tsp01-rqtitle,
l_doctype TYPE tsp01-rqdoctype.
l_doctype = 'LIST'.
l_layout = 'X_POSTSCRIPT'.
* Create Spool
CALL FUNCTION 'RSPO_SR_OPEN'
EXPORTING
dest = 'LP01'
* LDEST =
layout = l_layout
name = 'LOGMAN'
* SUFFIX1 =
* SUFFIX2 =
copies = '1'
* PRIO =
* immediate_print = ' '
* AUTO_DELETE =
titleline = l_title
receiver = syst-uname "
* division = l_pri_params-prabt " abteilung
* authority = l_pri_params-prber "
* POSNAME =
* ACTTIME =
* LIFETIME = '8'
* APPEND =
* COVERPAGE =
* CODEPAGE =
doctype = l_doctype
* ARCHMODE =
* ARCHPARAMS =
* TELELAND =
* TELENUM =
* TELENUME =
IMPORTING
handle = me->spool_handler
spoolid = me->spool_id
EXCEPTIONS
device_missing = 1
name_twice = 2
no_such_device = 3
operation_failed = 4
OTHERS = 5
. "#EC DOM_EQUAL
IF sy-subrc <> 0.
support_log=>call_message_x('RSPO_SR_OPEN').
ENDIF.
ENDMETHOD. "spool_start
METHOD spool_write.
DATA: l_pos TYPE i,
l_len TYPE i,
l_line_length TYPE i,
l_loops TYPE i,
l_char(c_lenght_output) TYPE c.
l_len = STRLEN( string_val ).
l_loops = l_len DIV c_lenght_output.
DO l_loops TIMES.
l_pos = ( sy-index - 1 ) * c_lenght_output + 1.
CALL FUNCTION 'RSPO_SR_WRITE'
EXPORTING
handle = me->spool_handler
text = l_char
length = l_line_length.
ENDDO.
ENDMETHOD. "spool_write
METHOD spool_write_string_table.
ENDMETHOD. "spool_write_string_table
METHOD spool_close.
CALL FUNCTION 'RSPO_SR_CLOSE'
EXPORTING
handle = me->spool_handler
pages = 1
final = 'X'
EXCEPTIONS
handle_not_valid = 1
operation_failed = 2
OTHERS = 3.
IF sy-subrc IS NOT INITIAL.
support_log=>call_message_x('RSPO_SR_CLOSE').
ENDIF.
ENDMETHOD. "spool_close
METHOD spool_split.
me->spool_close( ).
me->spool_start( ).
"@TODO
ENDMETHOD. "spool_split
METHOD log_components.
DATA: component LIKE LINE OF components,
len TYPE i,
spaces TYPE i.
DATA: out_string TYPE string,
fill_space(500) TYPE c.
CLEAR out_string.
LOOP AT components INTO component.
AT FIRST.
out_string = '|'.
ENDAT.
IF component-decimals > 0.
len = component-decimals + component-length + 1.
ELSE.
len = component-length.
ENDIF.
IF STRLEN( component-name ) >= len.
CONCATENATE out_string component-name(len) INTO out_string.
ELSE.
spaces = len - STRLEN( component-name ).
CONCATENATE out_string component-name fill_space(spaces) INTO
out_string RESPECTING BLANKS.
ENDIF.
CONCATENATE out_string '|' INTO out_string.
ENDLOOP.
me->log_string( out_string ).
ENDMETHOD. "log_components
METHOD dump_table.
"@TODO
ENDMETHOD. "dump_table
METHOD log_string.
DATA: string_len TYPE i,
write_pos TYPE i,
write_len TYPE i,
loops TYPE i.
me->log_text( 'Logging String Value' ).
* string_len = strlen( string_value ).
* loops = string_len DIV c_lenght_output.
* DO loops TIMES.
* write_pos = ( ( sy-index - 1 ) * c_lenght_output ) + 1.
* IF write_pos + c_lenght_output < string_len.
*
* ELSE.
*
* ENDIF.
*
* ENDDO.
DATA: t(200) TYPE c.
t = string_value.
me->log_text( t ).
me->spool_write( string_value ).
ENDMETHOD. "log_string
METHOD log_string_table.
ENDMETHOD. "log_string_table
METHOD call_message_x.
CHECK support_log=>system_type <> 'P'.
CHECK support_log=>support_parameter IS NOT INITIAL.
MESSAGE x001(bl) WITH 'Un-Expected Execution'(x01) prog_reference.
ENDMETHOD. "call_message_x
METHOD get_log_handler.
IF me->log_handler IS NOT INITIAL.
handler = me->log_handler.
ENDIF.
ENDMETHOD. "get_log_handler
ENDCLASS. "log IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form fill_current_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fill_current_data.
FIELD-SYMBOLS:
<dyn_wa>,
<dyn_field>.
DATA:
dy_line TYPE REF TO data.
DATA: w_charvalue LIKE LINE OF t_charvalues,
w_numvalue LIKE LINE OF t_numvalues,
w_currvalue LIKE LINE OF t_currvalues,
atwrt TYPE atwrt,
column_number(3) TYPE n,
component_name(30) TYPE c.
ASSIGN dy_table->* TO <dyn_table>.
DATA: w_t16fs LIKE LINE OF t_t16fs.
LOOP AT t_t16fs INTO w_t16fs.
READ TABLE <dyn_table> WITH KEY ('FRGGR') = w_t16fs-frggr ('FRGSX')
= w_t16fs-frgsx
ASSIGNING <dyn_wa>.
IF sy-subrc IS INITIAL.
ASSIGN COMPONENT 'FRGC1' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc1.
ASSIGN COMPONENT 'FRGC2' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc2.
ASSIGN COMPONENT 'FRGC3' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc3.
ASSIGN COMPONENT 'FRGC4' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc4.
ASSIGN COMPONENT 'FRGC5' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc5.
ASSIGN COMPONENT 'FRGC6' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc5.
ASSIGN COMPONENT 'FRGC7' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc5.
ASSIGN COMPONENT 'FRGC8' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc5.
ELSE.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_t16fs-frggr.
ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_t16fs-frgsx.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = 'C'.
ASSIGN COMPONENT 'FRGC1' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc1.
ASSIGN COMPONENT 'FRGC2' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc2.
ASSIGN COMPONENT 'FRGC3' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc3.
ASSIGN COMPONENT 'FRGC4' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc4.
ASSIGN COMPONENT 'FRGC5' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc5.
ASSIGN COMPONENT 'FRGC6' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc6.
ASSIGN COMPONENT 'FRGC7' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc7.
ASSIGN COMPONENT 'FRGC8' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = w_t16fs-frgc8.
ASSIGN COMPONENT 'SEQ' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 0.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'C611'.
APPEND <dyn_wa> TO <dyn_table>.
ENDIF.
ENDLOOP.
LOOP AT t_charvalues INTO w_charvalue.
READ TABLE <dyn_table>
WITH KEY ('FRGGR') = w_charvalue-frggr
('FRGSX') = w_charvalue-frgsx
('SEQ') = w_charvalue-entry
ASSIGNING <dyn_wa>.
IF sy-subrc IS NOT INITIAL.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_charvalue-frggr.
ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_charvalue-frgsx.
ASSIGN COMPONENT 'SEQ' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_charvalue-entry.
APPEND <dyn_wa> TO <dyn_table> ASSIGNING <dyn_wa>.
ENDIF.
ASSIGN COMPONENT w_charvalue-table_field OF STRUCTURE <dyn_wa>
TO <dyn_field>.
IF sy-subrc IS INITIAL.
<dyn_field> = w_charvalue-value_neutral.
ENDIF.
ENDLOOP.
LOOP AT t_currvalues INTO w_currvalue.
LOOP AT t_t16fs INTO w_t16fs.
READ TABLE <dyn_table>
WITH KEY ('FRGGR') = w_currvalue-frggr
('FRGSX') = w_currvalue-frgsx
('SEQ') = w_currvalue-entry
ASSIGNING <dyn_wa>.
IF sy-subrc IS NOT INITIAL.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_currvalue-frggr.
ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_currvalue-frgsx.
ASSIGN COMPONENT 'SEQ' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
<dyn_field> = w_currvalue-entry.
APPEND <dyn_wa> TO <dyn_table> ASSIGNING <dyn_wa>.
ENDIF.
ASSIGN COMPONENT w_currvalue-table_field OF STRUCTURE <dyn_wa>
TO <dyn_field>.
CALL FUNCTION 'CTBP_CONVERT_VALUE_INT_TO_EXT'
EXPORTING
charactname = w_currvalue-charact
value_from = w_currvalue-value_from
value_to = w_currvalue-value_to
value_relation = w_currvalue-value_relation
* CHARACTDETAIL =
IMPORTING
value_external = atwrt
* EXCEPTIONS
* CHARACT_NOT_FOUND = 1
* NO_AUTHORITY = 2
* WRONG_DATA_TYPE = 3
* INTERNAL_ERROR = 4
* WRONG_INPUT = 5
* WRONG_FORMAT = 6
* OTHERS = 7
.
<dyn_field> = atwrt.
DATA: len_atwrt TYPE i.
len_atwrt = STRLEN( atwrt ).
IF len_atwrt > v_curr_column_output_len.
v_curr_column_output_len = len_atwrt.
ENDIF.
ENDLOOP.
ENDLOOP.
* DATA: w_t16fv TYPE t16fv.
* LOOP AT t_t16fs INTO w_t16fs.
* READ TABLE <dyn_table> WITH KEY ('FRGGR') = w_t16fs-frggr ('FRGSX')
* = w_t16fs-frgsx
* ASSIGNING <dyn_wa>.
* IF sy-subrc IS INITIAL.
* ASSIGN COMPONENT 'SEQ' OF STRUCTURE <dyn_wa> TO <dyn_field>.
* CHECK <dyn_field> IS ASSIGNED.
* IF w_t16fs-frgc2 IS INITIAL AND w_t16fs-frgc3 IS INITIAL
* AND w_t16fs-frgc4 IS INITIAL AND w_t16fs-frgc5 IS INITIAL.
* <dyn_field> = 'S'.
* ELSE.
* SELECT * UP TO 1 ROWS FROM t16fv
* INTO w_t16fv
* WHERE frggr = w_t16fs-frggr AND frgsx = w_t16fs-frgsx
* AND ( frga1 = '+' OR frga2 = '+' OR frga3 = '+'
* OR frga4 = '+' OR frga5 = '+' OR frga6 = '+' OR frga7 = '+'
* OR frga8 = '+' ).
* ENDSELECT.
* IF sy-subrc IS INITIAL.
* SELECT * UP TO 1 ROWS FROM t16fv
* INTO w_t16fv
* WHERE frggr = w_t16fs-frggr AND frgsx = w_t16fs-frgsx
* AND ( frga2 = 'X' AND frga1 = ' ' ).
* ENDSELECT.
* IF sy-subrc IS INITIAL.
* <dyn_field> = 'M2'.
* ELSE.
* <dyn_field> = 'S'.
* ENDIF.
* ELSE.
* <dyn_field> = 'R'.
* ENDIF.
* ENDIF.
* ENDIF.
* ENDLOOP.
* DATA: w_log TYPE s_log.
* IF t_log[] IS NOT INITIAL.
* LOOP AT t_log INTO w_log.
* READ TABLE <dyn_table> WITH KEY ('FRGGR') = w_log-frggr ('FRGSX')
* = w_log-frgsx
* TRANSPORTING NO FIELDS.
* IF sy-subrc IS NOT INITIAL.
* CREATE DATA dy_line LIKE LINE OF <dyn_table>.
* ASSIGN dy_line->* TO <dyn_wa>.
* ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
* <dyn_field> = w_log-frggr.
* ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa> TO <dyn_field>.
* <dyn_field> = w_log-frgsx.
* ASSIGN COMPONENT 'LOG_STATUS' OF STRUCTURE <dyn_wa> TO
*<dyn_field>.
* IF w_log-has_error IS NOT INITIAL.
* <dyn_field> = c_icon_led_red.
* ENDIF.
* APPEND <dyn_wa> TO <dyn_table>.
* ENDIF.
* ENDLOOP.
* ENDIF.
ENDFORM. " FILL_CURRENT
*&---------------------------------------------------------------------*
*& Form CALL_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_alv .
"log_system_stack.
ASSIGN dy_table->* TO <dyn_table>.
PERFORM adjust_field_cat.
PERFORM adjust_layout.
PERFORM adjust_filter.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* ir_salv_fullscreen_adapter = ref_grid.
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
e_grid = ref_grid.
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
IF ref_grid IS NOT INITIAL.
CALL METHOD ref_grid->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
* i_structure_name =
* is_variant =
* i_save =
* i_default = 'X'
is_layout = lvc_w_layout
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = <dyn_table>
it_fieldcatalog = lvc_t_fcat
* it_sort =
it_filter = lvc_t_filt
* EXCEPTIONS
* invalid_parameter_combination = 1
* program_error = 2
* too_many_lines = 3
* others = 4
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ELSE.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
i_callback_program = sy-cprog
i_callback_pf_status_set = 'SET_PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout_lvc = lvc_w_layout
it_fieldcat_lvc = lvc_t_fcat
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS_LVC =
* IT_SORT_LVC =
it_filter_lvc = lvc_t_filt
* IT_HYPERLINK =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT_LVC =
* IS_REPREP_ID_LVC =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP =
* I_HTML_HEIGHT_END =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO_LVC =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = <dyn_table>
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
ENDFORM. " CALL_ALV
*&---------------------------------------------------------------------*
*& Form ADJUST_FIELD_CAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM adjust_field_cat .
PERFORM set_field_cat_value USING :
"field check_value column value.
'FIELDNAME' 'FRGGR' 'ROLLNAME' 'FRGGR',
'FIELDNAME' 'FRGSX' 'ROLLNAME' 'FRGSX',
'FIELDNAME' 'FRGGR' 'KEY' 'X',
'FIELDNAME' 'FRGSX' 'KEY' 'X',
'FIELDNAME' 'FRGC1' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC2' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC3' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC4' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC5' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC6' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC7' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC8' 'ROLLNAME' 'FRGCO',
'FIELDNAME' 'FRGC1' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC2' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC3' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC4' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC5' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC6' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC7' 'EMPHASIZE' 'X',
'FIELDNAME' 'FRGC8' 'EMPHASIZE' 'X',
" 'FIELDNAME' 'MARK' 'NO_OUT' 'X',
'FIELDNAME' 'COLOR' 'NO_OUT' 'X',
'FIELDNAME' 'TYPE' 'NO_OUT' 'X',
'FIELDNAME' 'SCPR_HANDL' 'NO_OUT' 'X',
'FIELDNAME' 'DISPLAY' 'NO_OUT' 'X',
* 'FIELDNAME' 'SEQ' 'NO_OUT' 'X',
'FIELDNAME' 'LOG_STATUS' 'ICON' 'X',
'FIELDNAME' 'LOG_STATUS' 'OUTPUTLEN' '3',
'FIELDNAME' 'LOG_STATUS' 'SCRTEXT_S' 'Log',
'FIELDNAME' 'SEQ' 'SCRTEXT_S' 'Seq.',
'FIELDNAME' 'LOG_STATUS' 'NO_OUT' 'X',
'FIELDNAME' 'STATUS' 'NO_OUT' 'X'.
PERFORM set_field_cat_ekgrp.
PERFORM set_field_cat_curr.
PERFORM set_field_cat_class_descr.
ENDFORM. " ADJUST_FIELD_CAT
*&---------------------------------------------------------------------*
*& Form SET_FIELD_CAT_VALUE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELD text
* -->P_CHECK_VALUE text
* -->P_COLUMN text
* -->P_VALUE text
*----------------------------------------------------------------------*
FORM set_field_cat_value USING p_field p_check_value p_column p_value.
FIELD-SYMBOLS:
<dyn_wa>,
<dyn_field>.
DATA:
dy_line TYPE REF TO data.
FIELD-SYMBOLS: <lvc_s_fcat> TYPE lvc_s_fcat.
READ TABLE lvc_t_fcat ASSIGNING <lvc_s_fcat>
WITH KEY (p_field) = p_check_value.
CHECK sy-subrc IS INITIAL.
ASSIGN COMPONENT p_column OF STRUCTURE <lvc_s_fcat> TO <dyn_field>.
CHECK sy-subrc IS INITIAL.
<dyn_field> = p_value.
ENDFORM. " SET_FIELD_CAT_VALUE
*&---------------------------------------------------------------------*
*& Form SET_FIELD_CAT_EKGRP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_field_cat_ekgrp .
DATA: w_t024 TYPE t024,
fieldname TYPE lvc_fname.
LOOP AT t_t024 INTO w_t024.
CONCATENATE 'EKGRP_' w_t024-ekgrp INTO fieldname.
PERFORM set_field_cat_value USING:
'FIELDNAME' fieldname 'SCRTEXT_L' w_t024-ekgrp,
'FIELDNAME' fieldname 'SCRTEXT_M' w_t024-ekgrp,
'FIELDNAME' fieldname 'SCRTEXT_S' w_t024-ekgrp,
'FIELDNAME' fieldname 'OUTPUTLEN' 3.
ENDLOOP.
ENDFORM. " SET_FIELD_CAT_EKGRP
*&---------------------------------------------------------------------*
*& Form SET_FIELD_CAT_CURR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_field_cat_curr .
FIELD-SYMBOLS: <lvc_s_fcat> TYPE lvc_s_fcat.
DATA: len_curr TYPE i.
len_curr = v_curr_column_output_len + 1.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat> WHERE fieldname(5) =
'GNETW'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'OUTPUTLEN' len_curr,
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Valor'.
ENDLOOP.
CLEAR v_curr_column_output_len.
ENDFORM. " SET_FIELD_CAT_CURR
*&---------------------------------------------------------------------*
*& Form SET_FIELD_CAT_CLASS_DESCR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_field_cat_class_descr .
FIELD-SYMBOLS: <lvc_s_fcat> TYPE lvc_s_fcat.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname(5) = 'BSART'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Tipo'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname(5) = 'BSART'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Tip'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname(5) = 'BSTYP'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Cat'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'ZZDEPTO'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Depto',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_M' 'Depto',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_L' 'Depto'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'BUKRS'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Empr.',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_M' 'Empr',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_L' 'Empr'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'MATKL'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Gr.Merc.',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_M' 'Gr.Merc.',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_L' 'Gr.Merc.'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'GNETW'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Valor',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_M' 'Valor',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_L' 'Valor'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'DISPO'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Envio',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_M' 'Envio',
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_L' 'Envio'.
ENDLOOP.
LOOP AT lvc_t_fcat ASSIGNING <lvc_s_fcat>
WHERE fieldname = 'WERKS'.
PERFORM set_field_cat_value USING:
'FIELDNAME' <lvc_s_fcat>-fieldname 'SCRTEXT_S' 'Centro'.
ENDLOOP.
ENDFORM. " SET_FIELD_CAT_CLASS_DESCR
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->UCOMM text
* -->SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield.
DATA : ok_code TYPE sy-ucomm.
ok_code = ucomm.
CASE ok_code.
WHEN '&IC1'. "for double click on alv grid line
IF selfield-fieldname(4) = 'FRGC'.
CHECK v_file_uploaded IS INITIAL.
PERFORM reset_filter.
PERFORM filter_by_release_code USING selfield-value.
selfield-row_stable = selfield-col_stable = selfield-refresh =
'X'.
v_filtered = 'X'.
ENDIF.
IF selfield-fieldname = 'FRGGR'.
CHECK v_file_uploaded IS INITIAL.
PERFORM reset_filter.
PERFORM filter_by_release_group USING selfield-value.
selfield-row_stable = selfield-col_stable
= selfield-refresh = 'X'.
v_filtered = 'X'.
ENDIF.
DATA ref1 TYPE REF TO cl_gui_alv_grid.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = ref1.
CALL METHOD ref1->check_changed_data.
WHEN 'ZDOWN'.
PERFORM download_file.
selfield-row_stable = selfield-col_stable = selfield-refresh = 'X'.
WHEN 'ZUP'.
PERFORM upload_file.
PERFORM process_data.
PERFORM call_alv.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form set_pf_status
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
PERFORM load_tvarv_data.
DATA: t_tvarvc_name TYPE TABLE OF tvarvc,
w_tvarvc LIKE LINE OF t_tvarvc,
n_button(1) TYPE n,
pf_button(16) TYPE c,
f_code(10) TYPE c,
w_extab TYPE slis_extab.
FIELD-SYMBOLS:
<dyn_wa>,
<dyn_field>.
t_tvarvc_name[] = t_tvarvc[].
DELETE ADJACENT DUPLICATES FROM t_tvarvc_name COMPARING name.
SORT t_tvarvc_name BY name.
DO 5 TIMES.
n_button = sy-index.
CONCATENATE 'ZSEL' n_button INTO f_code.
READ TABLE t_tvarvc_name INDEX sy-index INTO w_tvarvc.
IF sy-subrc IS INITIAL.
DELETE rt_extab WHERE fcode = f_code.
CONCATENATE 'V_DISPLAY_SEL' n_button INTO pf_button.
ASSIGN (pf_button) TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
<dyn_field> = w_tvarvc-name+10(4).
ELSE.
CLEAR w_extab.
w_extab-fcode = f_code.
APPEND w_extab TO rt_extab.
ENDIF.
ENDDO.
DELETE rt_extab WHERE fcode = 'ZPROC'.
ASSIGN dy_table->* TO <dyn_table>.
IF v_file_uploaded IS INITIAL.
w_extab-fcode = 'ZPROC'.
APPEND w_extab TO rt_extab.
w_extab-fcode = 'ZREQ'.
APPEND w_extab TO rt_extab.
ELSE.
CLEAR w_extab-fcode.
* LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
* CHECK w_extab-fcode IS INITIAL.
* ASSIGN COMPONENT 'STATUS' OF STRUCTURE <dyn_wa> TO <dyn_field>.
* IF <dyn_field> IS NOT INITIAL.
* w_extab-fcode = 'ZPROC'.
* ENDIF.
* ENDLOOP.
* IF w_extab-fcode IS INITIAL.
* APPEND w_extab TO rt_extab.
* ENDIF.
w_extab-fcode = 'ZDOWN'.
APPEND w_extab TO rt_extab.
IF v_trkorr IS INITIAL.
v_display_request = 'Request'.
ELSE.
CONCATENATE 'Request: ' v_trkorr INTO v_display_request
RESPECTING BLANKS.
ENDIF.
ENDIF.
IF v_filtered IS INITIAL.
w_extab-fcode = 'ZNOFILTER'.
APPEND w_extab TO rt_extab.
ENDIF.
IF t_log[] IS NOT INITIAL.
w_extab-fcode = 'ZDOWN'.
APPEND w_extab TO rt_extab.
w_extab-fcode = 'ZUP'.
APPEND w_extab TO rt_extab.
ENDIF.
IF t_code[] IS INITIAL.
w_extab-fcode = 'ZCODE'.
APPEND w_extab TO rt_extab.
ENDIF.
SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
ENDFORM. "Set_pf_status
*&---------------------------------------------------------------------*
*& Form LOAD_TVARV_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_tvarv_data .
REFRESH t_tvarvc.
SELECT * FROM tvarvc INTO TABLE t_tvarvc
WHERE name LIKE 'ZMMR50230%' AND type = 'S'.
ENDFORM. " LOAD_TVARV_DATA
*&---------------------------------------------------------------------*
*& Form DOWNLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM download_file .
FIELD-SYMBOLS:
<dyn_wa>,
<dyn_field>.
DATA:
dy_line TYPE REF TO data.
DATA: ref_cl_abap_tabledescr TYPE REF TO cl_abap_tabledescr,
abap_keydescr_tab TYPE abap_keydescr_tab.
ASSIGN dy_table->* TO <dyn_table>.
TYPES: ty_line(20000) TYPE c.
DATA: field LIKE LINE OF abap_keydescr_tab,
line TYPE ty_line,
field_cat LIKE LINE OF lvc_t_fcat,
t_file_save TYPE TABLE OF ty_line.
CHECK <dyn_table> IS ASSIGNED.
ref_cl_abap_tabledescr ?= cl_abap_typedescr=>describe_by_data(
<dyn_table> ).
abap_keydescr_tab = ref_cl_abap_tabledescr->key.
DATA: fullpath TYPE string,
filename TYPE string,
path TYPE string,
user_action TYPE i,
encoding TYPE abap_encoding.
CALL METHOD cl_gui_frontend_services=>file_save_dialog
EXPORTING
window_title = 'Download'
"with_encoding = 'X'
"initial_directory = 'C:\'
CHANGING
filename = filename
path = path
fullpath = fullpath
user_action = user_action
file_encoding = encoding
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF user_action <> cl_gui_frontend_services=>action_ok.
EXIT.
ENDIF.
" Write Header
CLEAR line.
LOOP AT abap_keydescr_tab INTO field.
READ TABLE lvc_t_fcat INTO field_cat WITH KEY fieldname = field.
CHECK sy-subrc IS INITIAL.
IF field_cat-no_out IS INITIAL.
IF line IS INITIAL.
line = field.
ELSE.
CONCATENATE line c_tab field INTO line.
ENDIF.
ENDIF.
ENDLOOP.
APPEND line TO t_file_save.
" Write Data
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
CLEAR line.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
CHECK <dyn_field> = 'X'.
LOOP AT abap_keydescr_tab INTO field.
READ TABLE lvc_t_fcat INTO field_cat WITH KEY fieldname = field.
CHECK sy-subrc IS INITIAL.
IF field_cat-no_out IS INITIAL.
ASSIGN COMPONENT field OF STRUCTURE <dyn_wa> TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
IF line IS INITIAL.
line = <dyn_field>.
ELSE.
CONCATENATE line c_tab <dyn_field> INTO line.
ENDIF.
ENDIF.
ENDLOOP.
APPEND line TO t_file_save.
ENDLOOP.
DATA: length TYPE i.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = fullpath
filetype = 'ASC'
IMPORTING
filelength = length
TABLES
data_tab = t_file_save
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
ENDFORM. " DOWNLOAD_FILE
*&---------------------------------------------------------------------*
*& Form UPLOAD_FILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_file .
DATA:
fullpath TYPE string,
filename TYPE filetable,
path TYPE string,
user_action TYPE i,
rc TYPE i,
encoding TYPE abap_encoding,
field_cat LIKE LINE OF lvc_t_fcat.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title = 'Upload'
* default_extension =
* default_filename =
* file_filter =
* with_encoding =
* initial_directory =
* multiselection =
CHANGING
file_table = filename
rc = rc
user_action = user_action
"file_encoding = abap_encoding
EXCEPTIONS
file_open_dialog_failed = 1
cntl_error = 2
error_no_gui = 3
not_supported_by_gui = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA: string_filename TYPE string.
READ TABLE filename INDEX 1 INTO string_filename.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = string_filename
* FILETYPE = 'ASC'
* HAS_FIELD_SEPARATOR = ' '
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = ' '
* CODEPAGE = ' '
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* CHECK_BOM = ' '
* VIRUS_SCAN_PROFILE =
* NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH =
* HEADER =
TABLES
data_tab = t_file
EXCEPTIONS
file_open_error = 1
file_read_error = 2
no_batch = 3
gui_refuse_filetransfer = 4
invalid_type = 5
no_authority = 6
unknown_error = 7
bad_data_format = 8
header_not_allowed = 9
separator_not_allowed = 10
header_too_long = 11
unknown_dp_error = 12
access_denied = 13
dp_out_of_memory = 14
disk_full = 15
dp_timeout = 16
OTHERS = 17
.
IF sy-subrc IS INITIAL.
v_file_uploaded = 'X'.
CLEAR t_log[].
ELSE.
CLEAR v_file_uploaded.
ENDIF.
ENDFORM. " UPLOAD_FILE
*&---------------------------------------------------------------------*
*& Form ADJUST_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM adjust_layout .
CLEAR lvc_w_layout.
lvc_w_layout-info_fname = 'COLOR'.
lvc_w_layout-box_fname = 'MARK'.
lvc_w_layout-no_toolbar = 'X'.
"lvc_w_layout-ctab_fname = 'CELL'.
ENDFORM. " ADJUST_LAYOUT
*&---------------------------------------------------------------------*
*& Form FILL_NEW_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_new_data .
DATA: header TYPE string,
fields TYPE table_of_strings,
i_field TYPE i,
field TYPE string,
w_line TYPE string,
w_value TYPE string,
t_values TYPE table_of_strings,
dy_line TYPE REF TO data.
FIELD-SYMBOLS: <dyn_wa>,
<dyn_field>.
CHECK v_file_uploaded IS NOT INITIAL.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
READ TABLE t_file INDEX 1 INTO v_header.
DELETE t_file INDEX 1.
SPLIT v_header AT c_tab INTO TABLE fields.
LOOP AT t_file INTO w_line.
SPLIT w_line AT c_tab INTO TABLE t_values.
CHECK LINES( t_values ) > 8.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
LOOP AT fields INTO field.
i_field = sy-tabix.
READ TABLE t_values INTO w_value INDEX i_field.
CHECK sy-subrc IS INITIAL.
CHECK field IS NOT INITIAL.
ASSIGN COMPONENT field OF STRUCTURE <dyn_wa>
TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
IF field = 'FRGSX'.
DATA: frgsx TYPE frgsx.
frgsx = w_value.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = frgsx
IMPORTING
output = frgsx.
<dyn_field> = frgsx.
ELSE.
<dyn_field> = w_value.
ENDIF.
ENDLOOP.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <dyn_wa>
TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
<dyn_field> = 'N'.
APPEND <dyn_wa> TO <dyn_table>.
ENDLOOP.
" Get Characteristics from Class to check Lenght
" of Currency Fields.
DATA: w_characteristics LIKE LINE OF t_characteristics.
IF t_characteristics[] IS INITIAL.
DATA: classnum TYPE bapi1003_key-classnum.
PERFORM get_characteristics TABLES t_characteristics.
ENDIF.
IF v_classnum IS INITIAL.
ENDIF.
" Verify Lenght of Currency Fields
DATA: field_len TYPE i.
LOOP AT fields INTO field.
field_len = STRLEN( field ).
CHECK field_len >= 5.
READ TABLE t_characteristics INTO w_characteristics
WITH KEY table_field = field(5).
CHECK sy-subrc IS INITIAL.
CHECK w_characteristics-data_type = 'CURR'.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT field OF STRUCTURE <dyn_wa> TO <dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF '"' IN:
<dyn_field> WITH ''.
field_len = STRLEN( <dyn_field> ).
IF field_len > v_curr_column_output_len.
v_curr_column_output_len = field_len.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDFORM. " FILL_NEW_DATA
*&---------------------------------------------------------------------*
*& Form COMPARE_ALL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM compare_all_data .
DATA: w_t16fs TYPE t16fs,
w_type TYPE c.
FIELD-SYMBOLS: <dyn_wa>,
<dyn_check>,
<dyn_field>.
CHECK v_file_uploaded IS NOT INITIAL.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
" Search for new entries.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_type = <dyn_field>.
CHECK w_type = 'N'.
CLEAR w_t16fs.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_t16fs-frggr = <dyn_field>.
ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_t16fs-frgsx = <dyn_field>.
READ TABLE <dyn_table>
WITH KEY ('FRGGR') = w_t16fs-frggr ('FRGSX') = w_t16fs-frgsx
('TYPE') = 'C' TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
ASSIGN COMPONENT 'STATUS' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'NEW'.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'X'.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'C500'.
ENDIF.
ENDLOOP.
" Search for changes
DATA: v_old(20000) TYPE c,
v_new(20000) TYPE c.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_type = <dyn_field>.
CHECK w_type = 'C'.
v_old = <dyn_wa>.
CLEAR w_t16fs.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_t16fs-frggr = <dyn_field>.
ASSIGN COMPONENT 'FRGSX' OF STRUCTURE <dyn_wa> TO <dyn_field>.
w_t16fs-frgsx = <dyn_field>.
READ TABLE <dyn_table>
WITH KEY ('FRGGR') = w_t16fs-frggr ('FRGSX') = w_t16fs-frgsx
('TYPE') = 'N' ASSIGNING <dyn_check>.
IF sy-subrc IS INITIAL.
ASSIGN COMPONENT 'TYPE' OF STRUCTURE <dyn_check> TO <dyn_field>.
<dyn_field> = 'C'.
v_new = <dyn_check>.
<dyn_field> = 'N'.
IF v_old <> v_new.
ASSIGN COMPONENT 'STATUS' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'OLD'.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'C600'.
ASSIGN COMPONENT 'STATUS' OF STRUCTURE <dyn_check> TO
<dyn_field>.
<dyn_field> = 'MOD'.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_check> TO
<dyn_field>.
<dyn_field> = 'C300'.
ELSE.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <dyn_field>.
CLEAR <dyn_field>.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_check> TO
<dyn_field>.
CLEAR <dyn_field>.
ENDIF.
ELSE.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <dyn_field>.
CLEAR <dyn_field>.
ENDIF.
ENDLOOP.
DATA: l_field(5) TYPE c,
l_char(1) TYPE c,
w_code LIKE LINE OF t_code.
FIELD-SYMBOLS: <dy_frggr> TYPE ANY.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa> TO <dy_frggr>.
CHECK sy-subrc IS INITIAL.
DO 8 TIMES.
l_char = sy-index.
CONCATENATE 'FRGC' l_char INTO l_field.
ASSIGN COMPONENT l_field OF STRUCTURE <dyn_wa> TO <dyn_field>.
CHECK sy-subrc IS INITIAL.
CHECK <dy_frggr> IS NOT INITIAL.
CHECK <dyn_field> IS NOT INITIAL.
READ TABLE t_t16fc
WITH KEY frggr = <dy_frggr> frgco = <dyn_field>
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
CLEAR w_code.
w_code-frggr = <dy_frggr>.
w_code-frgco = <dyn_field>.
APPEND w_code TO t_code.
ENDIF.
ENDDO.
ENDLOOP.
ENDFORM. " COMPARE_ALL_DATA
*&---------------------------------------------------------------------*
*& Form ADJUST_FILTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM adjust_filter .
DATA: w_filter LIKE LINE OF lvc_t_filt.
REFRESH lvc_t_filt.
IF v_file_uploaded IS NOT INITIAL.
* w_filter-fieldname = 'STATUS'.
* w_filter-sign = 'E'.
* w_filter-option = 'EQ'.
* w_filter-low = ' '.
* APPEND w_filter TO lvc_t_filt.
* CLEAR w_filter.
* w_filter-fieldname = 'TYPE'.
* w_filter-sign = 'E'.
* w_filter-option = 'EQ'.
* w_filter-low = 'C'.
* APPEND w_filter TO lvc_t_filt.
ENDIF.
CLEAR w_filter.
w_filter-fieldname = 'DISPLAY'.
w_filter-sign = 'I'.
w_filter-option = 'EQ'.
w_filter-low = 'X'.
APPEND w_filter TO lvc_t_filt.
ENDFORM. " ADJUST_FILTER
*&---------------------------------------------------------------------*
*& Form RESET_FILTER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM reset_filter .
FIELD-SYMBOLS: <dyn_wa>,
<dyn_check>,
<dyn_field>.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <dyn_field>.
<dyn_field> = 'X'.
ENDLOOP.
ENDFORM. " RESET_FILTER
*&---------------------------------------------------------------------*
*& Form FILTER_BY_RELEASE_CODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SELFIELD_VALUE text
*----------------------------------------------------------------------*
FORM filter_by_release_code USING p_selfield_value.
FIELD-SYMBOLS: <dyn_wa>,
<dyn_check>,
<display>,
<frgc1>,
<frgc2>,
<frgc3>,
<frgc4>,
<frgc5>,
<dyn_field>.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <display>.
ASSIGN COMPONENT 'FRGC1' OF STRUCTURE <dyn_wa> TO <frgc1>.
ASSIGN COMPONENT 'FRGC2' OF STRUCTURE <dyn_wa> TO <frgc2>.
ASSIGN COMPONENT 'FRGC3' OF STRUCTURE <dyn_wa> TO <frgc3>.
ASSIGN COMPONENT 'FRGC4' OF STRUCTURE <dyn_wa> TO <frgc4>.
ASSIGN COMPONENT 'FRGC5' OF STRUCTURE <dyn_wa> TO <frgc5>.
IF <frgc1> = p_selfield_value
OR <frgc2> = p_selfield_value
OR <frgc3> = p_selfield_value
OR <frgc4> = p_selfield_value
OR <frgc5> = p_selfield_value.
<display> = 'X'.
ELSE.
CLEAR <display>.
ENDIF.
ENDLOOP.
ENDFORM. " FILTER_BY_RELEASE_CODE
*&---------------------------------------------------------------------*
*& Form FILTER_BY_RELEASE_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SELFIELD_VALUE text
*----------------------------------------------------------------------*
FORM filter_by_release_group USING p_selfield_value.
FIELD-SYMBOLS: <dyn_wa>,
<dyn_check>,
<display>,
<frggr>,
<dyn_field>.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
LOOP AT <dyn_table> ASSIGNING <dyn_wa>.
ASSIGN COMPONENT 'DISPLAY' OF STRUCTURE <dyn_wa> TO <display>.
ASSIGN COMPONENT 'FRGGR' OF STRUCTURE <dyn_wa> TO <frggr>.
IF <frggr> = p_selfield_value.
<display> = 'X'.
ELSE.
CLEAR <display>.
ENDIF.
ENDLOOP.
ENDFORM. " FILTER_BY_RELEASE_GROUP
*&---------------------------------------------------------------------*
*& Include ZMMR50230_CLASSIFICATION
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form GET_CLASSIFICATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_BAPI_NUMVALUES text
* -->P_BAPI_CHARVALUES text
* -->P_BAPI_CURRVALUES text
* -->P_W_T16FS_FRGGR text
* -->P_W_T16FS_FRGSX text
*----------------------------------------------------------------------*
FORM get_classification TABLES p_bapi_numvalues STRUCTURE
bapi1003_alloc_values_num
p_bapi_charvalues STRUCTURE bapi1003_alloc_values_char
p_bapi_currvalues STRUCTURE bapi1003_alloc_values_curr
USING p_frggr TYPE frggr
p_frgsx TYPE frgsx.
DATA: object_key LIKE bapi1003_key-object,
t_bapiret2 TYPE TABLE OF bapiret2.
CONCATENATE p_frggr p_frgsx INTO object_key RESPECTING BLANKS.
IF t_characteristics[] IS INITIAL.
PERFORM get_characteristics TABLES t_characteristics.
ENDIF.
IF v_classnum IS INITIAL.
DATA: w_t16fg LIKE LINE OF t_t16fg.
READ TABLE t_t16fg INTO w_t16fg INDEX 1.
CHECK sy-subrc IS INITIAL.
v_classnum = w_t16fg-frgkl.
ENDIF.
CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
EXPORTING
objectkey = object_key
objecttable = 'T16FS'
classnum = v_classnum
classtype = '032'
* KEYDATE = SY-DATUM
* UNVALUATED_CHARS = ' '
* LANGUAGE = SY-LANGU
* IMPORTING
* STATUS =
* STANDARDCLASS =
TABLES
allocvaluesnum = p_bapi_numvalues
allocvalueschar = p_bapi_charvalues
allocvaluescurr = p_bapi_currvalues
return = t_bapiret2.
ENDFORM. " GET_CLASSIFICATION
*&---------------------------------------------------------------------*
*& Form change_classification
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM change_classification
TABLES p_return STRUCTURE bapiret2
USING p_frggr TYPE frggr
p_frgsx TYPE frgsx.
DATA:
w_t16fg LIKE LINE OF t_t16fg,
object_key TYPE bapi1003_key-object,
t_numvalues_new TYPE TABLE OF bapi1003_alloc_values_num,
t_charvalues_new TYPE TABLE OF bapi1003_alloc_values_char,
t_currvalues_new TYPE TABLE OF bapi1003_alloc_values_curr,
w_numvalues_new LIKE LINE OF t_numvalues_new,
w_charvalue_new LIKE LINE OF t_charvalues_new,
w_currvalue_new LIKE LINE OF t_currvalues_new,
t_return TYPE TABLE OF bapiret2.
READ TABLE t_t16fg INDEX 1 INTO w_t16fg.
CONCATENATE p_frggr p_frgsx INTO object_key RESPECTING BLANKS.
DATA: t_bapi_char TYPE TABLE OF bapi_char,
w_bapi_char LIKE LINE OF t_bapi_char,
t_bapi_char_values TYPE TABLE OF bapi_char_values.
CALL FUNCTION 'BAPI_CLASS_GET_CHARACTERISTICS'
EXPORTING
classnum = w_t16fg-frgkl
classtype = '032'
* LANGU_ISO =
* LANGU_INT =
* KEY_DATE = SY-DATUM
* WITH_VALUES = 'X'
* IMPORTING
* RETURN =
TABLES
characteristics = t_bapi_char
char_values = t_bapi_char_values.
.
FIELD-SYMBOLS: <dyn_wa>, <dyn_field>.
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
DATA: cl_typedescr TYPE REF TO cl_abap_structdescr,
components TYPE abap_compdescr_tab,
column_name LIKE LINE OF components.
READ TABLE <dyn_table> ASSIGNING <dyn_wa>
WITH KEY ('FRGGR') = p_frggr ('FRGSX') = p_frgsx ('TYPE') = 'N'.
CHECK <dyn_wa> IS ASSIGNED.
cl_typedescr ?= cl_abap_typedescr=>describe_by_data( <dyn_wa> ).
components = cl_typedescr->components.
LOOP AT components INTO column_name.
READ TABLE t_bapi_char WITH KEY table_field = column_name-name(5)
INTO w_bapi_char.
IF sy-subrc IS INITIAL.
ASSIGN COMPONENT column_name-name OF STRUCTURE <dyn_wa> TO
<dyn_field>.
CHECK <dyn_field> IS ASSIGNED.
IF w_bapi_char-data_type = 'CHAR'.
CLEAR w_charvalue_new.
IF column_name-name(5) <> 'EKGRP'.
w_charvalue_new-charact = w_bapi_char-name_char.
w_charvalue_new-value_char = <dyn_field>.
IF w_charvalue_new-value_char IS NOT INITIAL.
APPEND w_charvalue_new TO t_charvalues_new.
ENDIF.
ELSE.
w_charvalue_new-charact = w_bapi_char-name_char.
w_charvalue_new-value_char = column_name-name+6(3).
IF <dyn_field> = 'X'.
APPEND w_charvalue_new TO t_charvalues_new.
ENDIF.
ENDIF.
ELSEIF w_bapi_char-data_type = 'CURR'.
CLEAR w_currvalue_new.
CHECK <dyn_field> IS NOT INITIAL.
CALL FUNCTION 'CTBP_CONVERT_VALUE_EXT_TO_INT'
EXPORTING
charactname = w_bapi_char-name_char
value_external = <dyn_field>
* CHARACTDETAIL =
* CLASSTYPE = ' '
* IV_NO_AUTHORITY_CHECK = ' '
IMPORTING
value_from = w_currvalue_new-value_from
value_to = w_currvalue_new-value_to
value_relation = w_currvalue_new-value_relation
EXCEPTIONS
no_authority = 1
charact_not_found = 2
wrong_data_type = 3
wrong_value = 4
wrong_input = 5
OTHERS = 6.
w_currvalue_new-charact = w_bapi_char-name_char.
APPEND w_currvalue_new TO t_currvalues_new.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BAPI_OBJCL_CHANGE'
EXPORTING
objectkey = object_key
objecttable = 'T16FS'
classnum = w_t16fg-frgkl
classtype = '032'
* STATUS = '1'
* STANDARDCLASS =
* CHANGENUMBER =
* KEYDATE = SY-DATUM
* NO_DEFAULT_VALUES = ' '
* IMPORTING
* CLASSIF_STATUS =
TABLES
allocvaluesnumnew = t_numvalues_new
allocvaluescharnew = t_charvalues_new
allocvaluescurrnew = t_currvalues_new
return = t_return.
.
READ TABLE t_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
ENDIF.
p_return[] = t_return[].
ENDFORM. "change_classification
*&---------------------------------------------------------------------*
*& Form GET_CHARACTERISTICS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_characteristics
TABLES p_t_characteristics STRUCTURE bapi_char.
DATA: bapi_char TYPE TABLE OF bapi_char,
w_t16fg LIKE LINE OF t_t16fg,
bapi_char_values TYPE TABLE OF bapi_char_values.
IF v_classnum IS INITIAL.
READ TABLE t_t16fg INTO w_t16fg INDEX 1.
CHECK sy-subrc IS INITIAL.
v_classnum = w_t16fg-frgkl.
ENDIF.
CALL FUNCTION 'BAPI_CLASS_GET_CHARACTERISTICS'
EXPORTING
classnum = v_classnum
classtype = '032'
* LANGU_ISO =
* LANGU_INT =
* KEY_DATE = SY-DATUM
* WITH_VALUES = 'X'
* IMPORTING
* RETURN =
TABLES
characteristics = bapi_char
char_values = bapi_char_values .
p_t_characteristics[] = bapi_char[].
ENDFORM. " GET_CHARACTERISTICS
*----------------------------------------------------------------------*
***INCLUDE ZMMR50230_DATA .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data.
PERFORM refresh_data.
" Get Release Strategy Group
SELECT t16fg~mandt t16fg~frggr t16fg~frgot t16fg~frgkl t16fg~frgfg
t16fh~frggt
INTO CORRESPONDING FIELDS OF TABLE t_t16fg
FROM t16fg INNER JOIN t16fh
ON t16fg~mandt = t16fh~mandt
AND t16fg~frggr = t16fh~frggr
WHERE t16fg~frgot = v_type
AND t16fh~spras = sy-langu.
" Get Relase Codes
SELECT t16fc~mandt t16fc~frggr t16fc~frgco t16fc~frgwf t16fd~frgct
t16fg~frgot
INTO CORRESPONDING FIELDS OF TABLE t_t16fc
FROM t16fc INNER JOIN t16fd
ON t16fc~mandt = t16fd~mandt
AND t16fc~frggr = t16fd~frggr
AND t16fc~frgco = t16fd~frgco
INNER JOIN t16fg
ON t16fg~mandt = t16fc~mandt
AND t16fg~frggr = t16fc~frggr.
DATA: w_t16fc LIKE LINE OF t_t16fc.
LOOP AT t_t16fc INTO w_t16fc.
READ TABLE t_t16fg WITH KEY frggr = w_t16fc-frggr
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
DELETE t_t16fc WHERE frggr = w_t16fc-frggr.
ENDIF.
ENDLOOP.
" Get Release Strategy
DATA: w_t16fs LIKE LINE OF t_t16fs.
SELECT t16fs~mandt t16fs~frggr t16fs~frgsx t16fs~frgc1 t16fs~frgc2
t16fs~frgc3 t16fs~frgc4
t16fs~frgc5 t16fs~frgc6 t16fs~frgc7 t16fs~frgc8 t16ft~frgxt
t16fg~frgot
INTO CORRESPONDING FIELDS OF TABLE t_t16fs
FROM t16fs INNER JOIN t16ft
ON t16fs~mandt = t16ft~mandt AND t16fs~frggr = t16ft~frggr
AND t16fs~frgsx = t16ft~frgsx
INNER JOIN t16fg
ON t16fg~mandt = t16fs~mandt
AND t16fg~frggr = t16fs~frggr.
LOOP AT t_t16fs INTO w_t16fs.
READ TABLE t_t16fg WITH KEY frggr = w_t16fs-frggr
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
DELETE t_t16fs WHERE frggr = w_t16fs-frggr.
ENDIF.
ENDLOOP.
" Get Release Status and Pre-Requisites
SELECT * FROM t16fk INTO TABLE t_t16fk
FOR ALL ENTRIES IN t_t16fg
WHERE frggr = t_t16fg-frggr.
" Get Release Classification
DATA: bapi_numvalues TYPE TABLE OF bapi1003_alloc_values_num,
w_bapi_numvalue TYPE bapi1003_alloc_values_num,
bapi_charvalues TYPE TABLE OF bapi1003_alloc_values_char,
w_bapi_charvalue TYPE bapi1003_alloc_values_char,
bapi_currvalues TYPE TABLE OF bapi1003_alloc_values_curr,
w_bapi_currvalue TYPE bapi1003_alloc_values_curr,
w_characteristics LIKE LINE OF t_characteristics.
DATA: w_charvalue TYPE s_charvalue,
w_numvalue TYPE s_numvalue,
w_currvalue TYPE s_currvalue,
entry TYPE i.
REFRESH: t_charvalues, t_numvalues, t_currvalues.
LOOP AT t_t16fs INTO w_t16fs.
PERFORM get_classification
TABLES bapi_numvalues bapi_charvalues bapi_currvalues
USING w_t16fs-frggr w_t16fs-frgsx.
SORT bapi_numvalues BY charact.
SORT bapi_charvalues BY charact.
SORT bapi_currvalues BY charact.
LOOP AT bapi_numvalues INTO w_bapi_numvalue.
AT NEW charact.
CLEAR entry.
ENDAT.
entry = entry + 1.
CLEAR w_numvalue.
MOVE-CORRESPONDING w_bapi_numvalue TO w_numvalue.
w_numvalue-frggr = w_t16fs-frggr.
w_numvalue-frgsx = w_t16fs-frgsx.
READ TABLE t_characteristics INTO w_characteristics
WITH KEY name_char = w_bapi_numvalue-charact.
IF sy-subrc IS INITIAL.
w_numvalue-table_field = w_characteristics-table_field.
ENDIF.
w_numvalue-entry = entry.
APPEND w_numvalue TO t_numvalues.
ENDLOOP.
LOOP AT bapi_charvalues INTO w_bapi_charvalue.
AT NEW charact.
CLEAR entry.
ENDAT.
entry = entry + 1.
CLEAR w_charvalue.
MOVE-CORRESPONDING w_bapi_charvalue TO w_charvalue.
w_charvalue-frggr = w_t16fs-frggr.
w_charvalue-frgsx = w_t16fs-frgsx.
READ TABLE t_characteristics INTO w_characteristics
WITH KEY name_char = w_bapi_charvalue-charact.
IF sy-subrc IS INITIAL.
w_charvalue-table_field = w_characteristics-table_field.
ENDIF.
w_charvalue-entry = entry.
APPEND w_charvalue TO t_charvalues.
ENDLOOP.
LOOP AT bapi_currvalues INTO w_bapi_currvalue.
AT NEW charact.
CLEAR entry.
ENDAT.
entry = entry + 1.
CLEAR w_currvalue.
MOVE-CORRESPONDING w_bapi_currvalue TO w_currvalue.
w_currvalue-frggr = w_t16fs-frggr.
w_currvalue-frgsx = w_t16fs-frgsx.
READ TABLE t_characteristics INTO w_characteristics
WITH KEY name_char = w_bapi_currvalue-charact.
IF sy-subrc IS INITIAL.
w_currvalue-table_field = w_characteristics-table_field.
ENDIF.
w_currvalue-entry = entry.
APPEND w_currvalue TO t_currvalues.
ENDLOOP.
ENDLOOP.
ENDFORM. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Form REFRESH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh_data .
REFRESH: t_t16fg, t_t16fc, t_t16fs, t_t16fk, t_t024, t_log, t_code,
t_currvalues , t_numvalues , t_charvalues, t_characteristics.
ENDFORM. " REFRESH_DATA
*&---------------------------------------------------------------------*
*& Form PREPARE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_data .
DATA: t_classification_work TYPE TABLE OF s_table_fields.
PERFORM get_fields_current.
PERFORM build_dytable_structure
TABLES t_classification_current
USING lvc_t_fcat.
PERFORM fill_current_data.
PERFORM sort_all_data.
PERFORM reset_filter.
ENDFORM. " PREPARE_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_DYTABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_dytable_structure TABLES p_t_classification LIKE
t_classification_current
USING lvc_t_fcat TYPE lvc_t_fcat..
DATA: xfc TYPE lvc_s_fcat,
ifc TYPE lvc_t_fcat,
num_field(3) TYPE n,
dd_x031l_table TYPE dd_x031l_table,
x031l TYPE x031l,
ref_cl_abap_elemdescr TYPE REF TO cl_abap_elemdescr,
w_classification LIKE LINE OF p_t_classification.
REFRESH ifc.
SORT p_t_classification BY data_element.
CLEAR w_classification.
w_classification-data_element = 'FRGGR'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 1 .
CLEAR w_classification.
w_classification-data_element = 'FRGSX'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 2 .
CLEAR w_classification.
w_classification-data_element = 'CHAR1'.
w_classification-column_name = 'TYPE'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 3.
CLEAR w_classification.
w_classification-data_element = 'CHAR4'.
w_classification-column_name = 'LOG_STATUS'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 4 .
CLEAR w_classification.
w_classification-data_element = 'CHAR3'.
w_classification-column_name = 'STATUS'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 5 .
CLEAR w_classification.
w_classification-data_element = 'NUMC3'.
w_classification-column_name = 'SEQ'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 6 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC1'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 7 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC2'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 8 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC3'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 9 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC4'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 10 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC5'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 11 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC6'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 12 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC7'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 13 .
CLEAR w_classification.
w_classification-data_element = 'FRGCO'.
w_classification-column_name = 'FRGC8'.
w_classification-columns = 0.
INSERT w_classification INTO p_t_classification INDEX 14.
CLEAR w_classification.
w_classification-data_element = 'CHAR1'.
w_classification-column_name = 'MARK'.
w_classification-columns = 0.
APPEND w_classification TO p_t_classification.
CLEAR w_classification.
w_classification-data_element = 'CHAR4'.
w_classification-column_name = 'COLOR'.
w_classification-columns = 0.
APPEND w_classification TO p_t_classification.
CLEAR w_classification.
w_classification-data_element = 'CHAR1'.
w_classification-column_name = 'DISPLAY'.
w_classification-columns = 0.
APPEND w_classification TO p_t_classification.
LOOP AT p_t_classification
INTO w_classification.
CLEAR xfc.
ref_cl_abap_elemdescr ?=
cl_abap_typedescr=>describe_by_name( w_classification-data_element
).
dd_x031l_table = ref_cl_abap_elemdescr->get_ddic_object( ).
READ TABLE dd_x031l_table INDEX 1 INTO x031l.
IF x031l-dtyp = 'CURR'.
ref_cl_abap_elemdescr ?= cl_abap_typedescr=>describe_by_name(
'ATWRT' ).
ENDIF.
CASE ref_cl_abap_elemdescr->type_kind.
WHEN 'C'.
xfc-datatype = 'CHAR'.
WHEN 'N'.
xfc-datatype = 'NUMC'.
WHEN 'D'.
xfc-datatype = 'DATE'.
WHEN 'P'.
xfc-datatype = 'PACK'.
WHEN OTHERS.
xfc-datatype = ref_cl_abap_elemdescr->type_kind.
ENDCASE.
xfc-inttype = ref_cl_abap_elemdescr->type_kind.
xfc-intlen = ref_cl_abap_elemdescr->length.
xfc-decimals = ref_cl_abap_elemdescr->decimals.
IF w_classification-column_name IS INITIAL.
xfc-fieldname = w_classification-data_element.
ELSE.
xfc-fieldname = w_classification-column_name.
ENDIF.
READ TABLE ifc WITH KEY fieldname = xfc-fieldname
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
APPEND xfc TO ifc.
ENDIF.
ENDLOOP.
DATA: fieldname TYPE lvc_fname,
insert_pos TYPE i.
insert_pos = LINES( ifc ).
insert_pos = insert_pos - 10.
CHECK ifc[] IS NOT INITIAL.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = ifc
i_length_in_byte = 'X' "added by Paul Robert Oct 28, 2009 17:04
IMPORTING
ep_table = dy_table.
lvc_t_fcat = ifc.
ENDFORM. " BUILD_DYTABLE
*&---------------------------------------------------------------------*
*& Form GET_FIELDS_CURRENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_fields_current .
DATA: w_numvalue LIKE LINE OF t_numvalues,
w_charvalue LIKE LINE OF t_charvalues,
w_currvalue LIKE LINE OF t_currvalues,
w_classification TYPE s_table_fields.
FIELD-SYMBOLS:
<classification> TYPE s_table_fields.
REFRESH t_classification_current.
LOOP AT t_numvalues INTO w_numvalue.
CLEAR w_classification.
w_classification-data_element = w_numvalue-table_field.
w_classification-columns = w_numvalue-entry.
APPEND w_classification TO t_classification_current.
ENDLOOP.
LOOP AT t_charvalues INTO w_charvalue.
CLEAR w_classification.
IF w_charvalue-table_field = 'WERKS'.
w_classification-data_element = 'WERKS_D'.
w_classification-column_name = 'WERKS'.
ELSEIF w_charvalue-table_field = 'ZZDEPTO'.
w_classification-data_element = 'CHAR10'.
w_classification-column_name = 'ZZDEPTO'.
ELSE.
w_classification-data_element = w_charvalue-table_field.
ENDIF.
APPEND w_classification TO t_classification_current.
ENDLOOP.
LOOP AT t_currvalues INTO w_currvalue.
CLEAR w_classification.
w_classification-data_element = w_currvalue-table_field.
w_classification-columns = w_currvalue-entry.
APPEND w_classification TO t_classification_current.
ENDLOOP.
ENDFORM. " GET_FIELDS_CURRENT
*&---------------------------------------------------------------------*
*& Form SORT_ALL_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sort_all_data .
ASSIGN dy_table->* TO <dyn_table>.
CHECK <dyn_table> IS ASSIGNED.
SORT <dyn_table> BY ('FRGGR') ('FRGSX') ('SEQ').
ENDFORM. " SORT_ALL_DATA
*&---------------------------------------------------------------------*
*& Form PROCESS_CHANGES
*&---------------------------------------------------------------------*
*& Form export_log
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM export_log.
EXPORT t_log TO MEMORY ID c_memory_id.
ENDFORM. "export_log
*&---------------------------------------------------------------------*
*& Form PROCESS_BAPI_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_RETURN text
* -->P_W_T16FS_FRGGR text
* -->P_W_T16FS_FRGSX text
*----------------------------------------------------------------------*
FORM process_bapi_log TABLES p_return STRUCTURE bapiret2
USING p_frggr TYPE frggr
p_frgsx TYPE frgsx.
DATA: w_log TYPE s_log.
CLEAR w_log.
w_log-frggr = p_frggr.
w_log-frgsx = p_frgsx.
w_log-type = 'B'.
DATA: cl_log TYPE REF TO support_log,
object TYPE balobj_d,
subobject TYPE balsubobj,
id TYPE balnrext.
object = 'LOG'.
subobject = 'PO_RELEASE'.
CONCATENATE p_frggr p_frgsx INTO id RESPECTING BLANKS .
CREATE OBJECT cl_log
EXPORTING
OBJECT = object
subobject = subobject
id = id.
CHECK cl_log IS BOUND.
w_log-ballog = cl_log->get_log_handler( ).
READ TABLE p_return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF sy-subrc IS INITIAL.
w_log-has_error = 'X'.
ELSE.
CLEAR w_log-has_error.
ENDIF.
APPEND w_log TO t_log.
DATA: return TYPE bapiret2.
LOOP AT p_return INTO return.
CALL METHOD
cl_log->log_message
EXPORTING
msgid = return-id
msgty = return-type
msgno = return-number
msgv1 = return-message_v1
msgv2 = return-message_v2
msgv3 = return-message_v3
msgv4 = return-message_v4.
ENDLOOP.
ENDFORM. " PROCESS_BAPI_LOG
*&---------------------------------------------------------------------*
*& Form PROCESS_SCPR_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_W_T16FS_FRGGR text
* -->P_W_T16FS_FRGSX text
* -->P_SCPR_HANDL text
*----------------------------------------------------------------------*
FORM process_scpr_log USING p_frggr TYPE frggr
p_frgsx TYPE frgsx
p_scpr_handl.
DATA: w_log TYPE s_log.
CLEAR w_log.
w_log-frggr = p_frggr.
w_log-frgsx = p_frgsx.
w_log-type = 'S'.
w_log-scprlog = p_scpr_handl.
DATA: w_scpracpm TYPE scpracpm.
SELECT * UP TO 1 ROWS FROM scpracpm
INTO w_scpracpm
WHERE msgty = 'E' AND act_id = p_scpr_handl.
ENDSELECT.
IF sy-subrc IS INITIAL.
w_log-has_error = 'X'.
ELSE.
CLEAR w_log-has_error.
ENDIF.
APPEND w_log TO t_log.
ENDFORM. " PROCESS_SCPR_LOG
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form log_full_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LOGGER text
* -->VALUE(MSGTY) text
* -->VALUE(MSGID) text
* -->VALUE(MSGNO) text
* -->VALUE(MSGV1) text
* -->VALUE(MSGV2) text
* -->VALUE(MSGV3) text
* -->VALUE(MSGV4) text
*----------------------------------------------------------------------*
FORM log_full_message USING
value(msgty) value(msgid) value(msgno)
value(msgv1) value(msgv2) value(msgv3) value(msgv4).
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
DATA: v_msgty TYPE syst-msgty,
v_msgid TYPE syst-msgid,
v_msgno TYPE syst-msgno,
v_msgv1 TYPE syst-msgv1,
v_msgv2 TYPE syst-msgv2,
v_msgv3 TYPE syst-msgv3,
v_msgv4 TYPE syst-msgv4.
CHECK msgid IS NOT INITIAL.
CHECK msgno IS NOT INITIAL.
CHECK msgty IS NOT INITIAL.
v_msgty = msgty.
v_msgid = msgid.
v_msgno = msgno.
v_msgv1 = msgv1.
v_msgv2 = msgv2.
v_msgv3 = msgv3.
v_msgv4 = msgv4.
logger->log_message(
msgid = v_msgid
msgno = v_msgno
msgty = v_msgty
msgv1 = v_msgv1
msgv2 = v_msgv2
msgv3 = v_msgv3
msgv4 = v_msgv4 ).
ENDFORM. "log_message
*&---------------------------------------------------------------------*
*& Form log_msg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(MESSAGE_REF) text
* -->VALUE(MSGV1) text
* -->VALUE(MSGV2) text
* -->VALUE(MSGV3) text
* -->VALUE(MSGV4) text
*----------------------------------------------------------------------*
FORM log_msg USING
value(message_ref) "'e000(salv_bs_msg)'
value(msgv1) value(msgv2) value(msgv3) value(msgv4).
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
DATA: pos_open TYPE i, pos_close TYPE i, length TYPE i.
FIND FIRST OCCURRENCE OF '(' IN message_ref MATCH OFFSET pos_open.
CHECK sy-subrc IS INITIAL.
FIND FIRST OCCURRENCE OF ')' IN message_ref MATCH OFFSET pos_close.
CHECK sy-subrc IS INITIAL.
pos_open = pos_open + 1.
length = pos_close - pos_open.
DATA: v_msgty TYPE syst-msgty,
v_msgid TYPE syst-msgid,
v_msgno TYPE syst-msgno,
v_msgv1 TYPE syst-msgv1,
v_msgv2 TYPE syst-msgv2,
v_msgv3 TYPE syst-msgv3,
v_msgv4 TYPE syst-msgv4.
v_msgty = message_ref(1).
v_msgid = message_ref+pos_open(length).
v_msgno = message_ref+1(3).
v_msgv1 = msgv1.
v_msgv2 = msgv2.
v_msgv3 = msgv3.
v_msgv4 = msgv4.
logger->log_message(
msgid = v_msgid
msgno = v_msgno
msgty = v_msgty
msgv1 = v_msgv1
msgv2 = v_msgv2
msgv3 = v_msgv3
msgv4 = v_msgv4 ).
ENDFORM. "Log_msg
*&---------------------------------------------------------------------*
*& Form log_string
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->LOGGER text
* -->VALUE(TEXT) text
*----------------------------------------------------------------------*
FORM log_text USING
value(text) TYPE c.
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
logger->log_text( text ).
ENDFORM. "log_string
*&---------------------------------------------------------------------*
*& Form log_system_stack
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM log_system_stack.
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
logger->log_system_stack( ).
ENDFORM. "log_system_stack
*&---------------------------------------------------------------------*
*& Form log_string
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(STRING_VALUE) text
*----------------------------------------------------------------------*
FORM log_string USING value(string_value) TYPE string.
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
logger->log_string( string_value ).
ENDFORM. "log_string
*&---------------------------------------------------------------------*
*& Form log_message_symsg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM log_message_symsg.
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
logger->log_message_symsg( ).
ENDFORM. "log_message_symsg
*&---------------------------------------------------------------------*
*& Form log_spool_close
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM log_spool_close.
DATA: logger TYPE REF TO support_log.
logger = support_log=>self_instance.
CHECK logger IS BOUND.
logger->spool_close( ).
ENDFORM. "log_spool_close
DEFINE log_full_message.
perform log_full_message using &1 &2 &3 &4 &5 &6 &7.
END-OF-DEFINITION.
DEFINE log_msg.
perform log_msg using &1 &2 &3 &4 &5.
END-OF-DEFINITION.
DEFINE log_system_stack.
perform log_system_stack.
END-OF-DEFINITION.
DEFINE log_string.
perform log_string using &1.
END-OF-DEFINITION.
DEFINE log_text.
perform log_text using &1.
END-OF-DEFINITION.
DEFINE log_symsg.
perform log_message_symsg.
END-OF-DEFINITION.
DEFINE log_spool_close.
perform log_spool_close.
END-OF-DEFINITION.
*&---------------------------------------------------------------------*
*& Form SET_TYPE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_type .
CASE 'X'.
WHEN p_rc.
v_type = '1'.
WHEN p_po.
v_type = '2'.
WHEN p_fs.
v_type = '3'.
ENDCASE.
ENDFORM. " SET_TYPE