刚开始的时候不会用句柄,用表头和内表的赋值方式也可以解决问题,不过感觉不太好用,这里介绍下句柄的使用方法吧 。
首先SMARTFORMS单看赋值来说,和函数基本上大同小异,表格接口部分就是和程序的数据交互,我们可以传输表,或者结构,当然我这里加了两个句柄(其实就是两个自定义字段),句柄的使用方法和EXPORT/IMPORT很相似。
在全局定义中,把句柄中的数据拿出来初始化,放到SMARTFORMS里面我们好调用,注意输出参数这里需要在全局数据中定义好,然后如果用到类型来定义全局数据,可以在类型中自己写,保证和外面程序的数据字段一致就好呗。
然后我们看下程序中如何写:
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = p_form
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
fm_name = fm_name
EXCEPTIONS
no_form = 1
no_function_module = 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.
*smartforms中的内存地址给句柄
CONCATENATE 'ZMM_HDR' sy-uzeit INTO prt_handler1 .
CONCATENATE 'ZMM_ITEM' sy-uzeit INTO prt_handler2 .
* 将内表数据传输到数据簇表里
wa_indx-aedat = sy-datum .
wa_indx-usera = sy-uname .
wa_indx-pgmid = sy-repid .
CLEAR: wa_hdr,it_output[].
MOVE-CORRESPONDING p_out TO wa_hdr.
MOVE-CORRESPONDING p_out TO it_output.
EXPORT wa_hdr TO DATABASE indx(hk) ID prt_handler1 FROM wa_indx .
EXPORT it_output TO DATABASE indx(hk) ID prt_handler2 FROM wa_indx .
DATA : output_opt TYPE ssfcompop.
output_opt-rqposname ='Local'.
output_opt-tdimmed = 'X'.
CALL FUNCTION fm_name
EXPORTING
prt_handler1 = prt_handler1
prt_handler2 = prt_handler2
output_options = output_opt
EXCEPTIONS
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
DELETE FROM DATABASE indx(hk) ID prt_handler1.
DELETE FROM DATABASE indx(hk) ID prt_handler2.
这个就很好理解了,和EXPORT/IMPORT原理差不多,都是玩内存地址的,抄抄代码都可以