最通常的用法是通过SE11中建立STRUCTURE XXX(表则没用),在REPORT中申明此结构的数据类型,在SMARTFORMS中的FORM接口申明同样的结构后就可以传值了(itabTYPE XXX)
第二种是不用建立STRUCTURE,省了一个建表的麻烦,不过还是挺麻烦的!
1).程序中申明一个TYPE
2).SMARTFORMS中在全局定义中要在三处地方进行相应的操作
程序中:
DATA:BEGIN OF it_head,
fkdat TYPE vbrk-fkdat,
vbeln TYPE vbrk-vbeln,
END OF it_head.
SMARTFORMS全局定义的类型中:
TYPES:BEGIN OF wy_head,
fkdat TYPE vbrk-fkdat,
vbeln TYPE vbrk-vbeln,
END OF wy_head.
这两个结构是要一样的,因为在传值时会把相同字段的进行传递。
WA_HEAD TYPE WY_HEAD
传递STRUCTURE
DATA: field(70) TYPE c.
FIELD-SYMBOLS: <dbcnt> TYPE ANY TABLE ,
<wa> TYPE ANY.
field = '(ZSDST0009)IT_HEAD'. "要加程序名,不然程序无法知道该表从哪里取得
ASSIGN (field) TO <wa>.
IF sy-subrc = 0.
wa_head = <wa>.
ENDIF.
IF <wa> IS ASSIGNED.
UNASSIGN <wa>.
ENDIF.
这是值的初始化也就是值传递的过程。
传递内表
最后在 全局定义->初始化 这个TAB页下写下面的代码:
DATA: field(50).
FIELD-SYMBOLS: <f> TYPE ANY.
field = '(zxxxxx)output[]'. "zxxxxx为程序名,output为内表名
assign (field) to <f>.
gt_table = <f>.
这样,SMARTFORM就取得了ZXXXXX这个程序,OUTPUT这个内表的值,并将之赋给了GT_TABLE.
特别注意 程序中的表定义和smartform类型里表定义 必须一致,否则 GT_TABLE[] =<f>.错误。
若是传递一两个很单一的变量,比较简单的做法是在REPORT中 EXPORT这个变量,在SMARTFORMS中IMPORT这个变量,两句话搞定.
还有一种方法,这种写法个人也是第一次看到,暂时还不知道优缺点点
程序中这样写:
TYPES buffer_id(80) TYPE c. DATA wa_indx TYPE indx. DATA: l_detail_name(80). *----------------------------------------------------------------------------------*
FORM save_to_buffer USING t TYPE table typeid TYPE c . wa_indx-aedat = sy-datum. wa_indx-usera = sy-uname. wa_indx-pgmid = sy-repid. * PERFORM get_unique_id USING buff_id CHANGING buff_id. EXPORT t TO DATABASE indx(hk) ID typeid FROM wa_indx. ENDFORM.
*----------------------------------------------------------------------------------*
FORM clear_buffer USING buffid TYPE c. DELETE FROM DATABASE indx(hk) ID buffid. ENDFORM. "Clear_Buffer
*----------------------------------------------------------------------------------*
FORM restor_buffer USING typeid TYPE c CHANGING t TYPE table. IMPORT t FROM DATABASE indx(hk) ID typeid. ENDFORM. "Restor_buffer\
*----------------------------------------------------------------------------------*
CONCATENATE sy-repid 'DETAILS' sy-uname sy-uzeit INTO l_detail_name. ”id号,用来区分DATABASE,唯一化 savebuffer it_detail[] l_detail_name.
CALL FUNCTION lf_fm_name EXPORTING . . . l_detail_name = l_detail_name .
clearbuffer l_detail_name. |
|
SMARTFORMS中 TYPES与方法2相同要定义与程序中内表相同;但在INITIALIZATION中不同
INITIALIZATION中执行RESTORE_BUFFER。
FROM ROUTINES中要定义RESTORE_BUFFER
http://blog.csdn.net/iamah/article/details/7590411