REPORT znadar_xx_crear_orden.
TABLES: sscrfields, usr01.
TABLES: ko013.
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME.
PARAMETERS: p_text TYPE text30 LOWER CASE OBLIGATORY DEFAULT 'XX:WB'.
PARAMETERS: p_DESC TYPE as4text LOWER CASE,
p_prog TYPE versobjnam OBLIGATORY,
*--[ Si no pones versión, irá a buscar la que le toca en la gestión de versiones
p_vers TYPE n LENGTH 3.
SELECTION-SCREEN END OF BLOCK b01.
SELECT-OPTIONS: p_users FOR usr01-bname OBLIGATORY.
*--[ Permite buscar si ha sido metido en una orden y continuar con su descripción
SELECTION-SCREEN FUNCTION KEY 1.
TYPES: BEGIN OF ty_St,
text(56),
colo(1),
vers(3),
END OF ty_st.
DATA: l_desc TYPE as4text,
lt_attributes TYPE scts_attrs,
lt_users TYPE scts_users,
l_users TYPE scts_user,
l_vers TYPE n LENGTH 3,
l_mask TYPE ty_st,
ps_new_request TYPE trwbo_request_header,
pt_new_tasks TYPE trwbo_request_headers.
DATA: gr_table TYPE REF TO cl_salv_table.
TYPES: BEGIN OF ty_text,
as4text TYPE e07t-as4text,
END OF ty_text.
DATA: t_ord TYPE STANDARD TABLE OF ty_text.
AT SELECTION-SCREEN.
DATA: t_return TYPE STANDARD TABLE OF ddshretval.
CASE sscrfields-ucomm.
WHEN 'FC01'.
CHECK NOT p_prog IS INITIAL.
DATA(l_obj_name) = '%' && p_prog && '%'.
SELECT * FROM e071 AS a
INNER JOIN e070 AS b
ON b~trkorr = a~trkorr OR
b~strkorr = a~trkorr
INNER JOIN e07t AS c ON
c~trkorr = b~TRKorr
INTO CORRESPONDING FIELDS OF TABLE @t_ord
WHERE obj_name LIKE @l_OBJ_NAME AND
langu = @sy-langu.
SORT t_ord DESCENDING.
DELETE ADJACENT DUPLICATES FROM t_ord.
DATA: lr_content TYPE REF TO cl_salv_form_element.
DATA: lr_selections TYPE REF TO cl_salv_selections.
cl_salv_table=>factory(
EXPORTING
list_display = 'X'
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = t_ord ).
gr_table->set_screen_popup(
start_column = 1
end_column = 100
start_line = 1
end_line = 20 ).
lr_selections = gr_table->get_selections( ).
lr_selections->set_selection_mode( if_salv_c_selection_mode=>row_column ).
gr_table->display( ).
DATA(lo_selections) = gr_table->get_selections( ).
DATA(lt_rows) = lo_selections->get_selected_rows( ).
LOOP AT lt_rows INTO DATA(l_row).
READ TABLE t_ord INTO DATA(l_ord) INDEX l_row.
p_desc = l_ord-as4text.
EXIT.
ENDLOOP.
WHEN OTHERS.
*--[ Ayuda automágica
IF p_vers IS INITIAL.
SELECT * FROM vrsd INTO TABLE @DATA(t_vers)
WHERE objname = @p_prog.
IF sy-subrc EQ 0.
p_vers = lines( t_vers ).
ENDIF.
ENDIF.
ENDCASE.
INITIALIZATION.
MOVE '@13@ Buscar objeto' TO sscrfields-functxt_01.
p_users-sign = 'I'.
p_users-option = 'EQ'.
p_users-low = sy-uname. APPEND p_users.
end-of-SELECTION.
IF p_vers IS INITIAL.
SELECT * FROM vrsd INTO TABLE @DATA(t_vers)
WHERE objname = @p_prog.
IF sy-subrc EQ 0.
l_vers = lines( t_vers ).
ELSE.
l_vers = '001'.
ENDIF.
ELSE.
l_vers = p_vers.
ENDIF.
CONCATENATE p_text p_desc INTO l_desc SEPARATED BY ':'.
REPLACE ALL OCCURRENCES OF '::' IN l_desc WITH ':'.
REPLACE ALL OCCURRENCES OF ' :' IN l_desc WITH ':'.
REPLACE ALL OCCURRENCES OF ': ' IN l_desc WITH ':'.
CONDENSE l_desc.
l_mask-text = l_desc.
l_mask-colo = ':'.
l_mask-vers = l_vers.
l_desc = l_mask.
SELECT * FROM usr01 INTO TABLE @DATA(l_usr01)
WHERE bname IN @p_users.
LOOP AT l_usr01 INTO DATA(l_sus).
l_users-user = l_sus-bname. l_users-type = 'X'. APPEND l_users TO lt_users.
ENDLOOP.
IF lines( lt_users ) = 0.
l_users-user = sy-uname. l_users-type = 'X'. APPEND l_users TO lt_users.
ENDIF.
CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
EXPORTING
iv_type = 'K'
iv_text = l_desc
iv_target = 'IS4'
it_attributes = lt_attributes
it_users = lt_users
iv_tardevcl = ko013-tardevcl
iv_devclass = ko013-devclass
iv_tarlayer = ko013-tarlayer
iv_repoid = ko013-repoid
iv_with_badi_check = 'X'
IMPORTING
es_request_header = ps_new_request
et_task_headers = pt_new_tasks
EXCEPTIONS
insert_failed = 1
enqueue_failed = 2
OTHERS = 3.
IF sy-subrc EQ 0.
MESSAGE s398(00) WITH 'Orden creada'.
ELSE.
MESSAGE s398(00) WITH 'Fallo en orden'.
ENDIF.
LEAVE TO SCREEN 0.