
Varias veces a la semana necesito probar una parte de la codificación que no quiero incluir en el código de producción de inmediato.
Solía crear pequeños informes de prueba para experimentar con los fragmentos de código que necesito.
El problema con este enfoque fue que recopilé demasiados informes y nuestro desarrollo
La caja estaba repleta de informes ZEMA*.
Ahora recopilo todos mis volcados de cerebro en un solo informe. Nada de lujos en eso, ¿por qué iba a escribir sobre eso?
Estoy usando algunos pequeños trucos que también te pueden gustar, así que pensé que valía la pena compartirlos.
El nombre de mi informe de bloc de notas.
REPORT zematest.
TABLES pmmo_assignment.
TABLES sscrfields.
INCLUDE rpmmo_last_variant.
INCLUDE rpmmo_rtm_macros.
TYPES BEGIN OF ty_comp.
TYPES name TYPE c LENGTH 60.
TYPES END OF ty_comp.
TYPES ty_comp_tab TYPE STANDARD TABLE OF ty_comp.
DATA gt_tokens TYPE stokes_tab.
DATA gv_grpnr TYPE ps_posid.
DATA gv_class TYPE bdc_fval. "seoclsname.
DATA gv_subclass TYPE bdc_fval. "seoclsname.
DATA gv_method TYPE bdc_fval. "abap_methname.
DATA gv_stat TYPE j_status.
DATA gv_tst TYPE c LENGTH 50.
CLASS lcl_test DEFINITION DEFERRED.
SELECTION-SCREEN FUNCTION KEY 1. "for last used variant
PARAMETERS p_form TYPE char30.
PARAMETERS p_brk TYPE pmmo_assignment-objnr_brk MATCHCODE OBJECT zpmmo_break_point_coll_sh NO-DISPLAY.
SELECT-OPTIONS so_cron FOR pmmo_assignment-creationdatetime NO-DISPLAY.
SELECT-OPTIONS so_tst FOR gv_tst VISIBLE LENGTH 25 NO-DISPLAY.
SELECT-OPTIONS so_stat FOR gv_stat MATCHCODE OBJECT h_tj02 NO-DISPLAY.
SELECT-OPTIONS p_class FOR gv_class NO-DISPLAY.
Agrego OPCIONES DE SELECCIÓN y PARÁMETROS según sea necesario y cuando ya no los necesito, agrego la adición SIN VISUALIZACIÓN. De esa manera, mi pantalla de selección todavía se ve medio limpia.
La única pieza importante aquí es la definición de GT_TOKENS.
La magia sucede en el evento de INICIALIZACIÓN del informe.
INITIALIZATION.
lcl_last_variant=>get( ).
PERFORM get_default_form.
Ignoremos el código last_variant por ahora. Escribiré sobre eso en un post aparte.
El formulario GET_DEFAULT_FORM es donde se pone interesante:
FORM get_default_form.
DATA lt_source TYPE string_table.
DATA lt_statements TYPE sstmnt_tab.
DATA lt_keywords TYPE STANDARD TABLE OF char30.
DATA lt_report TYPE STANDARD TABLE OF sy-repid.
DATA lv_form TYPE c LENGTH 6.
lt_keywords = VALUE #( ( 'FORM' ) ).
READ REPORT sy-repid INTO lt_source.
SCAN ABAP-SOURCE lt_source
TOKENS INTO gt_tokens
STATEMENTS INTO lt_statements
FRAME PROGRAM FROM sy-repid
KEYWORDS FROM lt_keywords
WITH INCLUDES.
SORT gt_tokens BY str DESCENDING.
LOOP AT gt_tokens INTO DATA(ls_token).
lv_form = ls_token-str.
IF lv_form(4) = 'TEST'.
IF lv_form+4(2) CN '0123456789'.
DELETE gt_tokens.
ENDIF.
ELSE.
DELETE gt_tokens.
ENDIF.
ENDLOOP.
p_form = gt_tokens[ 1 ]-str.
ENDFORM.
El informe se escanea a sí mismo en busca de todas las rutinas FORM que están definidas. A continuación, elige el que tiene
el número más alto y lo mueve al PARÁMETRO P_FORM.
Para que esto funcione, sigo una cierta convención de nomenclatura para las rutinas FORM:
El nombre del FORMULARIO comienza con PRUEBA y va seguido de un número secuencial que cuento cada vez que pruebo algo nuevo.
Esto solo apoya mi pereza. Si quiero probar algo nuevo, solo creo un nuevo formulario y el informe es lo suficientemente inteligente como para saber que esto es con lo que quiero trabajar.
Si quiero probar otro FORM en su lugar, la ayuda F4 para el campo de rutina FORM también me permite hacerlo.
Aquí está el código para eso:
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_form.
PERFORM f4_form.
FORM f4_form.
TYPES BEGIN OF ty_form.
TYPES name TYPE char30.
TYPES END OF ty_form.
DATA lt_form TYPE STANDARD TABLE OF ty_form.
LOOP AT gt_tokens INTO DATA(ls_token).
APPEND ls_token-str TO lt_form.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'NAME'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'P_FORM'
window_title="Select a FORM routine for Testing"
value_org = 'S'
TABLES
value_tab = lt_form
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
ENDFORM.
La última pieza que falta:
START-OF-SELECTION.
lcl_last_variant=>save( ).
PERFORM (p_form) IN PROGRAM (sy-repid) IF FOUND.
Espero que disfruten de este pedacito de mi peculiaridad. Déjame saber cómo se ve tu bloc de notas y qué cosas geniales has encontrado para hacer que tu vida de programación sea más fácil y/o más agradable.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073