LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SAP ERP系统如何使用中间数据库与其它系统进行数据交互?

admin
2024年3月13日 17:3 本文热度 558
SAP系统与外部系统之间进行数据交换和通信的接口方式有很多种,比如常用的接口技术有RFC、BAPI、ALE、Webservice、RESTful、中间数据库等等,不同的接口形式具有不同的特点和适用场景,可以根据具体需求选择合适的接口形式来实现系统间的数据交互。
前面文章中已介绍Webservice和RESTful的接口技术在SAP中应用,具体文章连接如下,本文重点介绍下中间数据库作为系统间交互的接口方式的应用。
SAP软件如何发布和调用RESTful接口

SAP软件Webservice接口技术应用

中间数据库作为系统间交互数据的基本机制

一般会部署一个专门的数据平台,不同业务系统不会直接将要传输的数据传输给其它业务系统,而是会传输给中间的数据库,要使用数据的业务系统,要主动去中间数据库取自己需要的数据(如下图所示
比如:系统A会将数据写入至中间数据库,B系统或系统C如果需要用到系统A的数据,它会到中间数据库去取需要的数据,反之亦然。

使用中间数据库作为系统间交互数据的优缺点分析

优点:
1、实现比较简单,对现有其它系统学习成本要求比较低,基本不需要考虑其它系统如何与SAP进行连接。
2、外部系统和SAP系统相对独立,接口不涉及双方内部的结构,数据的安全性得到保证。
缺点:
1、因为数据发送方的系统在给中间数据库写入数据时,数据接收方的系统并不知道,只能靠定时任务来获取最新数据,实时性不够高。
2、多系统集中地使用中间数据库,意味着如果这个数据库出现问题,就有可能大面积影响相关系统的正常运转。

SAP ERP系统如何使用中间数据库

SAP连接外部数据库通常是要在DBCO中进行外部数据源配置。
SAP系统利用DBOC建立与中间数据库的关联,利用SQL或者TSQL直接对数据库进行操作,其它系统也对该中间表进行操作。

SAP ERP系统连接中间数据库的配置

1、配置连接数据库
执行事务码DBCO,点新条目按钮,填写如下图所示信息
DB连接:输入连接的名称
DBMS:MySQL选择MSS(目前SAP中可以配置数据源的数据库有如下)
用户名:输入用户名
数据库口令:两次输入数据库密码
连接信息:这里的连接MySQL的连接字符串,指定主机IP、数据库名即可,其它数据库参数名略有不同。
永久:勾上
2、测试是否联通
事务代码SE38 
程序名 :ADBC_TEST_CONNECTION
输入连接名称运行 
上图表示可以连通中间数据库。

下面通过一个例子来介绍下SAP如何对中间数据库的数据进行插入/更新/删除等操作。

业务需求如下:
某公司需要将SAP系统创建的采购申请(PR)推送至BPM(业务流程管理系统)进行审批,该公司使用中间数据库的方式进行数据交互。
大体业务流程如下:
1.SAP系统取未审批的采购申请(PR)数据,通过定时任务推送到中间数据库表。
2.BPM系统定时从中间数据库表取SAP推送过来的PR的新数据,生成审批流程。
3.BPM生成审批流后和审批完成都会更新中间数据库的PR状态。
4. SAP修改PR时候需要取中间数据库中该采购申请PR的状态,如果PR在审批中的状态,不能进行修改。
5. BPM审批完成后调用接口自动审批SAP中采购申请。
实现上面需求的主要关键代码示例

1.SAP取出未审批的PR数据

TYPES : BEGIN OF TY_DATA,

BANFN   TYPE BANFN,  "采购申请号

BNFPO   TYPE BNFPO,  "采购申请项目

MATNR   TYPE MATNR,  "物料编码

TXZ01   TYPE TXZ01,  "物料描述

MENGE   TYPE MENGE,  "数量

MEINS   TYPE MEINS,  "数量单位

STATUS(1)  TYPE C,   "状态

END OF ty_data.

DATA : GT_EBAN TYPE TABLE OF TY_DATA,

GS_EBAN TYPE TY_DATA.

DATA :V_EXC_REF TYPE REF TO CX_SY_NATIVE_SQL_ERROR,

V_ERRTXT TYPE STRING,

V_SQLERR_REF TYPE REF TO CX_SQL_EXCEPTION.


DATA:Z_CON_NAME TYPE CHAR40 ."VALUE 'BPM782'.


Z_CON_NAME  = 'BPM80'. "连接名称       


CLEAR: GS_EBAN,GT_EBAN.

SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_EBAN

FROM EBAN

      WHERE WERKS = '171O'AND FRGKZ = 'X' AND  LOEKZ <> 'X'.

2.连接中间数据库

*&---------------------------------------------------------------------*

*&     FRM_CONNECT_EXT_DB .

*&---------------------------------------------------------------------*

*      1.连接外部数据库

*----------------------------------------------------------------------*

FORM FRM_CONNECT_EXT_DB .


  TRY.

      " 连接

      EXEC SQL.

        CONNECT TO :Z_CON_NAME   "连接名称

      ENDEXEC.

    CATCH CX_SY_NATIVE_SQL_ERROR INTO V_EXC_REF.

      V_ERRTXT = V_EXC_REF->GET_TEXT( ).

    CATCH CX_SQL_EXCEPTION INTO V_SQLERR_REF.

      IF V_SQLERR_REF->DB_ERROR = 'X'.

        V_ERRTXT = V_SQLERR_REF->SQL_MESSAGE.

      ELSE.

        V_ERRTXT = V_SQLERR_REF->INTERNAL_ERROR.

      ENDIF.

  ENDTRY.

  IF V_ERRTXT IS NOT  INITIAL.

    E_STATUS = 'E'.

    E_MESSAGE =  V_ERRTXT.

  ELSE.

    E_STATUS = 'S'.

    E_MESSAGE =  '连接成功!'.

  ENDIF.


ENDFORM.

3.将取出PR数据推送至中间数据库

*&---------------------------------------------------------------------*

*&   FRM_INSERT_EXT_DB

*&---------------------------------------------------------------------*

*  3.插入多条数据到外部数据库

*----------------------------------------------------------------------*

FORM FRM_INSERT_EXT_DB .


  TRY.

    LOOP AT GT_EBAN INTO GS_EBAN.

      EXEC SQL.

        INSERT INTO ZPR_EBAN_DATA

        ( BANFN,

          BNFPO,

          MATNR,

          TXZ01,

          MENGE,

          MEINS,

          STATUS )


         VALUES

        ( :GS_EBAN-BANFN,

          :GS_EBAN-BNFPO,

          :GS_EBAN-MATNR,

          :GS_EBAN-TXZ01,

          :GS_EBAN-MENGE,

          :GS_EBAN-MEINS,

          :GS_EBAN-STATUS

        )

      ENDEXEC.


      IF SY-SUBRC = 0.

        EXEC SQL.

          COMMIT

        ENDEXEC.

      ELSE.

        EXEC SQL.

          ROLLBACK

        ENDEXEC.

      ENDIF.


    ENDLOOP.


  ENDTRY.


ENDFORM.

4.更新中间数据库的值

*&---------------------------------------------------------------------*

*&   FRM_UPDATE_EXT_DB

*&---------------------------------------------------------------------*

*  4.更新外部数据库

*----------------------------------------------------------------------*

FORM FRM_UPDATE_EXT_DB USING P_VBELN P_BNFPO .


  TRY.

      EXEC SQL.

        UPDATE ZPR_EBAN_DATA SET STATUS  =  1 WHERE BANFN = :P_BANFN AND BNFPO = :P_BNFPO    "更新表ZPR_EBAN_DATA中PR的状态

      ENDEXEC.

      COMMIT WORK AND WAIT.

    CATCH CX_SY_NATIVE_SQL_ERROR INTO EXC_REF.

      ERROR_TEXT = EXC_REF->GET_TEXT( ).

      EXEC SQL.

        DISCONNECT :L_CON_NAME

      ENDEXEC.

      MESSAGE E006(Z001) WITH ERROR_TEXT.

  ENDTRY.


ENDFORM.                    "FRM_UPDATE_EXT_DB

5.查询中间数据库到SAP程序内表

*&---------------------------------------------------------------------*

*&   FRM_SELECT_EXT_DB_ALL

*&---------------------------------------------------------------------*

*   5.1.查询数据,查询多条数据到内表

*----------------------------------------------------------------------*


FORM FRM_SELECT_EXT_DB_ALL .


  TRY.

    EXEC SQL PERFORMING FRM_APPEND_DATA.

      SELECT  BANFN,

              BNFPO,

              MATNR,

              TXZ01,

              MENGE,

              MEINS,

              STATUS

       INTO :GS_EBAN

       FROM ZPR_EBAN_DATA

    ENDEXEC.

  ENDTRY.


ENDFORM.                    "FRM_SELECT_EXT_DB_ALL


*&---------------------------------------------------------------------*

*&   FRM_APPEND_DATA.

*&---------------------------------------------------------------------*

*   5.2.查询数据,查询多条数据到内表

*----------------------------------------------------------------------*

FORM FRM_APPEND_DATA .

  APPEND GS_EBAN TO GT_EBAN.

  CLEAR  GS_EBAN.

ENDFORM.                    "FRM_APPEND_DATA

6.删除中间数据库

*&---------------------------------------------------------------------*

*&   FRM_APPEND_DATA.

*&---------------------------------------------------------------------*

*   6.删除外部数据库表数据

*----------------------------------------------------------------------*

FORM FRM_DELETE_DB .


  TRY.

      EXEC SQL.

        DELETE ZPR_EBAN_DATA.

      ENDEXEC.

      IF SY-SUBRC = 0.

        EXEC SQL.

          COMMIT

        ENDEXEC.

      ELSE.

        EXEC SQL.

          ROLLBACK

        ENDEXEC.

      ENDIF.

    CATCH CX_SY_NATIVE_SQL_ERROR INTO V_EXC_REF.

      V_ERRTXT = V_EXC_REF->GET_TEXT( ).

    CATCH CX_SQL_EXCEPTION INTO V_SQLERR_REF.

      IF V_SQLERR_REF->DB_ERROR = 'X'.

        V_ERRTXT = V_SQLERR_REF->SQL_MESSAGE.

      ELSE.

        V_ERRTXT = V_SQLERR_REF->INTERNAL_ERROR.

      ENDIF.

  ENDTRY.


ENDFORM.                    "FRM_DELETE_DB

7.断开与中间数据库连接

*&---------------------------------------------------------------------*

*&   FRM_DISCONNECT_EXT_DB .

*&---------------------------------------------------------------------*

*    7.关闭连接

*----------------------------------------------------------------------*

FORM FRM_DISCONNECT_EXT_DB .

  EXEC SQL.

    DISCONNECT :l_CON_NAME

  ENDEXEC.

ENDFORM.                    "FRM_DISCONNECT_EXT_DB


该文章在 2024/3/14 9:58:17 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved