一、根据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 dateREAD 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_EXCEPTIONEXPORTINGTEXTID = LS_MESSAGE.ENDIF.
*-get filterLT_FILTERS = IO_TECH_REQUEST_CONTEXT->GET_FILTER( )->GET_FILTER_SELECT_OPTIONS( ).
*-get filter for PlantREAD 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 numberREAD 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 LocationREAD 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 OptionsLV_TOP = IO_TECH_REQUEST_CONTEXT->GET_TOP( ).LV_SKIP = IO_TECH_REQUEST_CONTEXT->GET_SKIP( ).SELECT MKPF~MBLNRMKPF~MJAHRZEILEVBELN_IMBUDATBWARTMSEG~MATNRMAKT~MAKTXMENGEMEINSMSEG~WERKSMSEG~LGORTT001L~LGOBECHARGSOBKZFROM MKPFINNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR AND MKPF~MJAHR = MSEG~MJAHRINNER JOIN MAKT ON MSEG~MATNR = MAKT~MATNR AND MAKT~SPRAS = SY-LANGULEFT JOIN T001L ON MSEG~LGORT = T001L~LGORT AND MSEG~WERKS = T001L~WERKSINTO TABLE GT_DATAWHERE BUDAT IN S_BUDATAND MSEG~WERKS IN S_WERKSAND MSEG~LGORT IN S_LGORTAND MSEG~MATNR IN S_MATNR.* >> Client Paging (top/skip)IF LV_TOP IS NOT INITIAL ORLV_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 ANDLV_TABLE_SIZE >= LV_TOP.EXIT.ENDIF.ENDIF.ENDLOOP.ELSE.
* >> No PagingET_ENTITYSET[] = GT_DATA[]..ENDIF.
列举一下几种报错的方法:
第一种直接报错
MESSAGE '条码内容为空!' TYPE 'E'.
MESSAGE '条码内容为空!' TYPE 'I'.
"这种报错只能在/IWFND/ERROR_LOG查询,对方系统无法知道什么原因
第二种,把报错消息写到header里面
*1. Instatiate the Message ContainerDATA: lo_message_container TYPE REF TO /iwbep/if_message_container.CALL METHOD me->/iwbep/if_mgw_conv_srv_runtime~get_message_containerRECEIVINGro_message_container = lo_message_container.CALL METHOD lo_message_container->add_messageEXPORTINGiv_msg_type = /iwbep/cl_cos_logger=>warningiv_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_EXCEPTIONEXPORTINGTEXTID = LS_MESSAGE.
7.双击LOCAL-->Registe
8.SAP Gateway Client 去做测试