一、根据DDIC 发布odata服务
1.SE11创建相对应的结构或者表,或者直接使用自建表
![](https://img-blog.csdnimg.cn/img_convert/9fc2f9176486c6b7f578078ef5259395.png)
2.SEGW-->新建
![](https://img-blog.csdnimg.cn/img_convert/5496b35efb0161df47066a0410cb220b.png)
3.右键-->import-->DDIC
![](https://img-blog.csdnimg.cn/img_convert/8ae3fdc2e1ad09d1e7d53561367f8fa8.png)
输入你的实体类型名称和DDIC名称
![](https://img-blog.csdnimg.cn/img_convert/76ce488c89019d5b3a28500460765a87.png)
选择你需要的字段
![](https://img-blog.csdnimg.cn/img_convert/3bfe01c7f62028cb676121e53f2834da.png)
选择主键字段
![](https://img-blog.csdnimg.cn/img_convert/61cdbb8da3fc32536d79a7cf3bba829d.png)
自动生成对象(每次DDIC的修改都要重新生成)
![](https://img-blog.csdnimg.cn/img_convert/a91a1bab41bc1fa8743cb023909ff0a7.png)
4.如图位置可以做一些设置筛选和更新排序的属性,供fiori使用
![](https://img-blog.csdnimg.cn/img_convert/5f41f8a1a82c47eb21e65a6a056d6fa4.png)
5.右键Runtime Artifacts --》Go to ABAP Workbench 根据需求重定义CURD的方法
![](https://img-blog.csdnimg.cn/img_convert/4f743008f61fff5f32688b1e78790d85.png)
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
![](https://img-blog.csdnimg.cn/img_convert/ea48cb3c4ddd12b572b4a32af17d5a95.png)
8.assign sap system aliases to odata service
/n/IWFND/MAINT_SERVICE---> add system alias
![](https://img-blog.csdnimg.cn/direct/364c89a73efd41a6a3abd37c9e5dd6c6.png)
![](https://img-blog.csdnimg.cn/direct/95f73dfdfdbf4937ab10bf878f63fb7e.png)
9.SAP Gateway Client 去做测试
![](https://img-blog.csdnimg.cn/img_convert/bcf7d6c607fcadf195596238d874d05d.png)