12-16-2011 4:43 AM
Hi Folks,
i want to reuse my code for F4 functionality like
im having two characterstics selections screen fields,
im creating custom f4 helps since both are same
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CHNAM1-LOW.
PERFORM CHAR_F4_HELP.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_CHNAM2-LOW.
PERFORM CHAR_F4_HELP.
FORM CHAR_F4_HELP .
DATA: BEGIN OF T_KLAH OCCURS 0,
CLINT TYPE CLINT,
END OF T_KLAH.
DATA: BEGIN OF T_KSML OCCURS 0,
IMERK TYPE ATINN,
END OF T_KSML.
DATA: BEGIN OF T_CABN OCCURS 0,
ATINN TYPE ATINN,
ATNAM TYPE ATNAM,
END OF T_CABN.
DATA: BEGIN OF T_CABNT OCCURS 0,
ATINN TYPE ATINN,
SPRAS TYPE SPRAS,
ATBEZ TYPE ATBEZ,
END OF T_CABNT.
DATA: BEGIN OF T_FINAL OCCURS 0,
ATNAM TYPE ATNAM,
ATBEZ TYPE ATBEZ,
END OF T_FINAL.
DATA: T_RETURN3 LIKE DDSHRETVAL OCCURS 0 WITH HEADER LINE,
V_NEW TYPE P.
w_cabns type atinn .
IF NOT S_CLASS1 IS INITIAL.
SELECT CLINT FROM KLAH INTO TABLE T_KLAH
WHERE KLART = '011' AND
CLASS = S_CLASS1-LOW .
IF NOT T_KLAH[] IS INITIAL.
SELECT IMERK FROM KSML INTO TABLE T_KSML
FOR ALL ENTRIES IN T_KLAH
WHERE CLINT = T_KLAH-CLINT.
ENDIF.
IF NOT T_KSML[] IS INITIAL.
SELECT ATINN ATNAM FROM CABN INTO TABLE T_CABN
FOR ALL ENTRIES IN T_KSML
WHERE ATINN = T_KSML-IMERK.
SELECT ATINN SPRAS ATBEZ FROM CABNT INTO TABLE T_CABNT
FOR ALL ENTRIES IN T_KSML
WHERE ATINN = T_KSML-IMERK.
ENDIF.
REFRESH T_FINAL[].
LOOP AT T_CABN.
T_FINAL-ATNAM = T_CABN-ATNAM.
READ TABLE T_CABNT WITH KEY ATINN = T_CABN-ATINN SPRAS = 'E'.
T_FINAL-ATBEZ = T_CABNT-ATBEZ.
APPEND T_FINAL.
CLEAR T_FINAL.
ENDLOOP.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'ATNAM'
DYNPPROG = SY-CPROG
DYNPNR = SY-DYNNR
DYNPROFIELD = 'S_CHNAM1-LOW'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = T_FINAL
RETURN_TAB = T_RETURN3
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
READ TABLE T_RETURN3 WITH KEY RETFIELD = 'S_CHNAM1-LOW'.
IF SY-SUBRC EQ 0.
S_CHNAM1-LOW = T_RETURN3-FIELDVAL.
SELECT ATINN FROM CABN INTO W_CABNS
WHERE ATNAM = T_RETURN3-FIELDVAL.
ENDSELECT.
ENDIF.
ENDIF.
ENDIF.
i want to use the same for my s_chnam2 , s_cham3 fields etc.,
please give some inputs.
Thanks,
Shwetha
12-16-2011 4:59 AM
Hi,
Try this.
Maintain the retfield and dynprofield in text elements and call the subroutine accordingly.
Ex: text-001 = ATNAM and text-002 = S_CHNAM1-LOW
PERFORM CHAR_F4_HELP using text-001
text-002.
In form, pass as
RETFIELD = <text-001 formal parameter>
DYNPROFIELD = <text-002 formal parameter>
Regards,
Sharin
12-16-2011 10:19 AM
12-16-2011 10:45 AM
go through the below link..
http://help.sap.com/saphelp_nw70/helpdata/en/9f/db984635c111d1829f0000e829fbfe/content.htm
12-16-2011 12:07 PM
Hi,
You must not use the CLASS value while getting entries from KLAH table.
Declare 3 internal tables(or no. of internal tables equal to no. of fields in selection screen) with 2 fileds.
While accessing the KLAH table, don't pass the CLASS value, get all the entries for a '011' class type.
SELECT-OPTIONS : s_chnam1 FOR klah-class,
s_chnam2 FOR klah-class,
s_chnam3 FOR klah-class.
TYPES : BEGIN OF t_field,
fieldname1 TYPE dd03l-fieldname,
fieldname2 TYPE dd03l-fieldname,
END OF t_field.
DATA : i_chnam1 TYPE STANDARD TABLE OF t_field,
i_chnam2 TYPE STANDARD TABLE OF t_field,
i_chnam3 TYPE STANDARD TABLE OF t_field.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chnam1-low.
IF i_chnam1[] IS INITIAL.
PERFORM get_f4values CHANGING s_chnam1-low
i_chnam1[].
ENDIF.
PERFORM display_value TABLES i_chnam1[]
CHANGING s_chnam1-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chnam2-low.
IF i_chnam2[] IS INITIAL.
PERFORM get_f4values CHANGING s_chnam2-low
i_chnam2[].
ENDIF.
PERFORM display_value TABLES i_chnam2[]
CHANGING s_chnam2-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chnam3-low.
IF i_chnam3[] IS INITIAL.
PERFORM get_f4values CHANGING s_chnam3-low
i_chnam3[].
ENDIF.
PERFORM display_value TABLES i_chnam3[]
CHANGING s_chnam3-low.
START-OF-SELECTION.
BREAK-POINT.
Forms are in the second posting.
Thanks & Regards
Bala Krishna.
12-16-2011 12:08 PM
FORM get_f4values CHANGING p_sfield
p_table TYPE ANY TABLE.
DATA: BEGIN OF t_klah OCCURS 0,
clint TYPE clint,
END OF t_klah.
DATA: BEGIN OF t_ksml OCCURS 0,
imerk TYPE atinn,
END OF t_ksml.
DATA: BEGIN OF t_cabn OCCURS 0,
atinn TYPE atinn,
atnam TYPE atnam,
END OF t_cabn.
DATA: BEGIN OF t_cabnt OCCURS 0,
atinn TYPE atinn,
spras TYPE spras,
atbez TYPE atbez,
END OF t_cabnt.
DATA: BEGIN OF t_final OCCURS 0,
atnam TYPE atnam,
atbez TYPE atbez,
END OF t_final.
SELECT clint
FROM klah
INTO TABLE t_klah
WHERE klart = '011'.
IF NOT t_klah[] IS INITIAL.
SELECT imerk FROM ksml INTO TABLE t_ksml
FOR ALL ENTRIES IN t_klah
WHERE clint = t_klah-clint.
ENDIF.
IF NOT t_ksml[] IS INITIAL.
SELECT atinn atnam FROM cabn INTO TABLE t_cabn
FOR ALL ENTRIES IN t_ksml
WHERE atinn = t_ksml-imerk.
SELECT atinn spras atbez FROM cabnt INTO TABLE t_cabnt
FOR ALL ENTRIES IN t_ksml
WHERE atinn = t_ksml-imerk.
ENDIF.
REFRESH t_final[].
LOOP AT t_cabn.
t_final-atnam = t_cabn-atnam.
READ TABLE t_cabnt WITH KEY atinn = t_cabn-atinn spras = 'E'.
t_final-atbez = t_cabnt-atbez.
APPEND t_final.
CLEAR t_final.
ENDLOOP.
SORT t_final.
p_table[] = t_final[].
ENDFORM.
FORM display_value TABLES p_table
CHANGING p_sfield.
DATA : lt_return TYPE STANDARD TABLE OF ddshretval, " Selected
ls_return TYPE ddshretval. " Workarea
CONSTANTS: lc_s TYPE c VALUE 'S'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'FIELDNAME1' "First field name in T_FIELD structure
dynpprog = sy-repid
dynpnr = sy-dynnr
window_title = 'Select Size'
display = ' '
value_org = lc_s
TABLES
value_tab = p_table
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Check whether LT_RETURN is blank
CHECK NOT lt_return[] IS INITIAL.
READ TABLE lt_return INTO ls_return INDEX 1.
p_sfield = ls_return-fieldval.
REFRESH : lt_return.
CLEAR : ls_return.
ENDFORM.
Thanks & Regards
Bala Krishna
Edited by: Bala Krishna on Dec 16, 2011 5:46 PM
12-17-2011 1:15 PM
Hi Krishna,
Thanks for your input..But in post you mentioned as " you must not use class while getting values from KLAh table".
In my case it is must since im creating custom helps for characterstic name based on class provided above and custom f4 for characterstic value based on characterstic name, so i need to mention my class name how can i provide my class1 or class2 or class3 how can I know, using 'DYNP_VALUES_READ' FM we can get the value of dynpro value but how can get my class name dynamically based von my selection.
class1 -
characterstic name1 -
characterstic value1 -
class2 -
characterstic name2 -
characterstic value 2 -
please any one throw some light ..
Thanks in advance,
Shwetha
12-17-2011 4:24 PM
Hi Swetha,
I am still not clear, is your selection screen having only with CLASS names or it also has Characteristics Name and Characteristic Value and you want F4 for only those values.
Can you provide your Selection screen defined fields.
Thanks & Regards
Bala Krishna
12-17-2011 4:46 PM
Hi Krishna,
please find my selection screen design below, and please let me know if you need any further detials
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS: S_CLASS1 FOR RMCLM-CLASS NO INTERVALS NO-EXTENSION,
S_CHNAM1 FOR KSML-IMERK NO INTERVALS NO-EXTENSION,
S_CHVAL1 FOR RMCLM-CLASS.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_CLASS2 FOR RMCLM-CLASS NO INTERVALS NO-EXTENSION,
S_CHNAM2 FOR KSML-IMERK NO INTERVALS NO-EXTENSION,
S_CHVAL2 FOR RMCLM-CLASS.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_CLASS3 FOR RMCLM-CLASS NO INTERVALS NO-EXTENSION,
S_CHNAM3 FOR KSML-IMERK NO INTERVALS NO-EXTENSION,
S_CHVAL3 FOR RMCLM-CLASS.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: S_CLASS4 FOR RMCLM-CLASS NO INTERVALS NO-EXTENSION,
S_CHNAM4 FOR KSML-IMERK NO INTERVALS NO-EXTENSION,
S_CHVAL4 FOR RMCLM-CLASS.
SELECTION-SCREEN END OF BLOCK B2.
im creating custome f4 helps for classes, characterstic names, characterstic values.. characterstic name(s_chnam1) f4 id based on selected class(s_class1), like same chractestic values(s_chval1) f4 is based on characterstic name(s_chnam1)..
Thanks in advance,
Shwetha
12-19-2011 12:16 PM
Hi,
Try below code
TYPES : BEGIN OF t_field,
fieldname1 TYPE dd03l-fieldname,
fieldname2 TYPE dd03l-fieldname,
END OF t_field.
DATA : i_chval1 TYPE STANDARD TABLE OF t_field,
i_chval2 TYPE STANDARD TABLE OF t_field,
i_chval3 TYPE STANDARD TABLE OF t_field,
wa_chval1 TYPE t_field,
v_fieldvalue TYPE dynpread-fieldvalue.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_class1 FOR rmclm-class NO INTERVALS NO-EXTENSION,
s_chnam1 FOR ksml-imerk NO INTERVALS NO-EXTENSION,
s_chval1 FOR cabn-atnam.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_class2 FOR rmclm-class NO INTERVALS NO-EXTENSION,
s_chnam2 FOR ksml-imerk NO INTERVALS NO-EXTENSION,
s_chval2 FOR cabn-atnam.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_class3 FOR rmclm-class NO INTERVALS NO-EXTENSION,
s_chnam3 FOR ksml-imerk NO INTERVALS NO-EXTENSION,
s_chval3 FOR cabn-atnam.
SELECTION-SCREEN SKIP.
SELECT-OPTIONS: s_class4 FOR rmclm-class NO INTERVALS NO-EXTENSION,
s_chnam4 FOR ksml-imerk NO INTERVALS NO-EXTENSION,
s_chval4 FOR cabn-atnam.
SELECTION-SCREEN END OF BLOCK b2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chnam1-low.
PERFORM get_f4values USING 'S_CLASS1-LOW'
CHANGING s_chnam1-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chval1-low.
PERFORM get_f4cvalues USING 'S_CHNAM1-LOW'
CHANGING s_chval1-low
i_chval1[].
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chnam2-low.
PERFORM get_f4values USING 'S_CLASS2-LOW'
CHANGING s_chnam2-low.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_chval2-low.
PERFORM get_f4cvalues USING 'S_CHNAM2-LOW'
CHANGING s_chval2-low
i_chval2[].
FORM get_f4values USING p_ifield
CHANGING p_ofield.
TYPES : BEGIN OF t_klah,
clint TYPE clint,
END OF t_klah.
TYPES: BEGIN OF t_ksml,
imerk TYPE atinn,
END OF t_ksml.
DATA : lt_klah TYPE STANDARD TABLE OF t_klah,
lt_ksml TYPE STANDARD TABLE OF t_ksml,
lv_svalue TYPE dynpread-fieldvalue.
DATA : lt_return TYPE STANDARD TABLE OF ddshretval, " Selected
lwa_return TYPE ddshretval. " Workarea
PERFORM get_screen_values USING p_ifield
CHANGING lv_svalue.
SELECT clint
FROM klah
INTO TABLE lt_klah
WHERE klart = '011'
AND class = lv_svalue.
IF NOT lt_klah[] IS INITIAL.
SELECT imerk
FROM ksml
INTO TABLE lt_ksml
FOR ALL ENTRIES IN lt_klah
WHERE clint = lt_klah-clint.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'IMERK'
dynpprog = sy-repid
dynpnr = sy-dynnr
window_title = 'Select Size'
display = ' '
value_org = 'S'
TABLES
value_tab = lt_ksml
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Check whether LT_RETURN is blank
CHECK NOT lt_return[] IS INITIAL.
READ TABLE lt_return INTO lwa_return INDEX 1.
CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
EXPORTING
input = lwa_return-fieldval
IMPORTING
output = p_ofield.
REFRESH : lt_return.
CLEAR : lwa_return.
ENDFORM. " GET_F4VALUES
Thanks & Regards
Bala Krishna
12-19-2011 12:17 PM
FORM get_f4cvalues USING p_ifield
CHANGING p_ofield
p_table TYPE ANY TABLE.
TYPES : BEGIN OF t_cabnt,
atinn TYPE atinn,
spras TYPE spras,
atbez TYPE atbez,
END OF t_cabnt.
TYPES : BEGIN OF t_cabn,
atinn TYPE atinn,
atnam TYPE atnam,
END OF t_cabn.
TYPES: BEGIN OF t_final,
atnam TYPE atnam,
atbez TYPE atbez,
END OF t_final.
DATA : lt_cabnt TYPE STANDARD TABLE OF t_cabnt,
lt_cabn TYPE STANDARD TABLE OF t_cabn,
lt_final TYPE STANDARD TABLE OF t_final,
lwa_cabnt TYPE t_cabnt,
lwa_cabn TYPE t_cabn,
lwa_final TYPE t_final,
lv_svalue TYPE dynpread-fieldvalue..
DATA : lt_return TYPE STANDARD TABLE OF ddshretval, " Selected
lwa_return TYPE ddshretval. " Workarea
PERFORM get_screen_values USING p_ifield
CHANGING lv_svalue.
IF v_fieldvalue <> lv_svalue.
CLEAR : v_fieldvalue.
v_fieldvalue = lv_svalue.
CALL FUNCTION 'CONVERSION_EXIT_ATINN_INPUT'
EXPORTING
input = lv_svalue
IMPORTING
output = lv_svalue.
SELECT atinn
atnam FROM cabn
INTO TABLE lt_cabn
WHERE atinn = lv_svalue.
SELECT atinn
spras
atbez FROM cabnt
INTO TABLE lt_cabnt
WHERE atinn = lv_svalue.
REFRESH : lt_final, p_table.
LOOP AT lt_cabn INTO lwa_cabn.
lwa_final-atnam = lwa_cabn-atnam.
READ TABLE lt_cabnt INTO lwa_cabnt WITH KEY
atinn = lwa_cabn-atinn
spras = 'E'.
IF sy-subrc = 0.
lwa_final-atbez = lwa_cabnt-atbez.
ENDIF.
APPEND lwa_final TO lt_final.
CLEAR : lwa_final, lwa_cabn, lwa_cabnt.
ENDLOOP.
SORT lt_final.
p_table[] = lt_final[].
ENDIF.
lt_final[] = p_table[].
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ATNAM'
dynpprog = sy-repid
dynpnr = sy-dynnr
window_title = 'Select Size'
display = ' '
value_org = 'S'
TABLES
value_tab = lt_final
return_tab = lt_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Check whether LT_RETURN is blank
CHECK NOT lt_return[] IS INITIAL.
READ TABLE lt_return INTO lwa_return INDEX 1.
CALL FUNCTION 'CONVERSION_EXIT_ATINN_OUTPUT'
EXPORTING
input = lwa_return-fieldval
IMPORTING
output = p_ofield.
REFRESH : lt_return.
CLEAR : lwa_return.
ENDFORM. " GET_F4CVALUES
FORM get_screen_values USING p_ifield
CHANGING p_svalue.
DATA : lt_dynpread TYPE STANDARD TABLE OF dynpread,
lwa_dynpread TYPE dynpread,
lv_repid TYPE sy-repid.
lwa_dynpread-fieldname = p_ifield.
APPEND lwa_dynpread TO lt_dynpread.
CLEAR lwa_dynpread.
lv_repid = sy-repid.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = lv_repid
dynumb = '1000'
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
TABLES
dynpfields = lt_dynpread
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE lt_dynpread INTO lwa_dynpread INDEX 1.
IF sy-subrc = 0.
p_svalue = lwa_dynpread-fieldvalue.
ENDIF.
ENDFORM. " GET_SCREEN_VALUES
Thanks & Regards
Bala Krishna
01-07-2012 8:16 AM