SAP 调用SDF的例子,逻辑数据库

本文详细介绍了ABAP逻辑数据库的概念及应用方式,包括如何通过逻辑数据库替代OpenSQL语句进行数据读取,以及如何查看逻辑数据库的结构和选择屏幕等内容。通过实际案例展示了逻辑数据库的构建过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REPORT  YSCQ_TEST2.

TABLES:SKA1,SKB1,SKC1A.
field-symbols: <fs_field> type any.
data: l_seq(2) type n,
      L_FIELD(20).
data: BEGIN OF lt_total OCCURS 0 ,
      mon(2) type n,
      ums like skc1c-um01s,
      umh like skc1c-um01s,
      umo like skc1c-um01s,
      umk like skc1c-um01s,
  end of lt_total.
data: ls_total LIKE line of lt_total.

TYPE-POOLS: SLIS.
TYPE-POOLS: RSDS, RSFS.
DATA: FIELDCAT TYPE TABLE OF slis_fieldcat_alv.

DATA: I_layout TYPE SLIS_LAYOUT_ALV.
DATA: L_TITLE TYPE LVC_TITLE.
DATA: PGM LIKE SY-REPID.

*-------------------------------------------------------------
DATA: LT_SPFLI LIKE TABLE OF SPFLI,
      LS_SPFLI LIKE  LINE OF LT_SPFLI.
DATA: LT_SKC1C LIKE TABLE OF SKC1C,
      LS_SKC1C LIKE LINE OF LT_SKC1C.
*-------------------------------------------------------------
DATA: CALLBACK TYPE TABLE OF LDBCB,
      CALLBACK_WA LIKE LINE OF CALLBACK.

DATA: SELTAB TYPE TABLE OF RSPARAMS,
      SELTAB_WA LIKE LINE OF SELTAB.

DATA: TEXPR TYPE RSDS_TEXPR,
      FSEL  TYPE RSFS_FIELDS.
*-------------------------------------------------------------
SELECT-OPTIONS: SD_SAKNR    FOR  SKA1-SAKNR MATCHCODE OBJECT SAKO.
SELECT-OPTIONS: SD_BUKRS    FOR  SKB1-BUKRS.
SELECT-OPTIONS: SD_GJAHR    FOR  SKC1A-GJAHR .
*-------------------------------------------------------------
 
START-OF-SELECTION.
  PERFORM FRM_BUILD_SELECTIONS. “SELTAB
  PERFORM FRM_BUILD_CALLBACK.    ”CALLBACK


  CALL FUNCTION 'LDB_PROCESS'
    EXPORTING
      LDBNAME                     = 'SDF'
    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.

END-OF-SELECTION.

  LOOP AT LT_SKC1C INTO LS_SKC1C.
    CLEAR:L_SEQ.
    clear:LS_TOTAL.
    DO 16 TIMES.
      ADD 1 TO L_SEQ.
      MOVE L_SEQ  TO LS_TOTAL-MON.
      CONCATENATE 'LS_SKC1C-UM' L_SEQ 'S' INTO L_FIELD.
      ASSIGN (L_FIELD) TO <FS_FIELD>.
      MOVE <FS_FIELD> TO LS_TOTAL-UMS.
      CONCATENATE 'LS_SKC1C-UM' L_SEQ 'H' INTO L_FIELD.
      ASSIGN (L_FIELD) TO <FS_FIELD>.
      MOVE <FS_FIELD> TO LS_TOTAL-UMH.
      CONCATENATE 'LS_SKC1C-UM' L_SEQ 'O' INTO L_FIELD.
      ASSIGN (L_FIELD) TO <FS_FIELD>.
      MOVE <FS_FIELD> TO LS_TOTAL-UMO.
      LS_TOTAL-UMK =        LS_SKC1C-UMSAV + LS_TOTAL-UMO  .
      MOVE LS_TOTAL-UMK TO LS_SKC1C-UMSAV.
      COLLECT LS_TOTAL INTO LT_TOTAL .
    ENDDO.

  ENDLOOP.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
