‎2007 Sep 30 7:12 AM
I want to add some code to user exit USEREXIT_FIELD_MODIFICATION in TCODE VA01 for setting screen attribute of field VBAP-KDMAT.
But in the PBO module MODULE FELDAUSWAHL OUTPUT, the field VBAP-KDMAT won't execute this user exit. But other field in the same screen with VBAP-KDMAT can execute this user exit. So once step into this user exit ,i loop at current screen(NO:4900).And change the attribute of field VBAP-KDMAT.But after execute this user exit. The loop at screen in module MODULE FELDAUSWAHL OUTPUT lose its correct index.The next screen element will not change any more.
This is a nested loop at screen. I guess whether nested loop at screen will work.
Can some explain it to me? Thanks.
‎2007 Sep 30 7:13 AM
MODULE FELDAUSWAHL OUTPUT.
DATA: MPOOL LIKE SY-REPID,
DYNGR LIKE SY-DYNGR,
LOOP(3) VALUE 'LOO', " MODIF 2 für Step-Loop-Ident.
DA_DISPLAY_STATUS LIKE SY-SUBRC.
DATA: L_SD_SALES_BASIC_EXIT TYPE REF TO IF_EX_BADI_SD_SALES_BASIC,
ACTIVE TYPE XFELD.
MPOOL = SY-REPID.
DYNGR = SY-DYNGR.
*-Modifikation des Dynpros zu SY-DYNGR -------------------------------*
LOOP AT SCREEN.
* CMDS - Collaborative Management of Delivery Schedules
* if CMDS is active for item, some fields must not be open for
* manual input anymore
IF ( T185V-PANEL EQ FCODE_LIEFERABRUF OR
T185V-PANEL EQ FCODE_LIEFERABRUF_EINTEILUNG OR
T185V-PANEL EQ FCODE_EINGANG_LAB OR
T185V-PANEL EQ FCODE_FREIGABE_LAB OR
T185V-PANEL EQ FCODE_FEINABRUF OR
T185V-PANEL EQ FCODE_FEINABRUF_EINTEILUNG OR
T185V-PANEL EQ FCODE_EINGANG_FAB OR
T185V-PANEL EQ FCODE_FREIGABE_FAB OR
T185V-PANEL EQ FCODE_PLANABRUF OR
T185V-PANEL EQ FCODE_PLANABRUF_EINTEILUNG OR
T185V-PANEL EQ FCODE_DETAIL1_EINTEILUNG OR
T185V-PANEL EQ 'EID2' OR
SCREEN-NAME(4) EQ 'VBLB' OR
SCREEN-NAME(4) EQ 'VBEP' ) AND
SCREEN-INPUT NE 0 AND NOT
ITEM_CMDS_ACTIVE IS INITIAL AND NOT
SCREEN-NAME EQ 'RV45A-VBEP_SELKZ'.
CHECK CALL_BAPI IS INITIAL.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
*-STEP-LOOP wird erst bei Abarbeitung der Loop-Zeilen modifiziert ----*
IF SCREEN-GROUP2 EQ LOOP.
CHECK SY-STEPL NE 0.
*-Spezielle Feldauswahl für leere Loop-Zeilen ------------------------*
IF RV45A-ZEILE_LEER NE SPACE AND
SCREEN-GROUP3 NE SPACE.
PERFORM FELDAUSWAHL_LEERE_ZEILEN.
ENDIF.
CHECK RV45A-ZEILE_LEER IS INITIAL.
ELSE.
CHECK SY-STEPL EQ 0.
ENDIF.
*- Betriebswirtschaftlich nicht sinnvoll zu modifiziernde Regeln -----*
IF SCREEN-GROUP3 NE SPACE.
PERFORM FELDAUSWAHL_SONDERREGELN.
ENDIF.
PERFORM FELDAUSWAHL_STATUS USING SCREEN-NAME
CHANGING DA_DISPLAY_STATUS.
* change of revenue recognition fields only allowed as long as
* no revenue recognized
PERFORM FIELDMODIFICATION_REV_REG.
* Call SD Sales BAdI
CALL FUNCTION 'GET_HANDLE_SD_SALES_BASIC'
IMPORTING
HANDLE = L_SD_SALES_BASIC_EXIT
ACTIVE = ACTIVE.
IF ACTIVE = CHARX.
CALL METHOD L_SD_SALES_BASIC_EXIT->MAINTAIN_SCREEN
EXPORTING
FT180 = T180
FVBAK = VBAK
FVBAP = VBAP
FXVBUP = XVBUP[]
FXVBUK = XVBUK[]
FXVBAP = XVBAP[]
FXVBPA = XVBPA[]
CHANGING
F_SCREEN = SCREEN.
ENDIF.
CALL CUSTOMER-FUNCTION '004'
EXPORTING
I_SCREEN_NAME = SCREEN-NAME
I_VBAP = VBAP
I_VBUP = XVBUP
I_SCREEN_GROUP4 = SCREEN-GROUP4
I_T180_AKTYP = T180-AKTYP
CHANGING
C_SCREEN_ACTIVE = SCREEN-ACTIVE
C_SCREEN_INVISIBLE = SCREEN-INVISIBLE
C_SCREEN_INPUT = SCREEN-INPUT.
* end Revenue Recognition Project
* Userexit
<b>PERFORM USEREXIT_FIELD_MODIFICATION.</b>
MODIFY SCREEN.
* Spaltenauswahl für Tabstrips aus Tablecontrol ableiten
PERFORM TCTRL_SPALTENAUSWAHL.
ENDLOOP.
CLEAR RV45A-ZEILE_LEER.
if data_read_from_archive = 'X'. " ARCHIVE
message s302 with vbak-vbeln. " ARCHIVE
endif. " ARCHIVE
ENDMODULE. "FELDAUSWAHL OUTPUTMessage was edited by:
Chris Xu
‎2007 Sep 30 7:15 AM
Below is the code i add to user exit. Thanks.
FORM USEREXIT_FIELD_MODIFICATION.
DATA: l_v_screen TYPE SCREEN.
CHECK SY-DYNNR EQ '4900'.
MOVE screen TO l_v_screen.
LOOP AT SCREEN.
CHECK screen-name EQ 'VBAP-KDMAT' AND
screen-group2 EQ 'LOO'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
EXIT.
ENDLOOP.
MOVE l_v_screen TO screen.
ENDFORM.Message was edited by:
Chris Xu
‎2007 Sep 30 2:43 PM