Application Development 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: 

At selection screen on value request

Former Member
0 Kudos

Hi ,

Iam having a select-option. Instead of F4 i have to select data from a database table.

eg.

select-option : ccg for setnode-setname.

After selecting data from setnode table with respect to some condition, how can i place the selected values in the select-option field . can anyone explaim me on this.

Regards,

Phyrose.

5 REPLIES 5

former_member200338
Active Contributor
0 Kudos

Hi,

You need to use the FM F4IF_INT_TABLE_VALUE_REQUEST. plese see the sample code below. i have build the F4 manullay. you can build it using the databse .

DATA: lt_retval TYPE STANDARD TABLE OF ddshretval,

ls_retval LIKE ddshretval,

lt_dynmap TYPE STANDARD TABLE OF dselc,

ls_dynmap TYPE dselc,

dynp_values TYPE STANDARD TABLE OF dynpread ,

wa_dynp_values TYPE dynpread,

lt_values TYPE TABLE OF seahlpres,

lt_fields TYPE TABLE OF dfies,

ls_field TYPE dfies,

ls_return TYPE ddshretval.

CLEAR ls_field.

ls_field-fieldname = 'SKILLS'.

ls_field-intlen = 15.

ls_field-leng = 15.

ls_field-outputlen = 15.

ls_field-scrtext_m = 'SKILLS AVALIABLE'.

APPEND ls_field TO lt_fields.

CLEAR ls_field.

ls_field-fieldname = 'DESCRIPTION'.

ls_field-intlen = 25.

ls_field-leng = 25.

ls_field-outputlen = 25.

ls_field-scrtext_m = 'DESCRIPTION'.

APPEND ls_field TO lt_fields.

PERFORM fill_values USING 'C' 'C programming'.

PERFORM fill_values USING 'C+' 'C+ Programming'.

PERFORM fill_values USING 'ABAP' 'ABAP Language'.

PERFORM fill_values USING 'JAVA' 'JAVA programming'.

PERFORM fill_values USING 'SAP SCRIPT' 'Working with SAP Scripts'.

PERFORM fill_values USING 'SMART FORMS' 'Smart forms'.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

  • DDIC_STRUCTURE = 'VTTK'

retfield = 'SKILLS'

  • PVALKEY = ' '

dynpprog = sy-repid

  • DYNPNR = '0100'

  • DYNPROFIELD = 'P_SKILLS'

  • STEPL = 0

  • WINDOW_TITLE =

  • VALUE = ' '

  • VALUE_ORG = 'S'

  • MULTIPLE_CHOICE = ' '

  • DISPLAY = ' '

  • CALLBACK_PROGRAM = ' '

  • CALLBACK_FORM = ' '

  • MARK_TAB =

  • IMPORTING

  • USER_RESET =

TABLES

value_tab = gt_values

field_tab = lt_fields

return_tab = lt_retval

  • DYNPFLD_MAPPING = Lt_dynmap

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.

CLEAR ls_retval.

READ TABLE lt_retval INTO ls_retval INDEX 1.

MOVE ls_retval-fieldval TO p_skills.

REFRESH gt_values[].

ENDFORM. " f4_help_for_skills

&----


*& Form fill_values

&----


  • text

----


  • --->P_0290 Skill

----


FORM fill_values USING pa_value

pa_desc.

DATA ls_values TYPE seahlpres.

CLEAR ls_values.

ls_values-string = pa_value.

APPEND ls_values TO gt_values.

CLEAR ls_values.

ls_values-string = pa_desc.

APPEND ls_values TO gt_values.

ENDFORM. " fill_values<b></b><b></b><b></b>

Former Member
0 Kudos

Hi Phyrose,

Use FM F4IF_INT_TABLE_VALUE_REQUEST.

Search forum using this FM you will get lots of sample code.

Regards,

Atish

Former Member
0 Kudos

Hi Camila,

For this you have to use the event.

<i>

AT SELECTION-SCREEN ON VALUE-REQUEST FOR <Selection screen field name>
  PERFORM GET_DATA USING <Selection screen field name>

Then Write the logic to fetch the data in the subroutine.</i>

<b>Below is the sample code:</b>

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_REVNR-HIGH.

  PERFORM GET_REVISION_NUMBER USING 'S_REVNR-HIGH' 'REVNR'.


