Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

DATA_CHANGED event handler is not triggered after input.(OO ALV)

Former Member
0 Kudos

Dear Experts,

What I did:

I register Enter as the trigger event for data_changed event, and I put my checking logic in data_changed_handler which is a method of a local class. When the checking fails, I put messages using er_data_changed->add_protocal_entry to show messages.

My checking is simple, if the cell is empty, error messages pops up tells that this cell can not be blank for this row.

My problem:

When there is no entry in the alv list(Only this situation), I insert a new entry, the cell which is required is empty, I press Enter, data_changed event is triggered, the message pops up saying that the cell is required. Then close the pop up message window, I input something in the cell, and press enter. The data_changed event is not triggered.

Is there any1 has any ideas on this problem?

Vicnent

Edited by: Changjiu Tan on Sep 7, 2009 1:33 PM

1 REPLY 1

Former Member
0 Kudos

  METHOD HANDLE_DATA_CHANGED.                               "#EC NEEDED

*<<<  BEGIN MODIFY EXAMPLE CODE
*   u4FDDu5B58u30C7u30FCu30BFu3092u7DE8u96C6u3059u308Bu3000START
    DATA: LW_INS      TYPE LVC_S_MOCE,
          LV_FNAME    TYPE LVC_FNAME,
          LW_MOD      TYPE LVC_S_MODI,
          LV_MAX      TYPE I,
          LV_RES(12)  TYPE C,
          LW_LIST     TYPE ZTSRE012,
          LV_ROWID    TYPE LVC_S_ROID,
          LT_MOD      TYPE LVC_T_MODI,
          LV_COLID    TYPE LVC_S_COL,

          LV_ROW_ID    TYPE LVC_S_ROW,
          LV_COL_ID    TYPE LVC_S_COL.

*   u73FEu5728u306Eu30D5u30A9u30FCu30ABu30B9u4F4Du7F6Eu3092u53D6u5F97
    CALL METHOD GO_ALV_GRID7->GET_CURRENT_CELL
      IMPORTING
        ES_ROW_ID = LV_ROW_ID
        ES_COL_ID = LV_COL_ID.

    LOOP AT GT_LIST INTO LW_LIST.
      IF LW_LIST-ID > LV_MAX.
        LV_MAX = LW_LIST-ID.
      ENDIF.
    ENDLOOP.
*   u30B0u30EBu30FCu30D7ID
    LV_FNAME = CNS_ID.
    LOOP AT ER_DATA_CHANGED->MT_INSERTED_ROWS INTO LW_INS.
      LV_MAX = LV_MAX + 1.
      CALL METHOD ER_DATA_CHANGED->MODIFY_CELL
        EXPORTING
          I_ROW_ID    = LW_INS-ROW_ID
          I_FIELDNAME = LV_FNAME
          I_VALUE     = LV_MAX.
    ENDLOOP.
    CLEAR: LV_FNAME.

    LT_MOD[] = ER_DATA_CHANGED->MT_GOOD_CELLS[].

*   u30C7u30FCu30BFu30C1u30A7u30C3u30AF
    LOOP AT LT_MOD INTO LW_MOD.
      IF LW_MOD-FIELDNAME = CNS_ZZTTSN.

        LV_COLID-FIELDNAME = LW_MOD-FIELDNAME.
        LV_ROWID-ROW_ID    = LW_MOD-ROW_ID.

        CALL METHOD GO_ALV_GRID7->SET_CURRENT_CELL_VIA_ID
          EXPORTING
            IS_COLUMN_ID = LV_COLID
            IS_ROW_NO    = LV_ROWID.

        CALL METHOD GO_ALV_GRID7->GET_CURRENT_CELL
          IMPORTING
            E_VALUE = LV_RES.

        IF LV_RES IS INITIAL.

          CALL METHOD ER_DATA_CHANGED->ADD_PROTOCOL_ENTRY
            EXPORTING
              I_MSGID     = CNS_MSGID
              I_MSGTY     = CNS_MSGTY
              I_MSGNO     = CNS_MSGNO
              I_FIELDNAME = LW_MOD-FIELDNAME
              I_ROW_ID    = LW_MOD-ROW_ID.
        ENDIF.
        CALL METHOD ER_DATA_CHANGED->MODIFY_CELL
          EXPORTING
            I_ROW_ID    = LW_MOD-ROW_ID
            I_FIELDNAME = LW_MOD-FIELDNAME
            I_VALUE     = LV_RES.
       ENDIF.
      CLEAR:  LV_RES,
              LV_COLID,
              LV_ROWID.
    ENDLOOP.

    CALL METHOD GO_ALV_GRID7->SET_CURRENT_CELL_VIA_ID
      EXPORTING
        IS_ROW_ID    = LV_ROW_ID
        IS_COLUMN_ID = LV_COL_ID.


  ENDMETHOD.                    "handle_data_changed

Edited by: Changjiu Tan on Sep 7, 2009 1:31 PM

Edited by: Changjiu Tan on Sep 7, 2009 1:32 PM