• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
Personal Insights

¿Qué aspecto tiene su bloc de notas?

By s4pcademy 


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.




aspectoblocnotasQuétiene

Artículos relacionados


#OdataV4  ·  #TypeScript  ·  flexible programming model  ·  Product Information
La actualización SAP Fiori tools 2302 tiene más para OData V4 y el modelo de programación flexible, mejor solución de problemas, más código abierto
Logistics
¿Qué es SAP Warehouse Robotics y cómo se integra con SAP EWM?
#ABAPCloud  ·  #EmbeddedSteampunk  ·  abap  ·  Personal Insights
Steampunk integrado: ¿qué hay debajo del capó? Parte I
Primeros pasos con abaplint | Blogs de SAP
Previo
HCM Brasil: Como filtrar entradas por número de empregado no Monitor de Eventos
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.