ABAP 如何发布odata服务

一、根据DDIC 发布odata服务

1.SE11创建相对应的结构或者表,或者直接使用自建表

2.SEGW-->新建

3.右键-->import-->DDIC

输入你的实体类型名称和DDIC名称

选择你需要的字段

选择主键字段

自动生成对象(每次DDIC的修改都要重新生成)

4.如图位置可以做一些设置筛选和更新排序的属性,供fiori使用

5.右键Runtime Artifacts --》Go to ABAP Workbench 根据需求重定义CURD的方法

6.我这边的需求是一个数据抽取接口。所以我重定义的是GET_ENTITYSET方法

实例代码如下:



    DATA:LT_FILTERS TYPE                   /IWBEP/T_MGW_SELECT_OPTION,
         LS_FILTER  TYPE                   /IWBEP/S_MGW_SELECT_OPTION.
    DATA: LV_TOP        TYPE I,
          LV_SKIP       TYPE I,
          LV_TABLE_SIZE TYPE I.
    DATA:LS_ENTITYSET TYPE ZCL_ZMM_GET_MB51_MPC=>TS_ZMB51.
    DATA: LO_MESSAGE_CONTAINER TYPE REF TO /IWBEP/IF_MESSAGE_CONTAINER.
    DATA: LV_MSGTX    TYPE SYMSGV,
          LV_MSG_TEXT TYPE BAPI_MSG,
          LS_MESSAGE TYPE SCX_T100KEY.
    DATA:S_WERKS TYPE /IWBEP/T_COD_SELECT_OPTIONS.
    DATA:S_MATNR TYPE /IWBEP/T_COD_SELECT_OPTIONS.
    DATA:S_LGORT TYPE /IWBEP/T_COD_SELECT_OPTIONS.
    DATA:S_BUDAT TYPE /IWBEP/T_COD_SELECT_OPTIONS.

    DATA:GT_DATA TYPE STANDARD TABLE OF ZSMM_MB51.

*-get filter for Posting date
    READ TABLE LT_FILTERS WITH TABLE KEY PROPERTY = 'BUDAT' INTO LS_FILTER.
    IF SY-SUBRC = 0.
      S_BUDAT = LS_FILTER-SELECT_OPTIONS.
    ELSE.
      LS_MESSAGE-MSGID = ''.
      LS_MESSAGE-MSGNO = ''.
      LS_MESSAGE-ATTR1 = '过账日期不能为空'.
      RAISE EXCEPTION TYPE /IWBEP/CX_MGW_BUSI_EXCEPTION
        EXPORTING
          TEXTID = LS_MESSAGE.
    ENDIF.
*-get filter
    LT_FILTERS = IO_TECH_REQUEST_CONTEXT->GET_FILTER( )->GET_FILTER_SELECT_OPTIONS( ).
*-get filter for Plant
    READ TABLE LT_FILTERS WITH TABLE KEY PROPERTY = 'WERKS' INTO LS_FILTER.
    IF SY-SUBRC = 0.
      S_WERKS = LS_FILTER-SELECT_OPTIONS.
    ENDIF.
*-get filter for Material number
    READ TABLE LT_FILTERS WITH TABLE KEY PROPERTY = 'MATNR' INTO LS_FILTER.
    IF SY-SUBRC = 0.
      S_MATNR = LS_FILTER-SELECT_OPTIONS.
    ENDIF.
*-get filter for Storage Location
    READ TABLE LT_FILTERS WITH TABLE KEY PROPERTY = 'LGORT' INTO LS_FILTER.
    IF SY-SUBRC = 0.
      S_LGORT = LS_FILTER-SELECT_OPTIONS.
    ENDIF.

*$top and $skip Query Options
    LV_TOP = IO_TECH_REQUEST_CONTEXT->GET_TOP( ).
    LV_SKIP = IO_TECH_REQUEST_CONTEXT->GET_SKIP( ).

    SELECT MKPF~MBLNR
           MKPF~MJAHR
           ZEILE
           VBELN_IM
           BUDAT
           BWART
           MSEG~MATNR
           MAKT~MAKTX
           MENGE
           MEINS
           MSEG~WERKS
           MSEG~LGORT
           T001L~LGOBE
           CHARG
           SOBKZ
    FROM MKPF
    INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND MKPF~MJAHR = MSEG~MJAHR
    INNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR AND MAKT~SPRAS = SY-LANGU
    LEFT JOIN T001L ON MSEG~LGORT = T001L~LGORT AND MSEG~WERKS = T001L~WERKS
    INTO TABLE GT_DATA
    WHERE BUDAT IN S_BUDAT
    AND   MSEG~WERKS IN S_WERKS
    AND   MSEG~LGORT IN S_LGORT
    AND   MSEG~MATNR IN S_MATNR.


*   >> Client Paging (top/skip)
    IF LV_TOP IS NOT INITIAL OR
       LV_SKIP IS NOT INITIAL.
      LOOP AT GT_DATA INTO DATA(LS_DATA).
        IF SY-TABIX > LV_SKIP.
          MOVE-CORRESPONDING LS_DATA TO LS_ENTITYSET.
          APPEND LS_ENTITYSET TO ET_ENTITYSET.
          LV_TABLE_SIZE = LINES( ET_ENTITYSET ).
          IF LV_TOP IS NOT INITIAL AND
             LV_TABLE_SIZE >= LV_TOP.
            EXIT.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ELSE.
*   >> No Paging
      ET_ENTITYSET[] = GT_DATA[]..
    ENDIF.

列举一下几种报错的方法:


第一种直接报错
MESSAGE '条码内容为空!' TYPE 'E'.
MESSAGE '条码内容为空!' TYPE 'I'.
"这种报错只能在/IWFND/ERROR_LOG查询,对方系统无法知道什么原因
第二种,把报错消息写到header里面
*1. Instatiate the Message Container
    DATA: lo_message_container TYPE REF TO /iwbep/if_message_container.

    CALL METHOD me->/iwbep/if_mgw_conv_srv_runtime~get_message_container
      RECEIVING
        ro_message_container = lo_message_container.

    CALL METHOD lo_message_container->add_message
      EXPORTING
        iv_msg_type               = /iwbep/cl_cos_logger=>warning
        iv_msg_id                 = 'ZTEST'
        iv_msg_number             = '000'
        iv_add_to_response_header = abap_true. "add the message to the header
第三种
    DATA: lo_message_container TYPE REF TO /iwbep/if_message_container.
    DATA: l_msgtx    TYPE symsgv,
          l_msg_text TYPE bapi_msg,
          LS_MESSAGE TYPE SCX_T100KEY.


      LS_MESSAGE-MSGID = ''.
      LS_MESSAGE-MSGNO = ''.
      LS_MESSAGE-ATTR1 = '保存数据失败'.
      RAISE EXCEPTION TYPE /IWBEP/CX_MGW_BUSI_EXCEPTION
          EXPORTING
            TEXTID = LS_MESSAGE.

7.双击LOCAL-->Registe

8.assign sap system aliases to odata service
  /n/IWFND/MAINT_SERVICE---> add system alias
  

9.SAP Gateway Client 去做测试

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值