Application Development and Automation 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: 
Read only

Editable ALV2

Former Member
0 Likes
424

Hi All ,

I am using an editable ALV to display , change and update the values in the database.

My requirement is that , the "Updation" part should be processed in background.

Now i know we have FMs JOB_OPEN , SUBMIT and CLOSE to process the request in BACKGROUND.

My Questions are

1. How can i pass an Internal table which has all the updated values to these function modules.

2. Should I make another program which will have these 3 FMs and they will the report , where updation is taking place or is it possible from a single program only.

Other than these FMs , solutions are welcome.

Please help me

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
375

Hi

U should create a your fm to update the database table, this fm should have the attributes UPDATE MODULE and IMMEDIATE START.

In this way u can call the fm with option in UPDATE TASK, the code to update the database will be done in background after calling the COMMIT.

This is my sample:

- I need to save the data of internal table T_ACTUAL_1 and T_ACTUAL_2 in the database as soon as the sales order is beeing saved.

The process has to run in background:

CALL FUNCTION 'Z_TXT_ACTUAL_SAVE' IN UPDATE TASK
     EXPORTING
          VBAK       = VBAK
          UPDATE     = _UPDKZ
     TABLES
          T_ACTUAL_1 = T_ACTUAL_1
          T_ACTUAL_2 = T_ACTUAL_2.

Of course all code I need to store the data in the database is in my function module:

FUNCTION Z_TXT_ACTUAL_SAVE.
*"----------------------------------------------------------------------
*"*"Function module di reg.:
*"
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(VBAK) TYPE  VBAK
*"     VALUE(UPDATE) TYPE  VBAPD-UPDKZ DEFAULT 'I'
*"  TABLES
*"      T_ACTUAL_1 STRUCTURE  ZTXT_ACTUAL
*"      T_ACTUAL_2 STRUCTURE  ZTXT_ACTUAL_2
*"----------------------------------------------------------------------

  CHECK NOT VBAK IS INITIAL.
* Se contatore:
  IF UPDATE <> UPDKZ_DELETE.
    IF UPDATE = UPDKZ_UP2_DEL1. "Aggiorna Actual2 elimina Actual1
* Si elimina il vecchio:
      DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                AND VKORG      = VBAK-VKORG
                                AND VKBUR      = VBAK-VKBUR
                                AND VBELN      = VBAK-VBELN.
    ELSE.
      DESCRIBE TABLE T_ACTUAL_1 LINES SY-TABIX.
      IF SY-TABIX > 0.

        CASE UPDATE.
          WHEN UPDKZ_OLD.
          WHEN UPDKZ_NEW.
            INSERT ZTXT_ACTUAL FROM TABLE T_ACTUAL_1.
          WHEN UPDKZ_UPDATE OR UPDKZ_UP1_DEL2.
* Si elimina il vecchio:
            DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                      AND VKORG      = VBAK-VKORG
                                      AND VKBUR      = VBAK-VKBUR
                                      AND VBELN      = VBAK-VBELN.
* Si inserisce il ricalcolo
            INSERT ZTXT_ACTUAL FROM TABLE T_ACTUAL_1.
*      WHEN UPDKZ_DELETE.
** Si elimina il vecchio:
*        DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
*                                  AND VKORG      = VBAK-VKORG
*                                  AND VKBUR      = VBAK-VKBUR
*                                  AND VBELN      = VBAK-VBELN.
        ENDCASE.

      ENDIF.
    ENDIF.

    IF UPDATE = UPDKZ_UP1_DEL2. "Aggiorna Actual1 elimina Actual2
* Si elimina il vecchio:
      DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                  AND VKORG      = VBAK-VKORG
                                  AND VKBUR      = VBAK-VKBUR
                                  AND VBELN      = VBAK-VBELN.
    ELSE.
      DESCRIBE TABLE T_ACTUAL_2 LINES SY-TABIX.
      IF SY-TABIX > 0.
        CASE UPDATE.
          WHEN UPDKZ_OLD.
          WHEN UPDKZ_NEW.
            INSERT ZTXT_ACTUAL_2 FROM TABLE T_ACTUAL_2.
          WHEN UPDKZ_UPDATE OR UPDKZ_UP2_DEL1.
* Si elimina il vecchio:
           DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                           AND VKORG      = VBAK-VKORG
                                           AND VKBUR      = VBAK-VKBUR
                                           AND VBELN      = VBAK-VBELN.
* Si inserisce il ricalcolo
            INSERT ZTXT_ACTUAL_2 FROM TABLE T_ACTUAL_2.
          WHEN UPDKZ_DELETE.
* Si elimina il vecchio:
           DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                           AND VKORG      = VBAK-VKORG
                                           AND VKBUR      = VBAK-VKBUR
                                           AND VBELN      = VBAK-VBELN.
        ENDCASE.

      ENDIF.
    ENDIF.
  ELSE.
* Si elimina il vecchio:
    DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                              AND VKORG      = VBAK-VKORG
                              AND VKBUR      = VBAK-VKBUR
                              AND VBELN      = VBAK-VBELN.
* Si elimina il vecchio:
    DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                AND VKORG      = VBAK-VKORG
                                AND VKBUR      = VBAK-VKBUR
                                AND VBELN      = VBAK-VBELN.
  ENDIF.
ENDFUNCTION.

Max

Hi All ,

I am using an editable ALV to display , change and update the values in the database.

My requirement is that , the "Updation" part should be processed in background.

