二维码

[Smart] ABAP程序传值到Smart Forms的四种方式

Twilight发表于 2015-06-04 10:18吉他辉 最后回复于 2017-09-11 10:52 [复制链接] 3513 3

方法一:通过SMARTForms接口方式
最通常的用法是通过SE11中建立STRUCTURE ZXXX,在REPORT程序中申明此结构的数据类型,在SMARTFORMS中的FORM接口申明同样的结构后就可以传值了(itabTYPE ZXXX)。

方法二:通过指针方式
1、程序中申明一个结构
  1. DATA:BEGIN OF it_head,
  2.        fkdat TYPE vbrk-fkdat,
  3.        vbeln TYPE vbrk-vbeln,
  4.      END OF it_head.
复制代码

2、SMARTFORMS中相应的三处操作
全局定义->类型 申明结构
  1. TYPES:BEGIN OF wy_head,
  2.         fkdat TYPE vbrk-fkdat,
  3.         vbeln TYPE vbrk-vbeln,
  4.       END OF  wy_head.
复制代码

PS:1和2,这两个结构是要一样的,因为在传值时会把相同字段的进行传递。

全局定义->全局数据 申明变量,申明的类型是在全局定义-类型中已申明的结构,若是申明一个内表,则TYPE改成TYPE TABLE OF
  1. WA_HEAD  TYPE WY_HEAD
复制代码

全局定义->初始化 进行数据的传递操作,也就是把REPORT程序中的值传到SMARTFORMS中。
传递STRUCTURE
  1. DATA: field(70) TYPE c.
  2. FIELD-SYMBOLS: <dbcnt> TYPE ANY TABLE,
  3.                <wa>    TYPE any.
  4. field = '(ZSDST0009)IT_HEAD'.       "要加程序名,不然程序无法知道该表从哪里取得
  5. ASSIGN (field) TO <wa>.
  6. IF sy-subrc = 0.
  7.   wa_head = <wa>.
  8. ENDIF.
  9. IF <wa> IS ASSIGNED.
  10.   UNASSIGN <wa>.
  11. ENDIF.
复制代码

传递内表
  1. DATA: field(50).
  2. FIELD-SYMBOLS: <f> TYPE any.
  3. field = '(zxxxxx)output[]'.      "zxxxxx为程序名,output为内表名
  4. ASSIGN (field) TO <f>.
  5. gt_table = <f>.
复制代码

这样,SMARTFORM就取得了ZXXXXX这个程序,OUTPUT这个内表的值,并将之赋给了GT_TABLE。特别注意  程序中的表定义和smartform类型里表定义 必须一致,否则 GT_TABLE[] =<f>.错误。

方法三:通过SAP内存的方式
SAP内存语句含义:
  • 使用EXPORT TO MEMORY语句在内存中存储数据对象。
  • 使用IMPORT FROM MEMORY语句从内存中读取数据对象。
  • 使用FREE MEMORY语句从内存中删除数据簇。

若是传递一两个很单一的变量,比较简单的做法是在REPORT程序中用EXPORT,在SMARTFORMS中用IMPORT。
IMPORT和EXPORT我们一般能不用就不用,后续维护难以跟踪。

方法四:通过数据库中的簇数据库方式
SAP数据库中的簇数据库语句含义:
  • 使用EXPORT TO DATABASE语句将数据对象存储到簇数据库中。
  • 使用IMPORT FROM DATABASE语句为数据簇生成目录表,并从簇数据库中取数据对象。
  • 使用DELETE FROM DATABASE语句从簇数据库中删除数据簇。

  1. TYPES buffer_id(80) TYPE c.
  2. DATA wa_indx TYPE indx.
  3. DATA: l_detail_name(80).
  4. *------------------------------------------------------------------*
  5. FORM save_to_buffer USING t TYPE table typeid TYPE c .
  6.   wa_indx-aedat = sy-datum.
  7.   wa_indx-usera = sy-uname.
  8.   wa_indx-pgmid = sy-repid.
  9. *  PERFORM get_unique_id USING buff_id CHANGING buff_id.
  10.   EXPORT t TO DATABASE indx(hk) ID typeid FROM wa_indx.
  11. ENDFORM.
  12. *------------------------------------------------------------------*
  13. FORM clear_buffer USING buffid TYPE c.
  14.   DELETE FROM DATABASE indx(hk) ID buffid.
  15. ENDFORM.                    "Clear_Buffer
  16. *------------------------------------------------------------------*
  17. FORM restor_buffer USING typeid TYPE c CHANGING t TYPE table.
  18.   IMPORT t FROM DATABASE indx(hk) ID typeid.
  19. ENDFORM.                    "Restor_buffer\
  20. *------------------------------------------------------------------*
  21. CONCATENATE sy-repid 'DETAILS' sy-uname sy-uzeit INTO l_detail_name.  "id号,用来区分database,唯一化
  22. savebuffer it_detail[] l_detail_name.

  23. CALL FUNCTION lf_fm_name
  24.   EXPORTING
  25. l_detail_name        = l_detail_name .

  26. CLEAR l_detail_name.
复制代码

SMARTFORMS中 TYPES与方法2相同要定义与程序中内表相同;但在INITIALIZATION中不同
簇数据库 1.jpg
INITIALIZATION中执行RESTORE_BUFFER
簇数据库 2.jpg
FROM ROUTINES中要定义RESTORE_BUFFER
簇数据库 3.jpg
回复

使用道具 举报

zhongguomao
关注ing。。。。。
回复

使用道具 举报

吉他辉
学习ABAP程序传值到Smart Forms的四种方式
回复 支持 反对

使用道具 举报

吉他辉
ABAP程序传值到Smart Forms的四种方式
回复 支持 反对

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表