*      i_structure_name = 'SKC1C'
      I_INTERNAL_TABNAME = 'LT_TOTAL'
      I_PROGRAM_NAME = SY-REPID
      I_INCLNAME   = SY-REPID
       i_buffer_active  = 'Y'
    CHANGING
      ct_fieldcat      = FIELDCAT
    EXCEPTIONS
      OTHERS           = 0.
  PGM = SY-REPID.
  I_LAYOUT-colwidth_optimize = 'X'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM      = PGM
      I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
      IT_FIELDCAT             = FIELDCAT
      is_layout               = I_layout
      I_SAVE                  = 'A'
    TABLES
      T_OUTTAB                = LT_TOTAL                    " LT_SKC1C
    EXCEPTIONS
      PROGRAM_ERROR           = 1
      OTHERS                  = 2.
*&---------------------------------------------------------------------*
*&      Form  CALLBACK_LDB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->NAME       text
*      -->WA         text
*      -->EVT        text
*      -->CHECK      text
*----------------------------------------------------------------------*
FORM CALLBACK_LDB USING NAME  TYPE LDBN-LDBNODE
                          WA
                          EVT   TYPE C
                          CHECK TYPE C.

  CASE NAME.
    WHEN 'SPFLI'.
      MOVE-CORRESPONDING WA TO LS_SPFLI.
      APPEND LS_SPFLI TO LT_SPFLI.
    WHEN 'SKC1C'.
      MOVE-CORRESPONDING WA TO LS_SKC1C.
      APPEND LS_SKC1C TO LT_SKC1C.
  ENDCASE.
ENDFORM.                    "CALLBACK_LDB
*&---------------------------------------------------------------------*
*&      Form  FRM_FILL_CALLBACK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_BUILD_CALLBACK .
  CALLBACK_WA-LDBNODE    = 'SKC1C'.
  CALLBACK_WA-GET      = 'X'.
  CALLBACK_WA-GET_LATE    = ' '.
  CALLBACK_WA-CB_PROG     = SY-REPID.
  CALLBACK_WA-CB_FORM     = 'CALLBACK_LDB'.
  APPEND CALLBACK_WA TO CALLBACK.

ENDFORM.                    " FRM_FILL_CALLBACK
*&---------------------------------------------------------------------*
*&      Form  FRM_BUILD_SELECTIONS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_BUILD_SELECTIONS .
  LOOP AT SD_SAKNR.
    MOVE-CORRESPONDING SD_SAKNR TO SELTAB_WA.
    MOVE 'SD_SAKNR' TO SELTAB_WA-SELNAME.
    APPEND SELTAB_WA TO SELTAB.
  ENDLOOP.

  LOOP AT SD_BUKRS.
    MOVE-CORRESPONDING SD_BUKRS TO SELTAB_WA.
    MOVE 'SD_BUKRS' TO SELTAB_WA-SELNAME.
    APPEND SELTAB_WA TO SELTAB.
  ENDLOOP.
  LOOP AT SD_GJAHR.
    MOVE-CORRESPONDING SD_GJAHR TO SELTAB_WA.
    MOVE 'SD_GJAHR' TO SELTAB_WA-SELNAME.
    APPEND SELTAB_WA TO SELTAB.
  ENDLOOP.
  CONCATENATE 'SD_CURTP ICP' '10' INTO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
  CONCATENATE 'SD_CURTP IEQ' '10' INTO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
  CONCATENATE 'SD_ITUSR IEQ' '' INTO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
  CONCATENATE 'SD_GSB_S ICP' '*' INTO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
  CONCATENATE 'SD_RTCUR ICP' '*' INTO SELTAB_WA.
  APPEND SELTAB_WA TO SELTAB.
ENDFORM.                    " FRM_BUILD_SELECTIONS

开发上面程序,需要知道SDF的结构和选择屏幕,怎么看结构和选择屏幕,as show below.

逻辑数据库提供了另外一种获得数据的方式,它可以代替Open SQL语句从数据库中读取数据。

是一种事先定义好了的数据库读取ABAP程序。

1:SE36  (创建,显示,修改)

2: 源代码可以看SDF的逻辑,选择可以看屏幕选择字段(ABAP使用)

选择,

想更深入学习,看这个链接

Logical Databases逻辑数据库_ChampaignWolf的博客-优快云博客_逻辑数据库

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值