2012 Sep 04 2:08 PM
Dear abapers,
i have faced a problem in module pool. i have create a normal screen and also create 4 i/p fields in it.
my code is:
DATA DECLARATION.
PROGRAM SAPMZCHAINEXITCOMMAND.
DATA: VBELN TYPE VBELN_VA,
BUKRS TYPE BUKRS,
EBELN TYPE EBELN VALUE '4500036',
MATNR TYPE MATNR VALUE '2201'.
DATA: BEGIN OF IT1 OCCURS 0,
VBELN TYPE VBELN_VA,
END OF IT1.
DATA: BEGIN OF IT2 OCCURS 0,
BUKRS TYPE BUKRS,
END OF IT2.
DATA: BEGIN OF IT3 OCCURS 0,
EBELN TYPE EBELN,
END OF IT3.
DATA: BEGIN OF IT4 OCCURS 0,
MATNR TYPE MATNR,
END OF IT4.
SCREEN-FLOWLOGIC.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0001.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
*ENDCHAIN.
*CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
MODULE MOD AT EXIT-COMMAND.
MODULE USER_COMMAND_0001.
INCLUDE MZCHAINEXITCOMMANDTOP . " global Data
* INCLUDE MZCHAINEXITCOMMANDO01 . " PBO-Modules
* INCLUDE MZCHAINEXITCOMMANDI01 . " PAI-Modules
* INCLUDE MZCHAINEXITCOMMANDF01 . " FORM-Routines
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0001 INPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
LEAVE TO LIST-PROCESSING.
WRITE😕 'HI'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0001 INPUT
*&---------------------------------------------------------------------*
*& Module MOD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
" MOD INPUT
*&---------------------------------------------------------------------*
*& Module MOD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " MOD INPUT
*&---------------------------------------------------------------------*
*& Module MOD_INP INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD_INP INPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
SELECT VBELN FROM VBAK INTO TABLE IT1 WHERE VBELN = VBELN.
SELECT BUKRS FROM EKKO INTO TABLE IT2 WHERE BUKRS = BUKRS.
IF IT1[] IS INITIAL.
MESSAGE 'SALES ORDER DOES NOT EXIST' TYPE 'E'.
ENDIF.
IF IT2[] IS INITIAL.
MESSAGE 'COMPANY CODE DOES NOT EXIST' TYPE 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " MOD_INP INPUT
*&---------------------------------------------------------------------*
*& Module MOD_REQ INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD_REQ INPUT.
SELECT EBELN FROM EKKO INTO TABLE IT3 WHERE EBELN = EBELN.
SELECT MATNR FROM MARA INTO TABLE IT4 WHERE MATNR = MATNR.
IF IT3[] IS INITIAL.
MESSAGE 'PURCHASE ORDER DOES NOT EXIST' TYPE 'E'.
ENDIF.
IF IT4[] IS INITIAL.
MESSAGE 'MATERIAL NO DOES NOT EXIST' TYPE 'E'.
ENDIF.
ENDMODULE.
i dont change i/p field ebeln and matnr value in screen. but
(FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.) when i debug my code i watch that
this module is also trigger. as definition i know, when we change initial value of a i/p field then on chain-request module will
trigger. but here it always trigger. why??? what is my fault?
kindly solve it and also correct my concept if i am wrong.
regards
Sabyasachi Karforma
2012 Sep 04 3:28 PM
Hi
You need to create 2 dinstict CHAIN/ENDCHAIN section:
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
ENDCHAIN.
CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
Max
Dear abapers,
i have faced a problem in module pool. i have create a normal screen and also create 4 i/p fields in it.
my code is:
DATA DECLARATION.
PROGRAM SAPMZCHAINEXITCOMMAND.
DATA: VBELN TYPE VBELN_VA,
BUKRS TYPE BUKRS,
EBELN TYPE EBELN VALUE '4500036',
MATNR TYPE MATNR VALUE '2201'.
DATA: BEGIN OF IT1 OCCURS 0,
VBELN TYPE VBELN_VA,
END OF IT1.
DATA: BEGIN OF IT2 OCCURS 0,
BUKRS TYPE BUKRS,
END OF IT2.
DATA: BEGIN OF IT3 OCCURS 0,
EBELN TYPE EBELN,
END OF IT3.
DATA: BEGIN OF IT4 OCCURS 0,
MATNR TYPE MATNR,
END OF IT4.
SCREEN-FLOWLOGIC.
PROCESS BEFORE OUTPUT.
MODULE STATUS_0001.
*
PROCESS AFTER INPUT.
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
*ENDCHAIN.
*CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
MODULE MOD AT EXIT-COMMAND.
MODULE USER_COMMAND_0001.
INCLUDE MZCHAINEXITCOMMANDTOP . " global Data
* INCLUDE MZCHAINEXITCOMMANDO01 . " PBO-Modules
* INCLUDE MZCHAINEXITCOMMANDI01 . " PAI-Modules
* INCLUDE MZCHAINEXITCOMMANDF01 . " FORM-Routines
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0001 INPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
LEAVE TO LIST-PROCESSING.
WRITE😕 'HI'.
ENDCASE.
ENDMODULE. " USER_COMMAND_0001 INPUT
*&---------------------------------------------------------------------*
*& Module MOD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
" MOD INPUT
*&---------------------------------------------------------------------*
*& Module MOD INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " MOD INPUT
*&---------------------------------------------------------------------*
*& Module MOD_INP INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD_INP INPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
SELECT VBELN FROM VBAK INTO TABLE IT1 WHERE VBELN = VBELN.
SELECT BUKRS FROM EKKO INTO TABLE IT2 WHERE BUKRS = BUKRS.
IF IT1[] IS INITIAL.
MESSAGE 'SALES ORDER DOES NOT EXIST' TYPE 'E'.
ENDIF.
IF IT2[] IS INITIAL.
MESSAGE 'COMPANY CODE DOES NOT EXIST' TYPE 'E'.
ENDIF.
ENDCASE.
ENDMODULE. " MOD_INP INPUT
*&---------------------------------------------------------------------*
*& Module MOD_REQ INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MOD_REQ INPUT.
SELECT EBELN FROM EKKO INTO TABLE IT3 WHERE EBELN = EBELN.
SELECT MATNR FROM MARA INTO TABLE IT4 WHERE MATNR = MATNR.
IF IT3[] IS INITIAL.
MESSAGE 'PURCHASE ORDER DOES NOT EXIST' TYPE 'E'.
ENDIF.
IF IT4[] IS INITIAL.
MESSAGE 'MATERIAL NO DOES NOT EXIST' TYPE 'E'.
ENDIF.
ENDMODULE.
i dont change i/p field ebeln and matnr value in screen. but
(FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.) when i debug my code i watch that
this module is also trigger. as definition i know, when we change initial value of a i/p field then on chain-request module will
trigger. but here it always trigger. why??? what is my fault?
kindly solve it and also correct my concept if i am wrong.
regards
Sabyasachi Karforma
2012 Sep 04 3:28 PM
Hi
You need to create 2 dinstict CHAIN/ENDCHAIN section:
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
ENDCHAIN.
CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
Max
2012 Sep 04 4:31 PM
Hi Mr.max, if i use your code and suppose in this case any error ocuurs(error message) for ebeln or matnr fields then other 2 fields (vbeln and bukrs) will input disable. because here 2 processing chains are used. but i want at a time 4 fields will input enable if any error ocurs for any one field. plzz reply.
regards
Sabyasachi Karforma
2012 Sep 04 4:46 PM
Hi
An i/o field can be inserted in different CHAIN/ENDCHAIN:
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_INP ON CHAIN-INPUT.
ENDCHAIN.
CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
Now if you trigger an error messages all fields will be open, but the problem is MOD_INP will be triggered if a new value will be inserted in EBELN and MATNR, and I don't know if you want that.
Max
2012 Sep 04 5:13 PM
Hi Max , i can understand but my question is to you that if i use
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
this code then why module mod_req will be called??? even i dont change ebeln or matnr value by 'manual input'. what is the reason? please give a theoritical concept about this...
regards
sabyasachi
2012 Sep 04 5:51 PM
Hi
because ON CHAIN-REQUEST option triggers a module if any fields of a CHAIN/ENDCHAIN section (but before module call) section is changed;
it doesn't matter if you place the module after EBELN/MATNR:
all fields between CHAIN / ENDCHAIN and placed before MODULE MOD_REQ ON CHAIN-REQUEST
will be considered, so VBELN/BUKRS too.
So you can try this:
CHAIN.
FIELD: EBELN.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
ENDCHAIN.
Now module MOD_REQ is triggered only if EBELN or MATNR will be changed, but MOD_INP will be triggered if any input will be inserted if all fields (EBELN, MATNR, VBELN and BUKRS), because they are before MODULE MOD_INP ON CHAIN-INPUT.
Max
2012 Sep 05 9:22 AM
Hi max
thank you very much.
case 1:
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
FIELD: MATNR.
MODULE MOD_REQ ON CHAIN-REQUEST.
ENDCHAIN.
CASE2:
CHAIN.
FIELD: VBELN.
FIELD: BUKRS.
MODULE MOD_INP ON CHAIN-INPUT.
FIELD: MATNR.
MODULE MOD_REQ ON REQUEST.
ENDCHAIN.
IN ABOVE BOTH CASES WHAT WILL HAPPEN AND WHY??? WHAT IS THE DIFFERENCE BETWEEN ABOVE BOTH TWO UNDERLINE KEY WORDS IN THIS SITUATION?? PLEASE EXPLAIN AND GIVE A THEORITICAL CONCEPT.......
REGARDS
Sabyasachi Karforma
2012 Sep 05 9:32 AM
Hi
The case 2) is for the single field (in your case MATNR), the case 1) for all field in the CHAIN/ENDCHAIN section before the module.
Max
2012 Sep 05 9:49 AM
HI MAX,
in case 2) if only the value of 'MATNR' field change the MODULE MOD_REQ ON REQUEST will trigger.
but in case1) not only 'MATNR' FIELD VALUE BUT WHEN (VBELN , BUKRS) fields value changes , the MODULE MOD_REQ ON CHAIN-REQUST WILL TRIGGER.....
please tell me the above concepts are right or wrong???
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |