申请注册网站域名.商城,重庆做网站公司,卖域名,网站推广的方法及特点SAP创建ODATA服务-Structure
1、创建数据字典
进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project#xff0c;事务码#xff1a;SEGW#xff0c;点击Create Project 按钮 Gateway service Project分四个部分#xff1a…SAP创建ODATA服务-Structure
1、创建数据字典
进入se11创建透明表ZRICO_USR,并创建对应字段 2、创建OData service 首先创建Gateway service project事务码SEGW点击Create Project 按钮 Gateway service Project分四个部分 ♦ Data Model 数据模型主要包括 Entity type,( 比如说 product entitycustomer entity 等)Entity set (Entity 的集合多笔数据) 和 Association (Entity 之间的关联) ♦ Service Implementation Entity set 的 CRUD 实现 ♦ Runtime Artifacts基于Entity set 的代码框架包括数据模型 (Data model)数据提供者 (Data provider) ♦ Service maintenance注册服务测试服务 创建Data Model 创建Entity 选中Data Model右键Import-DDIC Structure 输入Entity Name以及数据表结构 ZRICO_USR若勾选Create Default entity set则自动创建Entity set,然后next 选中所有字段点击next 选择字段MANDT、USRID为主键并将Name值按照规范首字符需大写如下图所示。 点击finish如下图所示 完成后查看Entity属性 调整Entity Sets 设置Entity集合可CRUD 设置Entity集合可CRUD 选中项目名右键Generate Runtime 保持所有值默认点击Continue按钮运行 系统生成Runtime objects 服务注册 若之前已经创建了Gateway Service别名则在Service Maintenance下可以看到 此时Register Status是没有状态的点击Register按钮 选择系统别名LOCAL 确认后完成服务注册状态已经改变。 测试OData Service 可以通过Browser或者SAP Gateway Client 进行测试点击Maintain进入激活并维护服务界面 调用浏览器测试如下图所示测试成功 浏览器测试可能存在问题 A.点击 Call Browser 按钮系统显示 host name 或 port 没有配置好使用事务码 SMICM然后通过菜单 Goto - Services看看主机和端口是否配置好是否启用。 B.如果服务器没有在 Internet 上公开这个 host name 不能通过 Internet 网进行访问则需要设置本机的 hosts 文件让本机指向这个域名。hosts 文件的位置在 C:\Windows\System32\drivers\etc 文件夹中。 Gateway客户端测试 客户端测试当前连接出错未配置Fiori外部服务环境可跳过不影响后续测试正常测试如下 服务实现 服务实现是指提供 CRUD 的具体实现因为读取数据的时候存在 Entity 和 EntitySetSAP 一般把读取 Entity 叫做 Read把读取 EntitySet 叫做 Query 在SEGW界面中展开Service Implementation 需要编写具体的代码这样外部才能实现对SAP数据的增删改查。
OData OperationHTTP MethodWhat it meant to an ABAPerCreatePOSTInsert from ReadGETSelect Single * From into UpdatePUT/PATCHUpdate set DeleteDELETEDelete from QueryGETSelect * From Into Table Function ImportGET/POSTEverything covered by GET and POST. But only use if scenario does not fit into CRUDQ operations. Query重定义 首先我们开看看GetEntitySet方法的编写过程 。选中GetEntitySet(Query),右键Go to Abap Workbench 系统提示 点击确认进入下列界面 选中ZUSERSET_GET_ENTITYSET方法右键重定义改写该方法实现过程其他方法改写类似 改写里面的逻辑 method zuserset_get_entityset.data:ls_filter type /iwbep/s_mgw_select_option,ls_select_options type /iwbep/s_cod_select_option.data:lt_range_usrid type table of zrange_vhl.field-symbols:fs_range_usrid type zrange_vhl.read table it_filter_select_optionsinto ls_filterwith key property Usrid.if sy-subrc 0.loop at ls_filter-select_options into ls_select_options.append initial line to lt_range_usrid assigning fs_range_usrid.move-corresponding ls_select_options to fs_range_usrid.unassign fs_range_usrid.endloop.endif.select *from zrico_usrinto corresponding fields of table et_entitysetwhere usrid in lt_range_usrid.endmethod.其中ET_ENTITYSET是类方法预设的参数基于ZRICO_USR内表结构。 修改完成后激活然后通过浏览器进行测试或者Gateway客户端测试 同时也可以通过Postman测试SAP OData Services后面会大量使用Postman来测试 Read重定义 选中GetEntity同理进入对应的类改写ZUSERSET_GET_ENTITY:代码如下 method ZUSERSET_GET_ENTITY.
* RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc
* EXPORTING
* textid /iwbep/cx_mgw_not_impl_excmethod_not_implemented
* method ZUSERSET_GET_ENTITY.data lv_usrid type zrico_usr-usrid.data:ls_key_tab type /iwbep/s_mgw_name_value_pair,ls_usr type zrico_usr.read table it_key_tabwith key name Usridinto ls_key_tab.if sy-subrc 0.lv_usrid ls_key_tab-value.endif.select single *from zrico_usrinto er_entitywhere usrid lv_usrid.endmethod.执行结果hanas1.hand-china.com:2550/sap/opu/odata/sap/ZRICO_STRU_USR1_SRV/zuserSet(Mandt‘200’,Usrid‘123’)?$formatxml如下 Create重定义 选中Create右键进入ABAP工作台方法 ZUSERSET_CREATE_ENTITY重定义代码如下 method ZUSERSET_CREATE_ENTITY.
* RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc
* EXPORTING
* textid /iwbep/cx_mgw_not_impl_excmethod_not_implemented
* method ZUSERSET_CREATE_ENTITY.datals_usr type zrico_usr.io_data_provider-read_entry_data( importing es_data er_entity ).MOVE-CORRESPONDING er_entity to ls_usr.insert zrico_usr from ls_usr.endmethod.Update重定义 选中Update右键进入工作台方法ZUSERSET_UPDATE_ENTITY重定义代码如下 METHOD zuserset_update_entity.
* RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc
* EXPORTING
* textid /iwbep/cx_mgw_not_impl_excmethod_not_implemented
* method ZUSERSET_UPDATE_ENTITY.DATA:ls_usr TYPE zrico_usr.io_data_provider-read_entry_data( IMPORTING es_data er_entity ).MOVE-CORRESPONDING er_entity TO ls_usr.MODIFY zrico_usr FROM ls_usr.ENDMETHOD.Delete重定义 选中Delete右键进入ABAP工作台,方法ZUSERSET_DELETE_ENTITY重定义代码如下 METHOD zuserset_delete_entity.
* RAISE EXCEPTION TYPE /iwbep/cx_mgw_not_impl_exc
* EXPORTING
* textid /iwbep/cx_mgw_not_impl_excmethod_not_implemented
* method ZUSERSET_DELETE_ENTITY.DATA:lv_usrid TYPE zrico_usr-usrid.DATA:ls_key_tab TYPE /iwbep/s_mgw_name_value_pair,ls_usr TYPE zrico_usr.READ TABLE it_key_tab WITH KEY name Usrid INTO ls_key_tab.IF sy-subrc 0.lv_usrid ls_key_tab-value.ENDIF.DELETE FROM zrico_usr WHERE usrid lv_usrid.ENDMETHOD.Function Import 函数导入 如果操作不适合CRUD方案那么您可以通过函数导入来执行。选中DataModel右键CreateFunction Import 输入导数名称例如需要根据用户名NAME查询其他信息 确认后Function Imports节点下显示创建的名称。 调用Function imports相关参数 Return type KindEntity type Return type ZUSER Return Cardinality返回值为实体集合则选择 0…n HTTPGet方式 为Function Import创建导入参数双击Function Import Parameters 选择传建按钮输入参数名Us人Name参数类型Edm.String,最大长度值 完成后保存 然后可以在Postman或者调用浏览器测试可获得类似的结果 然后通过类似的方法给对应的方法重定义再进行测试即可 下一步重定义方法 代码如下 然后通过Postman测试 http://gXXX.XXXXX.com:8000/sap/opu/odata/sap/ZRICO_STRU_USR_SRV/UserByName?UsrName‘12’