1、创建 SEGW对象
2、创建Entity Type
要把Media 标识打上
3、 激活对象然后到DPC Class的扩展对象里面重定义
/IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM
/IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM
/IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_STREAM
METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream.TRY.DATA: ls_stream TYPE ty_s_media_resource,ls_file TYPE zmmp_matl_file,lv_matnr TYPE matnr.READ TABLE it_key_tab ASSIGNING FIELD-SYMBOL() INDEX 1.DATA: lv_filename TYPE char30.lv_matnr = -value.SELECT SINGLE * FROM zmmp_matl_file INTO ls_file WHERE matnr = lv_matnr .IF ls_file IS NOT INITIAL.ls_stream-value = ls_file-value.ls_stream-mime_type = ls_file-mimetype.copy_data_to_ref( EXPORTING is_data = ls_streamCHANGING cr_data = er_stream ).ENDIF.CATCH /iwbep/cx_mgw_busi_exception.CATCH /iwbep/cx_mgw_tech_exception.ENDTRY.ENDMETHOD.
METHOD /iwbep/if_mgw_appl_srv_runtime~create_stream.TRY.DATA: ls_file TYPE zmmp_matl_file.DATA: lt_hdr_params TYPE tihttpnvp,ls_hdr_params TYPE ihttpnvp.DATA: lo_facade TYPE REF TO /iwbep/if_mgw_dp_int_facade.REFRESH: lt_hdr_params.lo_facade ?= /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).lt_hdr_params = lo_facade->get_request_header( ).READ TABLE lt_hdr_params INTO ls_hdr_params WITH KEY name = 'material'. "header messageIF sy-subrc = 0.ls_file-matnr = ls_hdr_params-value.ENDIF.READ TABLE lt_hdr_params INTO ls_hdr_params WITH KEY name = 'zmatserial'. "header messageIF sy-subrc = 0.ls_file-zmat_serial = ls_hdr_params-value.ENDIF.IF ls_file-matnr IS INITIAL OR ls_file-zmat_serial IS INITIAL.ls_file-value = is_media_resource-value.ls_file-mimetype = is_media_resource-mime_type.ls_file-crt_dat = sy-datum.ls_file-crt_tim = sy-uzeit.MODIFY zmmp_matl_file FROM ls_file.copy_data_to_ref(EXPORTINGis_data = ls_fileCHANGINGcr_data = er_entity ).ELSE.DATA ls_msg TYPE scx_t100key.ls_msg-attr1 = '上传失败'.RAISE EXCEPTION TYPE /iwbep/cx_mgw_tech_exceptionEXPORTINGtextid = ls_msg.ENDIF.CATCH /iwbep/cx_mgw_busi_exception.CATCH /iwbep/cx_mgw_tech_exception.ENDTRY.ENDMETHOD.
METHOD /iwbep/if_mgw_appl_srv_runtime~update_stream.TRY.DATA: ls_file TYPE zmmp_matl_file.DATA: lt_hdr_params TYPE tihttpnvp,ls_hdr_params TYPE ihttpnvp.DATA: lo_facade TYPE REF TO /iwbep/if_mgw_dp_int_facade.REFRESH: lt_hdr_params.lo_facade ?= /iwbep/if_mgw_conv_srv_runtime~get_dp_facade( ).lt_hdr_params = lo_facade->get_request_header( ).READ TABLE it_key_tab ASSIGNING FIELD-SYMBOL() WITH KEY name = 'Matnr'.IF sy-subrc = 0.ls_file-matnr = -value.ENDIF.READ TABLE it_key_tab ASSIGNING WITH KEY name = 'ZmatSerial'.IF sy-subrc = 0.ls_file-zmat_serial = -value.ENDIF.ls_file-value = is_media_resource-value.ls_file-mimetype = is_media_resource-mime_type.ls_file-crt_dat = sy-datum.ls_file-crt_tim = sy-uzeit.MODIFY zmmp_matl_file FROM ls_file.CATCH /iwbep/cx_mgw_busi_exception.CATCH /iwbep/cx_mgw_tech_exception.ENDTRY.ENDMETHOD.
4、部署ODATA服务
5、测试服务
使用POST则会调用Create_Stream,而使用Update则会使用Update_Stream
注意再使用Create_Stream的时候,可能会报错,
Invalid or no mapping to system data types found
这个需要定义一下MPC_EXT中的DEFINE
METHOD define.super->define( ).DATA: lo_entity TYPE REF TO /iwbep/if_mgw_odata_entity_typ,lo_property TYPE REF TO /iwbep/if_mgw_odata_property.lo_entity = model->get_entity_type( iv_entity_name = 'MaterialFileStru' ).IF lo_entity IS BOUND.lo_property = lo_entity->get_property( iv_property_name = 'Mimetype').lo_property->set_as_content_type( ).ENDIF.ENDMETHOD.
还可以使用Update_Stream