刚开始的时候不会用句柄,用表头和内表的赋值方式也可以解决问题,不过感觉不太好用,这里介绍下句柄的使用方法吧 。

首先SMARTFORMS单看赋值来说,和函数基本上大同小异,表格接口部分就是和程序的数据交互,我们可以传输表,或者结构,当然我这里加了两个句柄(其实就是两个自定义字段),句柄的使用方法和EXPORT/IMPORT很相似。

ABAP SMARTFORMS中有关句柄的使用

在全局定义中,把句柄中的数据拿出来初始化,放到SMARTFORMS里面我们好调用,注意输出参数这里需要在全局数据中定义好,然后如果用到类型来定义全局数据,可以在类型中自己写,保证和外面程序的数据字段一致就好呗。

ABAP 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原理差不多,都是玩内存地址的,抄抄代码都可以

相关文章: