‎2008 Dec 24 1:13 PM
Hi,
I am using 11 parameters in my program. One is for table name, and remaing 10 for field names from respective table.To give the F4 functionlaity, I used F4TOOL_F4FUNCTION_BRIDGE function module.
Thats working fine. Depends on the table name , I am fetching the field info.
To give the F4 functionality for Field Name1, I used F4IF_INT_TABLE_VALUE_REQUEST function module. Here I am using Multiplechoice Option. so, if I select 10 values, they should get populated into all the parameters.
But, when I press F4 on Field Name1(p_fnam1).....I am getting dump as "you are trying to create field symbol with length 0 ".
Here I am giving the code.
Could you please copy into your editor and analyze the dump.
CODE:
Code in Bold : where the dump is taking place.
----
Type Declaration
----
types : ty_tabname(30) type c,
begin of ty_fieldinfo,
text(60),
end of ty_fieldinfo.
----
Data Declaration
----
data : v_tabname type help_info-tabname,
v_fldnam type fieldname,
v_lines type i,
v_display type c.
----
Internal Table Declarations
Work area Declarations
----
data : it_fldtab type standard table of help_value,
it_valuetab type standard table of ty_tabname,
it_dfies type standard table of dfies,
it_fieldinfo type standard table of ty_fieldinfo,
it_return type standard table of ddshretval,
it_dynpfields type standard table of dynpread,
wa_dynpfields type dynpread,
wa_return type ddshretval,
wa_fieldinfo type ty_fieldinfo,
wa_dfies type dfies,
wa_fldtab type help_value,
wa_valuetab type ty_tabname.
----
Selection-Screen block1
----
selection-screen begin of block block1 with frame title text-000.
parameters : p_table type tabname.
selection-screen end of block block1.
----
Selection-Screen block2
----
selection-screen begin of block block2 with frame title text-002.
parameters : p_fnam1 type fieldname,
p_fnam2 type fieldname,
p_fnam3 type fieldname,
p_fnam4 type fieldname,
p_fnam5 type fieldname,
p_fnam6 type fieldname,
p_fnam7 type fieldname,
p_fnam8 type fieldname,
p_fnam9 type fieldname,
p_fnam10 type fieldname.
selection-screen end of block block2.
----
F4 Help for Table name
----
at selection-screen on value-request for p_table.
perform f4help_table_name.
*----
F4 Help for Field names*
*----
at selection-screen on value-request for p_fnam1.
perform f4help_fieldname.
&----
*& Form f4help_table_name
&----
form f4help_table_name .
clear : v_tabname,
v_fldnam,
v_display.
clear : it_valuetab,
it_fldtab,
wa_valuetab,
wa_fldtab.
refresh : it_valuetab,
it_fldtab.
v_tabname = 'DD02L'.
v_fldnam = 'TABNAME'.
v_display = ' '.
*Fill fieldtab
wa_fldtab-tabname = 'DD02L'.
wa_fldtab-fieldname = 'TABNAME'.
wa_fldtab-selectflag = 'X'.
append wa_fldtab to it_fldtab.
*Fill Value Table
select tabname
from dd02l
into table it_valuetab
where tabclass = 'TRANSP' and
applclass = 'VA' or
applclass = 'ME' or
applclass = 'FB'.
*Call F4 Function
call function 'F4TOOL_F4FUNCTION_BRIDGE'
exporting
tabname = v_tabname
fieldname = v_fldnam
display_only = v_display
window_title = text-001
importing
selected_value = p_table
tables
value_tab = it_valuetab
fields_tab = it_fldtab.
endform. " f4help_table_name
&----
*& Form f4help_fieldname
&----
text
----
--> p1 text
<-- p2 text
----
form f4help_fieldname .
clear : wa_fldtab,
it_fldtab,
v_tabname,
v_fldnam.
refresh : it_fldtab.
v_tabname = 'DD03T'.
v_fldnam = 'FIELDNAME'.
*Getting Field Info
call function 'DDIF_FIELDINFO_GET'
exporting
tabname = p_table
langu = sy-langu
tables
dfies_tab = it_dfies
exceptions
not_found = 1
internal_error = 2.
*Fill Value table
loop at it_dfies into wa_dfies.
wa_fieldinfo-text = wa_dfies-fieldname.
append wa_fieldinfo to it_fieldinfo.
clear wa_fieldinfo.
wa_fieldinfo-text = wa_dfies-fieldtext.
append wa_fieldinfo to it_fieldinfo.
clear wa_fieldinfo.
endloop.
clear : it_dfies,
wa_dfies.
refresh : it_dfies.
*Fill field Table
wa_dfies-tabname = 'DD03T'.
wa_dfies-fieldname = 'FIELDNAME'.
wa_dfies-keyflag = 'X'.
append wa_dfies to it_dfies.
clear wa_dfies.
wa_dfies-tabname = 'DD03T'.
wa_dfies-fieldname = 'FIELDTEXT'.
wa_dfies-keyflag = ' '.
append wa_dfies to it_dfies.
clear wa_dfies.
*Call F4 function
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
exporting
retfield = v_fldnam
window_title = text-003
value_org = 'S'
multiple_choice = 'X'
dynpprog = sy-repid
dynpnr = sy-dynnr
tables
value_tab = it_fieldinfo
field_tab = it_dfies
return_tab = it_return
exceptions
parameter_error = 1
no_values_found = 2.
if sy-subrc eq 0.
if not it_return[] is initial.
describe table it_return lines v_lines.
if v_lines ge 11.
message i000 with 'No Authorization To select more than 10 fields'.
else.
loop at it_return into wa_return.
case sy-tabix.
when '1'.
wa_dynpfields-fieldname = 'P_FNAM1'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '2'.
wa_dynpfields-fieldname = 'P_FNAM2'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '3'.
wa_dynpfields-fieldname = 'P_FNAM3'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '4'.
wa_dynpfields-fieldname = 'P_FNAM4'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '5'.
wa_dynpfields-fieldname = 'P_FNAM5'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '6'.
wa_dynpfields-fieldname = 'P_FNAM6'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '7'.
wa_dynpfields-fieldname = 'P_FNAM7'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '8'.
wa_dynpfields-fieldname = 'P_FNAM8'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '9'.
wa_dynpfields-fieldname = 'P_FNAM9'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
when '10'.
wa_dynpfields-fieldname = 'P_FNAM10'.
wa_dynpfields-fieldvalue = wa_return-fieldval.
append wa_dynpfields to it_dynpfields.
endcase.
endloop.
*Updating Screen Fields
call function 'DYNP_VALUES_UPDATE'
exporting
dyname = sy-cprog
dynumb = sy-dynnr
tables
dynpfields = it_dynpfields
exceptions
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7.
endif.
endif.
endif.
endform. " f4help_fieldname
Regards
Sandeep Reddy
‎2008 Dec 24 1:48 PM
Please check this code ...
wa_dfies-tabname = 'DD03T'.
wa_dfies-fieldname = 'FIELDNAME'.
wa_dfies-keyflag = 'X'.
append wa_dfies to it_dfies.
clear wa_dfies.
wa_dfies-tabname = 'DD03T'.
wa_dfies-fieldname = 'DDTEXT'. <-----
wa_dfies-keyflag = ' '.
append wa_dfies to it_dfies.
clear wa_dfies.
‎2008 Dec 24 1:49 PM
Hi Sandeep,
Try as following
if sy-subrc eq 0.
describe table it_return lines v_lines.
if not it_return[] is initial.
if v_lines ge 11.
message i000 with 'No Authorization To select more than 10 fields'.
‎2008 Dec 24 2:07 PM
Please incorporate following 3-4 modifications and your code will run just fine.
call function 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = p_table
langu = sy-langu
TABLES
dfies_tab = it_dfies
EXCEPTIONS
not_found = 1
internal_error = 2.
*Fill Value table
loop at it_dfies into wa_dfies.
wa_fieldinfo-fieldname = wa_dfies-fieldname.
wa_fieldinfo-ddtext = wa_dfies-fieldtext. "add another field in it_fieldinfo called ddtext
append wa_fieldinfo to it_fieldinfo.
clear wa_fieldinfo.
endloop.
clear : it_dfies,
wa_dfies.
refresh : it_dfies.
*bold*" Fill field Table "Dont give the field tab instead declare your value tab as LIKE dd03t-fieldname and "dd03t-ddtext *bold*
* wa_dfies-tabname = 'DD03T'.
* wa_dfies-fieldname = 'FIELDNAME'.
* wa_dfies-keyflag = 'X'.
* append wa_dfies to it_dfies.
* clear wa_dfies.
* wa_dfies-tabname = 'DD03T'.
* wa_dfies-fieldname = 'DDTEXT'.
* wa_dfies-keyflag = ' '.
* append wa_dfies to it_dfies.
* clear wa_dfies.
**Call F4 function
call function 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = v_fldnam
window_title = text-003
value_org = 'S'
multiple_choice = 'X'
dynpprog = sy-repid
dynpnr = sy-dynnr
TABLES
value_tab = it_fieldinfo
* field_tab = it_dfies "Comment this
return_tab = it_return
EXCEPTIONS
parameter_error = 1
no_values_found = 2.