Welcome To My BLOG

This site is to give a brief idea for the abap learners who are looking for some real time programs .It consists of collection of programs from my side . I hope these programs are very much used for all of the learners. Please check the links for any information in ABAP.
Please vote for my Blog. And please input me on this mail addrssess.Email me

Share this link with your friends

http://www.rebtel.com/u/15163104576

For every friend who signs up using this link and makes a payment, we'll give you 8 €!


Wednesday, September 22, 2010

Dynamic F4 Help

Let's say the selection screen has two input fields. One is plant i.e., PA_WERKS and other one is object(PA_OBJ). While executing the report, User will first enter the plant name in the WERKS field. Then, he will press F4 at the PA_OBJ field. It should dynamically take the value from PA_WERKS and display the possible values on F4 dialog box by searching in the table ZAIS_MMG.
Solution is written below and all the comments were provided at necessary places. Table need not be necessarily ZAIS_MMG. This logic is used for any table where you just need to change the table name.
Below is the subroutine that needs to be called at seelction screenAT SELECTION-SCREEN ON VALUE-REQUEST FOR pa_obj.
*&---------------------------------------------------------------------*
*& Form object_f4help
*&---------------------------------------------------------------------*
* Provides the possible values for pa_obj
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM object_f4help.
* Refresh the internal table. This helps in reusing these tables and variables in * other subroutines.
CLEAR: tb_dynpfields,
tb_object_range.
REFRESH: tb_dynpfields,
tb_object_range.
* Define Internal tables.
DATA: tb_dynpfields LIKE dynpread OCCURS 0 WITH HEADER LINE.
* Define constants.
CONSTANTS: co_retfield TYPE dfies-fieldname VALUE 'OBJECT',
co_dynprog LIKE sy-repid
VALUE '/DCSEA/Z_AIS_NUM_RESET_PAJERO',
co_s TYPE c VALUE 'S',
co_field(27) TYPE c VALUE 'PA_OBJ'.
* Assigning the values of program name and screen to the variables.
wf_dyname = sy-repid. " PROGRAM NAME
wf_dynumb = sy-dynnr. " SCREEN NUMBER
wf_dynpro = co_field.
* Move the field name to tb_dynpfields.
MOVE 'PA_WERKS' TO
tb_dynpfields-fieldname.
APPEND tb_dynpfields.
* Read screen field values before PAI field transport. This FM is used for dynamically * reading a value from the selection screen field .
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = wf_dyname
dynumb = wf_dynumb
TABLES
dynpfields = tb_dynpfields
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 the tbale tb_dynpfields to read the dynamic value of pa_werks
READ TABLE tb_dynpfields INDEX 1.
IF sy-subrc = 0.
wf_werks = tb_dynpfields-fieldvalue.
ENDIF.
* Populate the table tb_object_range. Make sure that we filter out null values as it * might appear on the screen.
SELECT werks object
INTO TABLE tb_object_range
FROM zais_mmg
WHERE werks EQ wf_werks
and object NE ' '.
* Sorting is always done before dlete adjacent duplicate.
sort tb_object_range.
* This will delete all duplicate entries. Or else when you press F4, it will display * the duplicates also.
delete adjacent duplicates from tb_object_range comparing object.
* F4 help also returning the value to be displayed in internal table. If the internal table is empty, it will display the message saying 'Values are not found'.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = co_retfield
dynpprog = co_dynprog
dynpnr = sy-dynnr
dynprofield = wf_dynpro
value_org = co_s
TABLES
value_tab = tb_object_range
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.
ENDFORM. " object_f4help

No comments: