URGENTE - Dynpro en Objetos

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • javiercar
    Junior Member
    • oct
    • 18

    #1

    URGENTE - Dynpro en Objetos

    Hola necesito hacer lo siguiente :

    CHAIN.
    FIELD: i_alv_new-ricefwid,
    i_alv_new-vkorg,
    i_alv_new-param,
    i_alv_new-regid,
    i_alv_new-value.
    module validacion.
    ENDCHAIN.

    i_alv_new seria lo siguiente:

    CALL METHOD d_grid_new->set_table_for_first_display
    EXPORTING
    i_structure_name = 'ZQT_PARAM'
    is_layout = r_layout
    it_toolbar_excluding = i_exclude
    CHANGING
    it_fieldcatalog = i_fieldcat
    it_outtab = i_alv_new.


    no me deja poner ese chain endchain como puedo hacer para poder hacer las validaciones de cada linea de la tabla i_alv_new para q cuando ocurra un error me marque la linea en rojo y me grise las demas ???


    Gracias!.
    Cardozo Javier Hernan
    @r-Tech Consulting S.R.L.
    jcardozo@artech-consulting.com
    Ciudad de Buenos Aires
    Argentina
    www.artech-consulting.com
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    HOla ... dentro del ALV no se puede jugar con CHAIN o FIELD MODULE, supongo que tienes celda editables y en base al ingreso tiene q validar, xfa si es asi para copiarte un ejemplo ...
    David Carballido Córdova

    Comentario

    • javiercar
      Junior Member
      • oct
      • 18

      #3
      Si es como vos decis, tengo campos editables.
      Cardozo Javier Hernan
      @r-Tech Consulting S.R.L.
      jcardozo@artech-consulting.com
      Ciudad de Buenos Aires
      Argentina
      www.artech-consulting.com

      Comentario

      • DavidXD_XD
        Moderator
        • ago
        • 1255

        #4
        Primero lo primero ... creo dentro de las clases locales el evento handle_data_changed

        Código:
        [COLOR="Blue"]*----------------------------------------------------------------------*
        *    Definición de Clases (DEFINITION)
        *----------------------------------------------------------------------*[/COLOR]
        CLASS lcl_event_receiver DEFINITION.
        
          PUBLIC SECTION.
            METHODS:
              handle_double_click
                FOR EVENT DOUBLE_CLICK OF cl_gui_alv_grid
                  IMPORTING
                    e_row
                    e_column,
              handle_data_changed
                FOR EVENT data_changed OF cl_gui_alv_grid
                  IMPORTING
                    er_data_changed.
        
          PRIVATE SECTION.
          DATA: l_coddet TYPE ztfi_pdb_det_com-coddet.
        
        ENDCLASS.
        
        [COLOR="blue"]*----------------------------------------------------------------------*
        *    Definición de Clases (IMPLEMENTATION)
        *----------------------------------------------------------------------*[/COLOR]
        CLASS lcl_event_receiver IMPLEMENTATION.
        [COLOR="blue"]* Evento Double Click[/COLOR]
          METHOD handle_double_click.
            FIELD-SYMBOLS: <fs_exc> LIKE LINE OF t_exc.
            CASE sy-dynnr.
              WHEN 400.
                READ TABLE t_exc INDEX e_row-index ASSIGNING <fs_exc>.
              WHEN 500.
                READ TABLE t_neu INDEX e_row-index ASSIGNING <fs_exc>.
            ENDCASE.
            IF sy-subrc = 0.
              SET PARAMETER ID: 'BLN' FIELD <fs_exc>-belnr,
                                'BUK' FIELD <fs_exc>-bukrs,
                                'GJR' FIELD <fs_exc>-gjahr.
              CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
            ENDIF.
          ENDMETHOD.
        [COLOR="blue"]* Evento Data Changed[/COLOR]
          METHOD handle_data_changed.
        [COLOR="blue"]* Variables locales[/COLOR]
            FIELD-SYMBOLS: <fs_detrac> LIKE LINE OF t_detrac.
            LOOP AT er_data_changed->mt_good_cells INTO g_good.
              SELECT COUNT(*)
                FROM ztfi_pdb_det
                  WHERE coddet EQ g_good-value.
              IF sy-subrc = 0.
                READ TABLE t_detrac INDEX g_good-row_id ASSIGNING <fs_detrac>.
                IF sy-subrc = 0.
                  <fs_detrac>-icon = icon_led_green.
                ENDIF.
                UNASSIGN <fs_detrac>.
              ELSE.
                READ TABLE t_detrac INDEX g_good-row_id ASSIGNING <fs_detrac>.
                IF sy-subrc = 0.
                  <fs_detrac>-icon = icon_led_red.
                ENDIF.
                UNASSIGN <fs_detrac>.
              ENDIF.
            ENDLOOP.
          ENDMETHOD.
        
        ENDCLASS.
        Dentro del ALV q hice se insertaba un codigo de detraccion dentro de la celda del ALV, y cuando lo colocaba y pasaba a otra celda automaticamente pasaba por el codigo que coloque arriba para ver si el codigo que inserte se encuentra dentro de la tabla ztfi_pdb_det, colocaba dentro del campo icon el icono verde, y sino lo colocaba en rojo (Puedes pintarlos en vez de colocarle iconos de status), ahora el ALV lo forme de esta manera:

        Código:
        [COLOR="blue"]*&---------------------------------------------------------------------*
        *&      Form  status_600
        *&---------------------------------------------------------------------*
        *       Instanciando el grid para el screen 600
        *----------------------------------------------------------------------*[/COLOR]
        FORM status_600.
        
        [COLOR="blue"]* Variables Locales[/COLOR]
          DATA: ls_stbl_det TYPE lvc_s_stbl.
        
          IF g_container_600 IS INITIAL.
        [COLOR="blue"]* Instanciamos el container principal[/COLOR]
            CREATE OBJECT g_container_600
                EXPORTING
                    container_name = 'CONTAINER_600'.
        [COLOR="blue"]* Separamos el container en título y grid[/COLOR]
            IF g_top_600 IS INITIAL.
              CREATE OBJECT g_top_600
                  EXPORTING
                      style = 'ALV_GRID'.
            ENDIF.
        [COLOR="blue"]* Separamos en 2 filas el container principal[/COLOR]
            CREATE OBJECT g_splitter_600
                EXPORTING
                    parent  = g_container_600
                    rows    = 2
                    columns = 1.
        [COLOR="blue"]* Primer Splitter para el TOP OF PAGE[/COLOR]
            CALL METHOD g_splitter_600->get_container
                EXPORTING
                    row       = 1
                    column    = 1
                RECEIVING
                    container = g_parent_html_600.
        [COLOR="blue"]* Segundo splitter para el grid[/COLOR]
            CALL METHOD g_splitter_600->get_container
                EXPORTING
                    row       = 2
                    column    = 1
                RECEIVING
                    container = g_parent_grid_600.
        [COLOR="blue"]* Creando la instancia para el grid y enlazarla con el container[/COLOR]
            CREATE OBJECT g_grid_600
                EXPORTING
                    i_appl_events = 'X'
                    i_parent      = g_parent_grid_600.
        [COLOR="blue"]* Creando el catálogo y definiendo layout[/COLOR]
            PERFORM build_fieldcat_600.
            PERFORM build_layout.
            PERFORM build_sort_600.
        [COLOR="blue"]* Excluyendo botones[/COLOR]
            PERFORM exclude_button.
        [COLOR="blue"]* Construyendo cabecera[/COLOR]
            PERFORM top_of_page_600.
        
            CALL METHOD g_grid_600->set_table_for_first_display
                EXPORTING
                    it_toolbar_excluding = gt_exclude
                    is_layout            = gs_layout_600
                CHANGING
                    it_outtab            = t_detrac
                    it_fieldcatalog      = ti_fieldcat_600
                    it_sort              = ti_sort_600.
        [COLOR="blue"]* Adicionando evento ENTER[/COLOR]
            CALL METHOD g_grid_600->register_edit_event
                EXPORTING
                    i_event_id = cl_gui_alv_grid=>mc_evt_enter.
        [COLOR="blue"]* Evento que captura los cambios realizados[/COLOR]
            CALL METHOD g_grid_600->register_edit_event
                EXPORTING
                    i_event_id = cl_gui_alv_grid=>mc_evt_modified.
        [COLOR="blue"]* Instanciando el objeto que enlaza eventos y el grid[/COLOR]
            CREATE OBJECT g_event_receiver_600.
            SET HANDLER g_event_receiver_600->handle_data_changed
                        FOR g_grid_600.
          ELSE.
            CLEAR ls_stbl_det.
            ls_stbl_det-row = 'X'.
            ls_stbl_det-col = 'X'.
            CALL METHOD g_grid_600->refresh_table_display
                EXPORTING
                    is_stable  = ls_stbl_det.
          ENDIF.
        
        ENDFORM.                    " status_600
        La parte importante de este codigo es cuando se llama a los eventos de ENTER y q captura los cambios realizados, eso sirve para que no tengas que presionar ningun boton y automaticamente valide el campo que has ingresado en la celda cuando salgas de ella ... espero te pueda servir
        David Carballido Córdova

        Comentario

        • javiercar
          Junior Member
          • oct
          • 18

          #5
          Se puede ejecutar la validacion solo cuando se toca el Boton del status SAVE ???


          Gracias!
          Cardozo Javier Hernan
          @r-Tech Consulting S.R.L.
          jcardozo@artech-consulting.com
          Ciudad de Buenos Aires
          Argentina
          www.artech-consulting.com

          Comentario

          Trabajando...