2008 Feb 28 3:29 PM
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
2008 Feb 28 3:34 PM
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
2008 Feb 28 3:34 PM
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