日积月累
曾经迷恋于Delphi的优雅,但Borland已经离我很遥远了。
如日中天的Java,怎么混杂着数不清的括号、纠缠不清的Checked Exception和叫人不胜其烦的XML配置文件。
开发语言的新贵Ruby和Rails,会是Web快速开发领域的王冠吗?
稍嫌笨拙的ABAP,又是如何支撑起SAP这个巨型的企业应用系统?
-
在ABAP程序中调用逻辑数据库
2008-12-13
使用函数: LDB_PROCESS
关键参数:
ldbname:逻辑数据库名称
callback:逻辑数据库的NODE对应的处理函数
selections:调用逻辑数据库的输入条件
相关帮助:
Structure of Logical Databases
Calling a Logical Database Using a Function Module
Independent Calls and the Database Program
遗憾的是在测试逻辑数据库PNM的时候,没有解决在一个程序中多次调用的问题。
具体的例子:
*&---------------------------------------------------------------------*
*& Report Z_READ_ROUTINE_LDB
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*REPORT z_read_routine_ldb.
*&---------------------------------------------------------------------*
*& 输出ALV格式的报表需要INCLUDE的文件
*&---------------------------------------------------------------------*
INCLUDE zreusealv.DATA: callback TYPE TABLE OF ldbcb,
seltab TYPE TABLE OF rsparams.FIELD-SYMBOLS: <fs> TYPE rsparams.
DATA: BEGIN OF itab OCCURS 0,
parent like mara-matnr,
vornr LIKE plpod-plnfl,
matnr LIKE plmzd-matnr,
maktx LIKE plmzd-maktx,
END OF itab.
DATA: BEGIN OF it_mara OCCURS 0,
matnr LIKE mara-matnr,
END OF it_mara.************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
it_mara-matnr = '7200-01601'.
APPEND it_mara.it_mara-matnr = '7200-01602'.
APPEND it_mara.* 设置已分配工序的组件回调函数
* 设置已分配工序的组件回调函数
* 设置未分配工序的组件回调函数
PERFORM set_callback_form
USING: 'PLPOD' 'CALLBACK_PLPOD',
'PLMZD' 'CALLBACK_PLMZD',
'PLMZN' 'CALLBACK_PLMZN'.
LOOP AT it_mara.
IF seltab[] IS INITIAL.
PERFORM set_selection_screen
USING: 'P' 'PN_PLNTY' 'N',
'S' 'PN_MATNR' it_mara-matnr,
'S' 'PN_WERKS' '1000',
'P' 'PN_DATUV' sy-datum,
'P' 'MAT' 'X',
'P' 'PN_CAP' 'X',
'P' 'PN_CAPID' 'PP01',
'P' 'PN_MEHRS' 'X'.
ELSE.
READ TABLE seltab ASSIGNING <fs> INDEX 2.
IF sy-subrc = 0.
<fs>-low = it_mara-matnr.
ENDIF.
ENDIF.CALL FUNCTION 'LDB_PROCESS'
EXPORTING
ldbname = 'PNM'
variant = ' '
TABLES
callback = callback
selections = seltab
EXCEPTIONS
ldb_not_reentrant = 1
ldb_incorrect = 2
ldb_already_running = 3
ldb_error = 4
ldb_selections_error = 5
ldb_selections_not_accepted = 6
variant_not_existent = 7
variant_obsolete = 8
variant_error = 9
free_selections_error = 10
callback_no_event = 11
callback_node_duplicate = 12
OTHERS = 13.IF sy-subrc <> 0.
WRITE: 'Exception with SY-SUBRC', sy-subrc.
ENDIF.
ENDLOOP.************************************************************************
* END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
* 输出报表的抬头
REFRESH it_fieldcat.PERFORM sub_fill_fieldcat_alv
USING: 'TAB_1' 'MARC' 'PARENT' '成品物料',
'TAB_1' 'MARC' 'MATNR' '物料号',
'TAB_1' 'MAKT' 'MAKTX' '物料描述',
'TAB_1' 'PLPO' 'VORNR' '工序'.* 输出报表
PERFORM print_report_alv TABLES itab.*&---------------------------------------------------------------------*
*& Form callback_plpod
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_plpod USING name TYPE ldbn-ldbnode
wa TYPE plpod
evt TYPE c
check TYPE c.
CLEAR itab.
itab-vornr = wa-vornr.
ENDFORM. "callback_plpod*&---------------------------------------------------------------------*
*& Form CALLBACK_PLMZD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_plmzd USING name TYPE ldbn-ldbnode
wa TYPE plmzd
evt TYPE c
check TYPE c.
itab-parent = it_mara-matnr.
itab-matnr = wa-matnr.
itab-maktx = wa-maktx.
APPEND itab.
ENDFORM. "CALLBACK_PLMZD
*&---------------------------------------------------------------------*
*& Form CALLBACK_PLMZN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NAME text
* -->WA text
* -->EVT text
* -->CHECK text
*----------------------------------------------------------------------*
FORM callback_plmzn USING name TYPE ldbn-ldbnode
wa TYPE plmzn
evt TYPE c
check TYPE c.
CLEAR itab.
itab-parent = it_mara-matnr.
itab-matnr = wa-matnr.
itab-maktx = wa-maktx.
APPEND itab.
ENDFORM. "CALLBACK_PLMZN*&---------------------------------------------------------------------*
*& Form set_callback_form
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->NODE text
* -->FORM_NAME text
*----------------------------------------------------------------------*
FORM set_callback_form USING node_name form_name.
DATA: callback_wa LIKE ldbcb.
callback_wa-ldbnode = node_name.
callback_wa-get = 'X'.
* callback_wa-get_late = 'X'.
callback_wa-cb_prog = sy-repid.
callback_wa-cb_form = form_name.
APPEND callback_wa TO callback.
ENDFORM. "set_callback_form*&---------------------------------------------------------------------*
*& Form set_selection_screen
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->KIND text
* -->NAME text
* -->LOW text
*----------------------------------------------------------------------*
FORM set_selection_screen USING kind selname low.
DATA: seltab_wa LIKE rsparams.
seltab_wa-kind = kind.
seltab_wa-selname = selname.
seltab_wa-sign = 'I'.
seltab_wa-option = 'EQ'.
seltab_wa-low = low.
APPEND seltab_wa TO seltab.
ENDFORM. "set_callback_form随机文章:
发现Open Sql转换为Oracle Native Sql的一个问题 2009-12-10记录一下权限对象相关的几个事务码 2009-12-07对报表屏幕修改后传出到PRD系统不生效的解决方法 2009-12-05两个生产订单方面的增强 2009-11-21
收藏到:Del.icio.us


