- REPORT zxx_prg_workbench.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Definición de Pantalla
- CONSTANTS c_vers TYPE string VALUE 'v1.06'.
- *--[ 1.01 - 20230526 Añadido F4 para grabar los que vamos utilizando y hacer búsquedas más rápidas
- *--[ 1.02 - 20230529 Corregido varios BUGS: CL_01 y Transación favoritos
- *--[ 1.03 - 20230530 Mejorado el filtro de las órdenes para optimizar + rendimiento + REPO Browser
- *--[ 1.04 - 20230531 +Cross Reference + Otimizaciones
- *--[ 1.05 - 20230601 +Mejoras en LEFT OUTER JOIN + Textos en F4
- *--[ 1.06 - 20230613 DUMP en TCODEs inexistentes + Evitar duplicados en TCODES + Nuevas TCODES
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT 01(10) t01.
- PARAMETERS: p_obj(255) LOWER CASE.
- SELECTION-SCREEN PUSHBUTTON 61(4) t03 USER-COMMAND cros.
- SELECTION-SCREEN PUSHBUTTON 66(12) t02 USER-COMMAND repo.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN SKIP 1.
- SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-t01.
- PARAMETERS: p_exec TYPE i AS LISTBOX VISIBLE LENGTH 100 USER-COMMAND vlis.
- PARAMETERS: p_FAVs TYPE i AS LISTBOX VISIBLE LENGTH 100 USER-COMMAND vfav.
- SELECTION-SCREEN END OF BLOCK b01.
- SELECTION-SCREEN SKIP 1.
- PARAMETERS: p_mode AS CHECKBOX DEFAULT abap_true.
- PARAMETERS: p_neww AS CHECKBOX DEFAULT abap_true.
- PARAMETERS: trkorr AS CHECKBOX DEFAULT abap_false.
- SELECTION-SCREEN SKIP 1.
- SELECTION-SCREEN COMMENT /01(40) g_vers.
- SELECTION-SCREEN FUNCTION KEY 1. "<-- De momento es la única que se utiliza
- SELECTION-SCREEN FUNCTION KEY 2.
- SELECTION-SCREEN FUNCTION KEY 3.
- SELECTION-SCREEN FUNCTION KEY 4.
- SELECTION-SCREEN FUNCTION KEY 5.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Definición de id_classs y variables
- TABLES: sscrfields. "<-- Para los botones en el PF-STATUS
- TYPE-POOLS: vrm. "<-- Para los LISTBOX
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Botones más habituales
- CONSTANTS: botones TYPE string VALUE
- 'SE11|SE16|SM30|SE38|SE37|SE24|SE18|SE09|SE91|SE93|SM37|SM35|SM50|ST22|SM21|SM12|SU53|SUIM|SU01|ST05|SAT|SXI_MONITOR|SMARTFORMS|SPROXY|CODE_SCANNER'.
- CLASS CL_Main DEFINITION DEFERRED. "<--- Más abajo
- TYPES: BEGIN OF ty_id_class,
- id_class(2), "<-- Será el código de la cláse
- euobj_id TYPE seu_obj, "<-- Código de Objeto
- objeto(15), "<--- Será el texto del código de la clase
- nombre(75), "<--- Obviamente será el nombre del objeto
- descr(100), "<--- La descripción del objeto
- END OF ty_id_class.
- TYPES: BEGIN OF ty_tcode, tcode TYPE tstc-tcode, END OF ty_tcode.
- DATA: list TYPE vrm_values,
- value LIKE LINE OF list,
- l_setname TYPE setnamenew,
- t_bots TYPE STANDARD TABLE OF ty_tcode,
- obj TYPE REF TO CL_Main.
- RANGES: r_favs FOR tstc-tcode.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Definiciones de Clase
- CLASS cl_root DEFINITION ABSTRACT. " Clase Principal
- PUBLIC SECTION.
- DATA: t_data TYPE STANDARD TABLE OF ty_id_class,
- p_find TYPE char255,
- t_bdc TYPE STANDARD TABLE OF bdcdata,
- G_modo TYPE sy-ucomm,
- g_neww TYPE xfeld,
- g_orden TYPE xfeld.
- DATA: r_prog TYPE RANGE OF seodescr,
- r_prog_D TYPE RANGE OF seodescr.
- METHODS:
- object_call ABSTRACT IMPORTING p_nombre TYPE any,
- object_cross ABSTRACT IMPORTING p_nombre TYPE any,
- object_call_default IMPORTING p_name TYPE any
- p_type TYPE any,
- object_cross_default IMPORTING p_name TYPE any
- p_type TYPE any,
- object_save IMPORTING p_name TYPE any,
- object_find.
- ENDCLASS.
- CLASS cl_root IMPLEMENTATION.
- METHOD object_save.
- DATA: l_leaf TYPE setleaf,
- l_leafd TYPE setleaf,
- l_leaft TYPE setlinet,
- l_dat TYPE sy-datum,
- l_datd TYPE sy-datum.
- l_leaf-setname = |ZWB_EXE_{ sy-uname }|.
- SELECT SINGLE lineid INTO @DATA(l_n) FROM setleaf WHERE setname = @l_leaf-setname AND valfrom = @p_name.
- IF sy-subrc EQ 0.
- l_leaf-lineid = l_n .
- ELSE.
- SELECT MAX( lineid ) INTO l_n FROM setleaf WHERE setname = l_leaf-setname.
- l_leaf-lineid = l_n + 1.
- ENDIF.
- l_leaf-setclass = '0000'. "<- NPI
- l_leaf-valsign = 'I'.
- l_leaf-valoption = 'EQ'.
- l_leaf-valfrom = p_name.
- l_leaf-valto = sy-datum.
- MODIFY setleaf FROM l_leaf.
- CLEAR l_leaft.
- MOVE-CORRESPONDING l_leaf TO l_leaft.
- l_leaft-langu = sy-langu.
- l_leaft-descript = me->t_data[ nombre = p_name ]-descr.
- MODIFY setlineT FROM l_leaft.
- l_datd = sy-datum - 90. "<-- 90 días de antiguedad
- *--[ Esto puede ser lento, pero es la única forma de comparar por fechas
- *--[ Borramos los antiguos
- SELECT * FROM setleaf INTO CORRESPONDING FIELDS OF l_leafd WHERE setname = l_leaf-setname.
- l_dat = l_leafd-valto.
- CHECK l_dat < l_datd.
- DELETE FROM setleaf WHERE setclass = l_leafd-setclass
- AND subclass = l_leafd-subclass
- AND setname = l_leafd-setname
- AND lineid = l_leafd-lineid.
- ENDSELECT.
- ENDMETHOD.
- METHOD object_call_default.
- DATA(l_modo) = g_MODO.
- IF p_name NP 'Z*' AND l_MODO = 'EDIT'. " Protección de edición
- l_modo = 'SHOW'.
- ENDIF.
- SELECT SINGLE * FROM t000 INTO @DATA(l_t000)
- WHERE mandt = @sy-mandt.
- *--[ No editamos si no estamos en desarrollo
- IF l_t000-CCCategory NE 'C'.
- l_modo = 'SHOW'.
- ELSE.
- object_save( p_name ).
- ENDIF.
- CALL FUNCTION 'RS_TOOL_ACCESS' "<-- Acceso directo
- EXPORTING
- operation = l_modo "EDIT / SHOW
- object_name = p_name
- object_type = p_type
- in_new_window = g_neww
- EXCEPTIONS
- not_executed = 0
- invalid_object_type = 0
- OTHERS = 0.
- ENDMETHOD.
- METHOD object_cross_default.
- CALL FUNCTION 'RS_TOOL_ACCESS' "<-- Acceso directo
- EXPORTING
- operation = 'CROSSREF'
- object_name = p_name
- object_type = p_type
- EXCEPTIONS
- not_executed = 0
- invalid_object_type = 0
- OTHERS = 0.
- ENDMETHOD.
- METHOD object_find.
- data(l_option) = COND #( WHEN me->p_find ca '*' THEN 'CP' ELSE 'EQ' ).
- r_prog = VALUE #( ( sign = 'I' option = l_option low = to_upper( me->p_find ) ) ).
- r_prog_d = VALUE #( ( sign = 'I' option = l_option low = me->p_find ) ).
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar programas.
- CLASS cl_1 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_1 IMPLEMENTATION.
- METHOD object_call.
- object_call_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_cross.
- object_cross_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- SELECT '01' AS id_class,
- CASE WHEN subc = '1' THEN 'PROG' ELSE 'INCL' END AS euobj_id,
- CASE WHEN subc = '1' THEN 'Programa' ELSE 'Include' END AS objeto,
- a~prog AS nombre,
- b~text AS descr
- FROM d010sinf AS a
- left OUTER join trdirt as b
- on b~name = a~prog and
- b~sprsl = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~prog IN @r_prog AND
- a~prog NOT LIKE '%=%' "<-- Eliminamos objetos de clases
- order by objeto DESCENDING, prog ASCENDING.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar funciones
- CLASS cl_2 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_2 IMPLEMENTATION.
- METHOD object_call.
- object_call_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_cross.
- object_cross_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- SELECT '02' AS id_class,
- 'FUNC' AS euobj_id,
- 'Función' AS objeto,
- a~funcname AS nombre,
- b~stext AS descr
- FROM tfdir AS a
- LEFT OUTER JOIN tftit AS b
- ON b~funcname = a~funcname and
- spras = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~funcname IN @r_prog OR b~stext IN @r_prog_d .
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar diccionario
- CLASS cl_3 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_3 IMPLEMENTATION.
- METHOD object_call.
- object_call_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_cross.
- object_CROSS_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Desdoblo la búsqueda para que vaya más rápido
- SELECT '03' AS id_class,
- 'TABD' AS euobj_id,
- case tabclass when 'TRANSP' then 'Tabla'
- when 'INTTAB' then 'Estructura'
- when 'VIEW' then 'Vista'
- when 'APPEND' then 'Append' END as objeto,
- a~tabname AS nombre,
- b~ddtext AS descr
- FROM dd02l AS a
- LEFT OUTER JOIN dd02t AS b
- ON b~tabname = a~tabname and
- b~ddlanguage = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~tabname IN @r_prog "OR b~ddtext IN @r_prog_d )
- and a~AS4LOCAL = 'A'
- and a~AS4VERS = '0000'
- order by a~tabclass, a~tabname.
- SELECT '03' AS id_class,
- 'TABD' AS euobj_id,
- case tabclass when 'TRANSP' then 'Tabla'
- when 'INTTAB' then 'Estructura'
- when 'VIEW' then 'Vista'
- when 'APPEND' then 'Append' END as objeto,
- a~tabname AS nombre,
- a~ddtext AS descr
- FROM dd02t AS a
- inner JOIN dd02l AS b
- ON b~tabname = a~tabname
- and a~AS4LOCAL = 'A'
- and a~AS4VERS = '0000'
- APPENDING CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~ddtext IN @r_prog_d
- order by b~tabclass, b~tabname.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar Clases
- CLASS cl_4 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_4 IMPLEMENTATION.
- METHOD object_call.
- object_call_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_cross.
- object_CROsS_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- SELECT '04' AS id_class,
- 'CLAS' AS euobj_id,
- 'Clase' AS objeto,
- a~clsname AS nombre,
- b~descript AS descr
- FROM seoclass AS a
- LEFT OUTER JOIN seoclasstx AS b
- ON b~clsname = a~clsname and
- b~langu = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~clsname IN @r_prog OR b~descript IN @r_prog_d.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar SMARTFORMS
- CLASS cl_5 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_5 IMPLEMENTATION.
- METHOD object_cross.
- ENDMETHOD.
- METHOD object_call.
- DATA: i_formname TYPE tdsfname,
- i_formtype TYPE tdsftype,
- i_with_dialog TYPE tdsfflag.
- i_formname = p_nombre.
- object_save( i_formname ).
- CALL FUNCTION 'FB_DISPLAY_FORM'
- EXPORTING
- i_formname = i_formname
- i_formtype = i_formtype
- i_with_dialog = space.
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- SELECT '05' AS id_class,
- 'SmartForm' AS objeto,
- a~formname AS nombre,
- b~caption AS descr
- FROM stxfadm AS a
- LEFT OUTER JOIN stxfadmt AS b
- ON b~formname = a~formname and
- b~langu = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~formname IN @r_prog OR b~caption IN @r_prog_d.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar Transacciones
- CLASS cl_6 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_6 IMPLEMENTATION.
- METHOD object_call.
- object_call_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_cross.
- object_cross_default( EXPORTING p_name = p_nombre p_type = me->t_data[ nombre = p_nombre ]-euobj_id ).
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- SELECT '06' AS id_class,
- 'TRAN' AS euobj_id,
- 'Transacción' AS objeto,
- a~tcode AS nombre,
- b~ttext AS descr
- FROM tstc AS a
- LEFT OUTER JOIN tstct AS b
- ON b~tcode = a~tcode and
- b~sprsl = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~tcode IN @r_prog OR b~ttext IN @r_prog_d.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Clase para buscar Transportes
- CLASS cl_7 DEFINITION INHERITING FROM cl_root.
- PUBLIC SECTION.
- METHODS: object_call REDEFINITION, object_cross REDEFINITION, object_find REDEFINITION.
- ENDCLASS.
- CLASS cl_7 IMPLEMENTATION.
- METHOD object_cross.
- ENDMETHOD.
- METHOD object_call.
- DATA: is_selection TYPE trwbo_selection.
- is_selection-trkorrpattern = p_nombre.
- CALL FUNCTION 'TR_SEARCH_AND_DISPLAY_REQUESTS'
- EXPORTING
- iv_username = '*'
- is_selection = is_selection
- iv_via_selscreen = abap_false
- iv_cua_status = 'TDR_TOOL'
- EXCEPTIONS
- action_aborted_by_user = 1
- OTHERS = 2.
- ENDMETHOD.
- METHOD object_find.
- super->object_find( ).
- CHECK g_orden = abap_true.
- SELECT '07' AS id_class,
- 'Transporte' AS objeto,
- a~trkorr AS nombre,
- a~pgmid && ' ' && a~object && ' ' && a~obj_name && '-' && b~as4text AS descr
- FROM e071 AS a
- LEFT OUTER JOIN e07t AS b
- ON b~trkorr = a~trkorr
- AND b~langu = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE a~trkorr IN @r_prog OR a~obj_name IN @r_prog OR b~as4text IN @r_prog_d
- ORDER BY a~trkorr DESCENDING.
- SELECT '07' AS id_class,
- 'Transporte' AS objeto,
- a~trkorr AS nombre,
- b~as4text AS descr
- FROM e070 AS a
- LEFT JOIN e07t AS b
- ON b~trkorr = a~trkorr
- APPENDING CORRESPONDING FIELDS OF TABLE @me->t_data
- WHERE ( a~trkorr IN @r_prog OR b~as4text IN @r_prog_d ) AND b~langu = @sy-langu
- ORDER BY a~trkorr DESCENDING.
- SORT me->t_data BY nombre DESCENDING.
- delete me->t_data where descr cp 'CORR RELE*'.
- ENDMETHOD.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Si necesitas añadir más id_classs de objetos con sus búsquedas y
- *--[ Sus llamadas, sólo tienes que crear más clases con el nombre:
- *--[ CL_nn
- CLASS CL_Main DEFINITION.
- PUBLIC SECTION.
- CONSTANTS C_limite TYPE i VALUE 200.
- TYPES: BEGIN OF ty_list,
- Objeto TYPE REF TO cl_root,
- END OF ty_list.
- DATA: t_data TYPE STANDARD TABLE OF ty_id_class,
- g_modo TYPE sy-ucomm.
- DATA: objeto_list TYPE STANDARD TABLE OF ty_list.
- METHODS: constructor IMPORTING p_modo TYPE xfeld
- p_neww TYPE xfeld,
- cross_me IMPORTING p_nombre TYPE any,
- find_me IMPORTING p_find TYPE any
- p_trkorr TYPE xfeld,
- display_data RETURNING VALUE(nombre) TYPE char255.
- PRIVATE SECTION.
- METHODS: find_me_now IMPORTING p_find TYPE any
- p_trkorr TYPE xfeld.
- ENDCLASS.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Implementación de CONTROL
- CLASS CL_Main IMPLEMENTATION.
- METHOD display_data.
- DATA: gs_selfield TYPE slis_selfield,
- gt_fieldcat TYPE slis_t_FIELDCAT_ALV,
- l_c TYPE i, l_s TYPE i,
- g_exit(1) TYPE c.
- CHECK lines( me->t_data ) > 1.
- LOOP AT me->T_data INTO DATA(l_data).
- IF l_c < strlen( l_data-nombre ). l_C = strlen( l_data-nombre ). ENDIF.
- IF L_s < strlen( l_data-descr ). l_s = strlen( l_data-descr ). ENDIF.
- AT LAST. L_c += 2. l_s += 2. ENDAT.
- ENDLOOP.
- gt_fieldcat = VALUE #( ( fieldname = 'ID_CLASS' outputlen = '10' seltext_l = 'ID Class' no_out = abap_true )
- ( fieldname = 'EUOBJ_ID' outputlen = '10' seltext_l = 'id_class' no_out = abap_true )
- ( fieldname = 'OBJETO' outputlen = '15' seltext_l = 'id_class Objeto' )
- ( fieldname = 'NOMBRE' outputlen = l_c seltext_l = 'Nombre del objeto' )
- ( fieldname = 'DESCR' outputlen = l_s seltext_l = 'Descripción' ) ).
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ ¡¡Por un POPUP HERMOSO!!
- DATA(l_lines) = lines( me->t_data ).
- IF l_lines > 30.
- l_lines = 30.
- ELSEIF l_lines < 10.
- l_lines += 8.
- ELSE.
- l_lines += 5.
- ENDIF.
- l_c += L_s + 25.
- CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
- EXPORTING
- i_title = 'Sólo puede quedar uno...'
- i_selection = abap_true
- i_zebra = abap_true
- i_screen_start_column = 5
- i_screen_start_line = 5
- i_screen_end_column = l_c
- i_screen_end_line = l_lines
- i_tabname = '1'
- it_fieldcat = gt_fieldcat[]
- IMPORTING
- es_selfield = gs_selfield
- e_exit = g_exit
- TABLES
- t_outtab = me->t_data[]
- EXCEPTIONS
- program_error = 1
- OTHERS = 2.
- CHECK NOT gs_selfield IS INITIAL.
- DATA(l_nada) = me->t_data[ gs_selfield-tabindex ].
- * READ TABLE me->t_data INTO DATA(l_nada) INDEX gs_selfield-tabindex.
- REFRESH me->t_data.
- APPEND l_nada TO me->t_data.
- ENDMETHOD.
- METHOD constructor.
- g_modo = COND #( WHEN p_modo = abap_true THEN 'EDIT' ELSE 'SHOW' ).
- DATA: lo_ref TYPE REF TO object.
- DO. "<--- repasamos todas las clases creadas
- DATA(l_name) = |CL_{ sy-index }|.
- TRY.
- CREATE OBJECT lo_ref TYPE (l_name).
- CATCH cx_root.
- EXIT. "<-- ya no hay más
- ENDTRY.
- APPEND INITIAL LINE TO me->objeto_list ASSIGNING FIELD-SYMBOL(<f>). <f>-Objeto ?= lo_ref.
- ASSIGN ('<F>-OBJETO->G_MODO') TO FIELD-SYMBOL(<fmodo>). <fmodo> = g_modo. "<-- ¡Trampa! Estas asignaciones de memoria
- ASSIGN ('<F>-OBJETO->G_ORDEN') TO FIELD-SYMBOL(<forden>). <forden> = trkorr.
- ASSIGN ('<F>-OBJETO->G_NEWW') TO FIELD-SYMBOL(<fNEWW>). <fneww> = p_neww.
- ENDDO.
- ENDMETHOD.
- METHOD cross_me.
- DATA: tmp TYPE REF TO cl_root.
- find_me_now( EXPORTING p_find = p_nombre p_trkorr = abap_false ).
- CHECK lines( me->t_data ) = 1.
- tmp ?= me->objeto_list[ me->t_data[ 1 ]-id_class ]-objeto.
- tmp->object_cross( me->t_data[ 1 ]-nombre ).
- ENDMETHOD.
- METHOD find_me_now.
- DATA: tmp TYPE REF TO cl_root.
- REFRESH me->t_data.
- LOOP AT me->objeto_list INTO DATA(l_list).
- tmp ?= l_list-objeto.
- tmp->p_find = p_find.
- tmp->object_find( ).
- CHECK NOT tmp->t_data IS INITIAL.
- APPEND LINES OF tmp->t_data TO me->t_data.
- IF p_trkorr NE abap_true. "<-- Eliminamos las ordenes de transporte
- DELETE me->t_data WHERE id_class = '07'.
- ENDIF.
- CHECK lines( me->t_data ) > C_limite.
- MESSAGE s398(00) WITH 'Demasiadas' 'coincidencias,' 'afina.' '' DISPLAY LIKE 'E'.
- EXIT.
- ENDLOOP.
- display_data( ).
- ENDMETHOD.
- METHOD find_me.
- DATA: tmp TYPE REF TO cl_root.
- find_me_now( EXPORTING p_find = p_find p_trkorr = P_TRKORR ).
- DATA(l_lines) = lines( me->t_data ). "<-- Asignado a var, para ahorrar cíclos
- CHECK l_lines < C_limite.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Sí sólo encontramos uno, lo ejecutamos directamente
- CHECK l_lines = 1.
- tmp = me->objeto_list[ me->t_data[ l_lines ]-id_class ]-objeto.
- tmp->object_call( me->t_data[ l_lines ]-nombre ).
- ENDMETHOD.
- ENDCLASS.
- INITIALIZATION.
- PERFORM eve_initialization.
- AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_obj.
- PERFORM call_F4.
- AT SELECTION-SCREEN.
- PERFORM eve_at_selection_screen.
- END-OF-SELECTION.
- PERFORM eve_end_of_selection.
- FORM eve_end_of_selection.
- CREATE OBJECT obj EXPORTING p_modo = p_mode p_neww = p_neww.
- obj->find_me( EXPORTING p_find = p_obj p_trkorr = trkorr ).
- ENDFORM.
- FORM call_listbox.
- CHECK p_exec IS NOT INITIAL OR p_favs IS NOT INITIAL.
- DATA(code) = COND tcode( WHEN sscrfields-ucomm = 'VLIS' THEN t_bots[ p_exec ] ELSE t_bots[ p_favs ] ).
- CHECK NOT code IS INITIAL.
- CLEAR: p_exec, p_favs.
- CALL FUNCTION 'COPF_CALL_TRANSACTION'
- EXPORTING
- tcode = code
- new_session = abap_true.
- ENDFORM.
- FORM call_repo.
- CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
- EXPORTING
- object_type = 'P'
- suppress_selection = 'X'
- variant = 'SAP&MAIN'
- IMPORTING
- object_name_selected = p_obj
- EXCEPTIONS
- cancel = 1
- wrong_type = 2
- OTHERS = 3.
- ENDFORM.
- FORM call_f4.
- TYPES: BEGIN OF ty_f4,
- valfrom TYPE setleaf-valfrom,
- valto TYPE setleaf-valto,
- descript TYPE setlinet-descript,
- END OF ty_f4.
- DATA: t_tab TYPE STANDARD TABLE OF ty_f4,
- lt_return TYPE TABLE OF ddshretval WITH HEADER LINE.
- DATA(l_name) = |ZWB_EXE_{ sy-uname }|.
- SELECT a~valfrom, a~valto, b~descript FROM setleaf AS a
- LEFT OUTER JOIN setlinet AS b
- ON b~setname = a~setname AND
- b~lineid = a~lineid AND
- b~langu = @sy-langu
- INTO CORRESPONDING FIELDS OF TABLE @t_tab
- WHERE a~setname = @l_name
- ORDER BY valto DESCENDING.
- CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
- EXPORTING
- retfield = 'VALFROM'
- value_org = 'S'
- * window_title = ''
- TABLES
- value_tab = t_tab
- return_tab = lt_return
- EXCEPTIONS
- parameter_error = 1
- no_values_found = 2
- OTHERS = 3.
- p_obj = lt_return-fieldval.
- ENDFORM.
- FORM eve_initialization.
- t01 = |Objeto|.
- t02 = |@13@ Browser Repo|.
- t03 = |@3A@|.
- g_vers = c_vers.
- sscrfields-functxt_01 = |Editar FAVoritos|.
- data(l_uname) = sy-uname. "<- Para DEbugs
- SPLIT botones AT '|' INTO TABLE DATA(t_bots2). APPEND LINES OF t_bots2 TO t_bots.
- DATA(l_n) = lines( t_bots ). "<-- Normales
- l_setname = |ZWB_FAV_{ l_uname }|.
- DATA(m_bots) = t_bots[]. REFRESH m_bots.
- SELECT valfrom AS tcode
- FROM setleaf APPENDING TABLE m_bots
- WHERE setname = l_setname.
- SELECT report AS tcode FROM smen_buffc APPENDING TABLE m_bots
- WHERE uname = l_uname
- AND reporttype = 'TR'.
- SORT m_bots.
- DELETE ADJACENT DUPLICATES FROM m_bots.
- loop at t_bots into data(l_vot).
- read table m_bots TRANSPORTING NO FIELDS with key tcode = l_vot-tcode.
- check sy-subrc eq 0.
- delete m_bots index sy-tabix.
- endloop.
- APPEND LINES OF m_bots TO t_bots.
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *--[ Transacciones de sistema + Favoritos
- LOOP AT t_bots INTO DATA(l_bot).
- AT FIRST.
- SELECT * FROM tstct
- INTO TABLE @DATA(t_trans)
- FOR ALL ENTRIES IN @t_bots
- WHERE sprsl = @sy-langu AND tcode = @t_bots-tcode.
- ENDAT.
- DATA(l_tabix) = sy-tabix.
- try.
- DATA(l_trans) = t_trans[ tcode = l_bot-tcode ].
- catch cx_root.
- delete t_bots index l_tabix.
- continue.
- ENDTRY.
- list = VALUE #( BASE list ( text = |{ l_trans-tcode } - { l_trans-ttext }|
- key = l_tabix ) ).
- IF l_tabix = l_n.
- CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'P_EXEC' values = list.
- REFRESH list.
- ENDIF.
- AT LAST.
- CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'P_FAVS' values = list.
- ENDAT.
- ENDLOOP.
- ENDFORM.
- FORM eve_at_selection_screen.
- CASE sscrfields-ucomm.
- WHEN 'FC01'. SET PARAMETER ID 'GSE' FIELD l_setname. CALL TRANSACTION 'GS02'.
- WHEN 'CROS'. CREATE OBJECT obj EXPORTING p_modo = p_mode p_neww = p_neww.
- obj->cross_me( EXPORTING p_nombre = p_obj ).
- WHEN 'REPO'. PERFORM call_repo.
- WHEN 'VLIS' OR 'VFAV'. PERFORM call_listbox.
- ENDCASE.
- ENDFORM.
Última modificación de la página el 13 June 2023 a las 05h32
Powered by
PmWiki