Now i know we have FMs JOB_OPEN , SUBMIT and CLOSE to process the request in BACKGROUND.

My Questions are

1. How can i pass an Internal table which has all the updated values to these function modules.

2. Should I make another program which will have these 3 FMs and they will the report , where updation is taking place or is it possible from a single program only.

Other than these FMs , solutions are welcome.

Please help me

1 REPLY 1
Read only

Former Member
0 Likes
376

Hi

U should create a your fm to update the database table, this fm should have the attributes UPDATE MODULE and IMMEDIATE START.

In this way u can call the fm with option in UPDATE TASK, the code to update the database will be done in background after calling the COMMIT.

This is my sample:

- I need to save the data of internal table T_ACTUAL_1 and T_ACTUAL_2 in the database as soon as the sales order is beeing saved.

The process has to run in background:

CALL FUNCTION 'Z_TXT_ACTUAL_SAVE' IN UPDATE TASK
     EXPORTING
          VBAK       = VBAK
          UPDATE     = _UPDKZ
     TABLES
          T_ACTUAL_1 = T_ACTUAL_1
          T_ACTUAL_2 = T_ACTUAL_2.

Of course all code I need to store the data in the database is in my function module:

FUNCTION Z_TXT_ACTUAL_SAVE.
*"----------------------------------------------------------------------
*"*"Function module di reg.:
*"
*"*"Interfaccia locale:
*"  IMPORTING
*"     VALUE(VBAK) TYPE  VBAK
*"     VALUE(UPDATE) TYPE  VBAPD-UPDKZ DEFAULT 'I'
*"  TABLES
*"      T_ACTUAL_1 STRUCTURE  ZTXT_ACTUAL
*"      T_ACTUAL_2 STRUCTURE  ZTXT_ACTUAL_2
*"----------------------------------------------------------------------

  CHECK NOT VBAK IS INITIAL.
* Se contatore:
  IF UPDATE <> UPDKZ_DELETE.
    IF UPDATE = UPDKZ_UP2_DEL1. "Aggiorna Actual2 elimina Actual1
* Si elimina il vecchio:
      DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                AND VKORG      = VBAK-VKORG
                                AND VKBUR      = VBAK-VKBUR
                                AND VBELN      = VBAK-VBELN.
    ELSE.
      DESCRIBE TABLE T_ACTUAL_1 LINES SY-TABIX.
      IF SY-TABIX > 0.

        CASE UPDATE.
          WHEN UPDKZ_OLD.
          WHEN UPDKZ_NEW.
            INSERT ZTXT_ACTUAL FROM TABLE T_ACTUAL_1.
          WHEN UPDKZ_UPDATE OR UPDKZ_UP1_DEL2.
* Si elimina il vecchio:
            DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                      AND VKORG      = VBAK-VKORG
                                      AND VKBUR      = VBAK-VKBUR
                                      AND VBELN      = VBAK-VBELN.
* Si inserisce il ricalcolo
            INSERT ZTXT_ACTUAL FROM TABLE T_ACTUAL_1.
*      WHEN UPDKZ_DELETE.
** Si elimina il vecchio:
*        DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
*                                  AND VKORG      = VBAK-VKORG
*                                  AND VKBUR      = VBAK-VKBUR
*                                  AND VBELN      = VBAK-VBELN.
        ENDCASE.

      ENDIF.
    ENDIF.

    IF UPDATE = UPDKZ_UP1_DEL2. "Aggiorna Actual1 elimina Actual2
* Si elimina il vecchio:
      DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                  AND VKORG      = VBAK-VKORG
                                  AND VKBUR      = VBAK-VKBUR
                                  AND VBELN      = VBAK-VBELN.
    ELSE.
      DESCRIBE TABLE T_ACTUAL_2 LINES SY-TABIX.
      IF SY-TABIX > 0.
        CASE UPDATE.
          WHEN UPDKZ_OLD.
          WHEN UPDKZ_NEW.
            INSERT ZTXT_ACTUAL_2 FROM TABLE T_ACTUAL_2.
          WHEN UPDKZ_UPDATE OR UPDKZ_UP2_DEL1.
* Si elimina il vecchio:
           DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                           AND VKORG      = VBAK-VKORG
                                           AND VKBUR      = VBAK-VKBUR
                                           AND VBELN      = VBAK-VBELN.
* Si inserisce il ricalcolo
            INSERT ZTXT_ACTUAL_2 FROM TABLE T_ACTUAL_2.
          WHEN UPDKZ_DELETE.
* Si elimina il vecchio:
           DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                           AND VKORG      = VBAK-VKORG
                                           AND VKBUR      = VBAK-VKBUR
                                           AND VBELN      = VBAK-VBELN.
        ENDCASE.

      ENDIF.
    ENDIF.
  ELSE.
* Si elimina il vecchio:
    DELETE FROM ZTXT_ACTUAL WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                              AND VKORG      = VBAK-VKORG
                              AND VKBUR      = VBAK-VKBUR
                              AND VBELN      = VBAK-VBELN.
* Si elimina il vecchio:
    DELETE FROM ZTXT_ACTUAL_2 WHERE /TRILOG/SE = VBAK-/TRILOG/SE
                                AND VKORG      = VBAK-VKORG
                                AND VKBUR      = VBAK-VKBUR
                                AND VBELN      = VBAK-VBELN.
  ENDIF.
ENDFUNCTION.

Max