如有转载请注明出处:http://blog.csdn.net/donkey2004112103/archive/2009/03/26/4028006.aspx
平常按选择屏幕上的F4键跳出来的文档如何制作了?sap里有一个例子调用内表中的字段的文档,有三个函数可以介绍下,例子程序的名字是:demo_dynpro_f4_help_module。
重点介绍三个函数。
1.F4IF_FIELD_VALUE_REQUEST
其中的众多参数我就不详细解释了,慢慢测试了。就用demo的例子来讲解,屏幕参数有两个carrid和connection,我们要用内表spfli里的两个字段的input help给他两用,字段carrier和connid。代码部分简化如下:
CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
EXPORTING
tabname = 'SPFLI' ‘要用的表的名字
fieldname = 'MANDT' ‘表字段的名字
dynpprog = sy-repid ‘程序名
dynpnr = sy-dynnr ‘屏幕标号
dynprofield = 'CARRIER'. ‘选择屏幕上字段的名字
写了这段代码了之后在选择屏幕上按f4就会出现如下场景:
2. DYNP_VALUES_READ
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = sy-repid
dynumb = sy-dynnr
translate_to_upper = 'X'
TABLES
dynpfields = dynpro_values.
这段代码很明显是从屏幕上读取用户输入字段,前两字段不用解释了。第三个字段translate_to_upper也好解释,将用户输入转换为大写。例如我在屏幕上输入aa那么读取的值是AA。dynpfields也很容易,dynpro_values的一个内表定义如下:
dynpro_values TYPE TABLE OF dynpread
只要在里面有字段的名字,那么会自动读到字段的值。其实想想要独到一个字段的值参数就这些,要我也会这么设计。无非是屏幕号,程序名,字段名,但是字段名要是内表结构,因为可能读取多个字段的值。
3.F4IF_INT_TABLE_VALUE_REQUEST
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CONNID'
dynpprog = progname
dynpnr = dynnum
dynprofield = 'CONNECTION'
value_org = 'S'
WINDOW_TITLE = 'just a test'
TABLES
value_tab = values_tab.
这个函数和上面的函数有所区别,它的功能是将自己的内表作为参数传进函数作为input help。参数和签名的都一样,有亮点要注意,一是value_org根据我的测试只能是’S’,c的话就失败!原因还不知道。还有一个就是values_tab内表字段定义的书序和屏幕上字段显示的顺序一样。什么意思了,看看内表的定义:
TYPES: BEGIN OF values,
carrid TYPE spfli-carrid,
CITYFROM type spfli-CITYFROM,
connid TYPE spfli-connid,
END OF values.
再看看input help上字段出现的顺序:
和内表定义是一致的,而且选中一行的话屏幕上会出现的数值是最后一个字段即connid!