ALV por correo

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • CRISTINO.GARCIA
    Senior Member
    • ago
    • 101

    #1

    ALV por correo

    Buenas a todos.
    Armé un ALV con la función REUSE_ALV_GRID_DISPLAY y tengo una columna
    como checkbox.

    Ahora necesito que al seleccionar alguna fila con el check se ejecute una accion por ejemplo me pregunte si deseo imprimir la informacion o enviarla por email .

    ¿Qué me está faltando?
    Muchas gracias.

    Aqui esta el codigo que estoy utilizando.

    Código:
    REPORT ZTEST_ALV_CHECK MESSAGE-ID ZZ .
    TYPE-POOLS: SLIS.
    DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
          IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          L_LAYOUT TYPE SLIS_LAYOUT_ALV,
          X_EVENTS TYPE SLIS_ALV_EVENT,
          IT_EVENTS TYPE SLIS_T_EVENT.
    
    DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
    
    DATA: BEGIN OF ITAB OCCURS 0,
                RQIDENT LIKE TSP01-RQIDENT,
                RQOWNER LIKE TSP01-RQOWNER,
                CHK(1),
                COLOR(4),
    END OF ITAB.
    
    SELECT RQIDENT RQOWNER
      FROM TSP01
     UP TO 20 ROWS
       INTO TABLE ITAB
      WHERE rqowner  EQ sy-uname
        AND rqclient EQ sy-mandt
    ORDER BY rqident.
    
    
    X_FIELDCAT-FIELDNAME = 'CHK'.
    X_FIELDCAT-SELTEXT_L = 'CHECK BOX'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 1.
    X_FIELDCAT-INPUT = 'X'.
    X_FIELDCAT-EDIT = 'X'.
    X_FIELDCAT-CHECKBOX = 'X'.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    
    
    CLEAR X_FIELDCAT.
    X_FIELDCAT-FIELDNAME = 'RQIDENT'.
    X_FIELDCAT-SELTEXT_L = 'NRO SPOOL'.
    X_FIELDCAT-HOTSPOT = 'X'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 2.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    
    
    CLEAR X_FIELDCAT.
    X_FIELDCAT-FIELDNAME = 'RQOWNER'.
    X_FIELDCAT-SELTEXT_L = 'USUARIO'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 3.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    CLEAR X_FIELDCAT.
    L_LAYOUT-info_fieldname = 'COLOR'.
    *L_LAYOUT-ZEBRA = 'X'.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
       I_CALLBACK_PROGRAM = SY-REPID
       IS_LAYOUT = L_LAYOUT
       I_CALLBACK_PF_STATUS_SET = 'STATUS'
       I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
       IT_FIELDCAT = IT_FIELDCAT
    TABLES
       T_OUTTAB = ITAB
    EXCEPTIONS
       PROGRAM_ERROR = 1
    OTHERS = 2.
       IF SY-SUBRC = 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
       ENDIF.
    
    
    *&---------------------------------------------------------------------
    *& Form STATUS
    *&---------------------------------------------------------------------
    *text
    *----------------------------------------------------------------------
    *-->P_EXTAB text
    *----------------------------------------------------------------------
    FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
    *Pf status
    SET PF-STATUS 'STATUS'.
    ENDFORM. " STATUS
    *&---------------------------------------------------------------------
    *& Form USER_COMMAND
    *&---------------------------------------------------------------------
    *text
    *----------------------------------------------------------------------
    *-->R_UCOMM text
    *-->RS_SELFIELD text
    *----------------------------------------------------------------------
    FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
    RS_SELFIELD TYPE SLIS_SELFIELD.
    DATA: GD_REPID LIKE SY-REPID, "Exists
          REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
          IF REF_GRID IS INITIAL.
             CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
             IMPORTING
                 E_GRID = REF_GRID.
          ENDIF.
          IF NOT REF_GRID IS INITIAL.
             CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
          ENDIF.
          loop at itab where chk = 'X'.
               itab-color = 'C300'.
               modify itab index sy-tabix transporting color.
          endloop.
          RS_SELFIELD-refresh = 'X'.
          break-point.
    ENDFORM. "USER_COMMAND
  • mauro_ARG
    Member
    • abr
    • 87

    #2
    Originalmente publicado por CRISTINO.GARCIA
    Buenas a todos.
    Armé un ALV con la función REUSE_ALV_GRID_DISPLAY y tengo una columna
    como checkbox.

    Ahora necesito que al seleccionar alguna fila con el check se ejecute una accion por ejemplo me pregunte si deseo imprimir la informacion o enviarla por email .

    ¿Qué me está faltando?
    Muchas gracias.

    Aqui esta el codigo que estoy utilizando.

    Código:
    REPORT ZTEST_ALV_CHECK MESSAGE-ID ZZ .
    TYPE-POOLS: SLIS.
    DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
          IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
          L_LAYOUT TYPE SLIS_LAYOUT_ALV,
          X_EVENTS TYPE SLIS_ALV_EVENT,
          IT_EVENTS TYPE SLIS_T_EVENT.
    
    DATA: GS_LAYOUT TYPE SLIS_LAYOUT_ALV.
    
    DATA: BEGIN OF ITAB OCCURS 0,
                RQIDENT LIKE TSP01-RQIDENT,
                RQOWNER LIKE TSP01-RQOWNER,
                CHK(1),
                COLOR(4),
    END OF ITAB.
    
    SELECT RQIDENT RQOWNER
      FROM TSP01
     UP TO 20 ROWS
       INTO TABLE ITAB
      WHERE rqowner  EQ sy-uname
        AND rqclient EQ sy-mandt
    ORDER BY rqident.
    
    
    X_FIELDCAT-FIELDNAME = 'CHK'.
    X_FIELDCAT-SELTEXT_L = 'CHECK BOX'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 1.
    X_FIELDCAT-INPUT = 'X'.
    X_FIELDCAT-EDIT = 'X'.
    X_FIELDCAT-CHECKBOX = 'X'.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    
    
    CLEAR X_FIELDCAT.
    X_FIELDCAT-FIELDNAME = 'RQIDENT'.
    X_FIELDCAT-SELTEXT_L = 'NRO SPOOL'.
    X_FIELDCAT-HOTSPOT = 'X'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 2.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    
    
    CLEAR X_FIELDCAT.
    X_FIELDCAT-FIELDNAME = 'RQOWNER'.
    X_FIELDCAT-SELTEXT_L = 'USUARIO'.
    X_FIELDCAT-TABNAME = 'ITAB'.
    X_FIELDCAT-COL_POS = 3.
    APPEND X_FIELDCAT TO IT_FIELDCAT.
    CLEAR X_FIELDCAT.
    L_LAYOUT-info_fieldname = 'COLOR'.
    *L_LAYOUT-ZEBRA = 'X'.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
       I_CALLBACK_PROGRAM = SY-REPID
       IS_LAYOUT = L_LAYOUT
       I_CALLBACK_PF_STATUS_SET = 'STATUS'
       I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
       IT_FIELDCAT = IT_FIELDCAT
    TABLES
       T_OUTTAB = ITAB
    EXCEPTIONS
       PROGRAM_ERROR = 1
    OTHERS = 2.
       IF SY-SUBRC = 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
       ENDIF.
    
    
    *&---------------------------------------------------------------------
    *& Form STATUS
    *&---------------------------------------------------------------------
    *text
    *----------------------------------------------------------------------
    *-->P_EXTAB text
    *----------------------------------------------------------------------
    FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
    *Pf status
    SET PF-STATUS 'STATUS'.
    ENDFORM. " STATUS
    *&---------------------------------------------------------------------
    *& Form USER_COMMAND
    *&---------------------------------------------------------------------
    *text
    *----------------------------------------------------------------------
    *-->R_UCOMM text
    *-->RS_SELFIELD text
    *----------------------------------------------------------------------
    FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
    RS_SELFIELD TYPE SLIS_SELFIELD.
    DATA: GD_REPID LIKE SY-REPID, "Exists
          REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
          IF REF_GRID IS INITIAL.
             CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
             IMPORTING
                 E_GRID = REF_GRID.
          ENDIF.
          IF NOT REF_GRID IS INITIAL.
             CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
          ENDIF.
          loop at itab where chk = 'X'.
               itab-color = 'C300'.
               modify itab index sy-tabix transporting color.
          endloop.
          RS_SELFIELD-refresh = 'X'.
          break-point.
    ENDFORM. "USER_COMMAND
    Porque tenes esto:?
    L_LAYOUT-info_fieldname = 'COLOR'.

    No lo veo definido en el catalogo?. Y no veo definido en el layout el campo itab-chk, que es el que controla los que fila fue cambiada.

    Otra cosa: no podes tener las dos cosas en el ALV, es decir no podes marcar las las fila con color y ademas utilizar uncheck box para controlar que fila fue seleccionada. Si queres tener ambas funcionalidades, tenes que utilizar la clase CL_ALV_GRID. Pero con funciones no se puede.

    Comentario

    • CRISTINO.GARCIA
      Senior Member
      • ago
      • 101

      #3
      Hola Amigo, lo del color no importa lo que me interesa es que al seleccionar con el CHECK me permita preguntar si desea imprimir o enviar por correo?

      Gracias

      Cristino

      Originalmente publicado por mauro_ARG
      Porque tenes esto:?
      L_LAYOUT-info_fieldname = 'COLOR'.

      No lo veo definido en el catalogo?. Y no veo definido en el layout el campo itab-chk, que es el que controla los que fila fue cambiada.

      Otra cosa: no podes tener las dos cosas en el ALV, es decir no podes marcar las las fila con color y ademas utilizar uncheck box para controlar que fila fue seleccionada. Si queres tener ambas funcionalidades, tenes que utilizar la clase CL_ALV_GRID. Pero con funciones no se puede.

      Comentario

      • mauro_ARG
        Member
        • abr
        • 87

        #4
        Originalmente publicado por CRISTINO.GARCIA
        Hola Amigo, lo del color no importa lo que me interesa es que al seleccionar con el CHECK me permita preguntar si desea imprimir o enviar por correo?

        Gracias

        Cristino
        tenes que agregar en la definicion del layout el campo itab-chk entonces, y elimina la linea en donde definis el color.

        l_layout-box_fieldname = 'CHK'.

        Comentario

        Trabajando...