*&---------------------------------------------------------------------*
*&      Form  GET_REVISION_NUMBER
*&---------------------------------------------------------------------*
*       F4 Lookup for Revision Service Order revision
*----------------------------------------------------------------------*
*      -->P_0123   fieldname
*      -->P_0124   fieldtype
*----------------------------------------------------------------------*
FORM GET_REVISION_NUMBER USING
              VALUE(FIELD_NAME) LIKE  HELP_INFO-DYNPROFLD
              VALUE(FIELD_TYPE) LIKE  DFIES-FIELDNAME.

  DATA: I_RETURN TYPE DDSHRETVAL OCCURS 0 WITH HEADER LINE.

  DATA: BEGIN OF I_REV OCCURS 0,
           REVNR LIKE T352R-REVNR,
        END   OF I_REV.
  DATA: V_S TYPE C VALUE 'S'.
  IF I_REV[] IS INITIAL.
    SELECT REVNR
           INTO TABLE I_REV
           FROM T352R.
    SORT I_REV BY REVNR.
    DELETE ADJACENT DUPLICATES FROM I_REV COMPARING REVNR.
  ENDIF.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      RETFIELD        = FIELD_TYPE
      DYNPPROG        = SY-REPID
      DYNPNR          = SY-DYNNR
      DYNPROFIELD     = FIELD_NAME
      VALUE_ORG       = V_S
    TABLES
      VALUE_TAB       = I_REV
      RETURN_TAB      = I_RETURN
    EXCEPTIONS
      PARAMETER_ERROR = 1
      NO_VALUES_FOUND = 2
      OTHERS          = 3.
  IF SY-SUBRC = 0.
  ENDIF.

ENDFORM.                    " GET_REVISION_NUMBER

Former Member
0 Kudos

Hi

you can do it like this

creat a structure what ever values you want from that database table

like this

TYPES : BEGIN OF ST_OBJID_SH,

OTYPE TYPE HRP1000-OTYPE,

OBJID TYPE HRP1000-OBJID,

END OF ST_OBJID_SH.

DATA : IT_OBJID_SH TYPE STANDARD TABLE OF ST_OBJID_SH.

DATA : WA_OBJID_SH TYPE ST_OBJID_SH.

write the logic like this

on what condition do you want for that select-option

AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_OBJID-LOW.

  • IF S_OBJID IS NOT INITIAL.

SELECT OTYPE OBJID FROM HRP1000

INTO TABLE IT_OBJID_SH

WHERE OTYPE = 'D'.

IF SY-SUBRC EQ 0.

  • SEARCH HELP FOR QUALIFICATION.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

  • DDIC_STRUCTURE = ' '

RETFIELD = 'OBJID'

  • PVALKEY = ' '

DYNPPROG = SY-REPID

DYNPNR = SY-DYNNR

DYNPROFIELD = 'S_OBJID'

  • STEPL = 0

  • WINDOW_TITLE =

  • VALUE = ' '

VALUE_ORG = 'S'

  • MULTIPLE_CHOICE = ' '

  • DISPLAY = ' '

  • CALLBACK_PROGRAM = ' '

  • CALLBACK_FORM = ' '

  • MARK_TAB =

  • IMPORTING

  • USER_RESET =

TABLES

VALUE_TAB = IT_OBJID_SH

  • FIELD_TAB =

  • RETURN_TAB = RETURN_TAB

  • DYNPFLD_MAPPING =

  • 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.

ENDIF.

.

<b>reward if usefull</b>

Former Member
0 Kudos

Hi Camila,

Use the below code.

tables: setnode.

DATA: BEGIN OF it_setname OCCURS 0,

setname LIKE t001k-bwkey,

END OF it_setname.

SELECTION-SCREEN: BEGIN OF BLOCK main WITH FRAME TITLE text-001.

select-options : ccg for setnode-setname.

SELECTION-SCREEN END OF BLOCK main.

*----


  • Validation Section

*----


INITIALIZATION.

SELECT DISTINCT setname FROM setnode INTO TABLE it_setname.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ccg-low.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'SETNAME'

dynpprog = sy-repid

dynpnr = sy-dynnr

dynprofield = 'CCG'

value_org = 'S'

TABLES

value_tab = it_setname

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.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR ccg-high.

CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'

EXPORTING

retfield = 'SETNAME'

dynpprog = sy-repid

dynpnr = sy-dynnr

dynprofield = 'CCG'

value_org = 'S'

TABLES

value_tab = it_setname

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.