遇到的问题1:无服务注册
解决方法:SAPUI5 (34) - OData Model 连接后端 SAP 系统 (上)
2.测试OData Service
用游览器或者GATEWAY运行。
3,增删改查实现
1.Query重定义
TYPES: BEGIN OF t_vbeln,
sign TYPE char1,
option TYPE char2,
low TYPE char10,
high TYPE char10,
END OF t_vbeln.
DATA:
ls_filter TYPE /iwbep/s_mgw_select_option,
ls_select_options TYPE /iwbep/s_cod_select_option.
DATA:
lt_range_vbeln TYPE TABLE OF t_vbeln.
FIELD-SYMBOLS:
<fs_range_vbeln> TYPE t_vbeln.
READ TABLE it_filter_select_options
INTO ls_filter
WITH KEY property = 'Vbeln'.
IF sy-subrc = 0.
LOOP AT ls_filter-select_options INTO ls_select_options.
APPEND INITIAL LINE TO lt_range_vbeln ASSIGNING <fs_range_vbeln>.
MOVE-CORRESPONDING ls_select_options TO <fs_range_vbeln>.
UNASSIGN <fs_range_vbeln>.
ENDLOOP.
ENDIF.
SELECT * FROM zht_sales
INTO CORRESPONDING FIELDS OF TABLE @et_entityset
WHERE vbeln IN @lt_range_vbeln.
Gateway测试:
Postman测试:
Authorization选择basic权限,填入你的SAP账号密码就可以了
2.Read重定义
代码:
DATA:
lv_vbeln TYPE vbeln.
DATA:
ls_key_tab TYPE /iwbep/s_mgw_name_value_pair,
ls_vbeln TYPE zht_sales.
READ TABLE it_key_tab
INTO ls_key_tab
WITH KEY name = 'Vbeln'.
IF sy-subrc = 0.
lv_vbeln = ls_key_tab-value.
ENDIF.
lv_vbeln = |{ lv_vbeln ALPHA = IN }|.
SELECT SINGLE * FROM zht_sales
INTO er_entity
WHERE vbeln = lv_vbeln.
Gateway测试
Postman测试
Create
DATA: ls_vbeln TYPE zht_sales.
io_data_provider->read_entry_data( IMPORTING es_data = er_entity ).
MOVE-CORRESPONDING er_entity TO ls_vbeln.
INSERT zht_sales FROM ls_vbeln.t.
Create服务测试过程:
<1>执行GET读取单个实体/sap/opu/odata/sap/ZHT_STRU_SALES_SRV_01/ZsalesSet(Mandt=‘100’,Vbeln=‘4’)
<2>单击“用作请求”按钮
<3>更新您的请求属性。
<4>选择HTTP方法作为POST
<5>执行/sap/opu/odata/sap/ZHT_STRU_SALES_SRV_01/ZsalesSet
Postman测试过程:
<1>执行GET读取单个实体/sap/opu/odata/sap/ZHT_STRU_SALES_SRV_01/ZsalesSet(Mandt=‘100’,Vbeln=‘4’)
设置权限:SAP前端系统登录账号/密码
设置Headers参数 KEY:X-CSRF-Token VALUE: Fetch
之后可以得到Token值:jZgJTrW8FACdCrPRvlMpyg==
- Copy全部的XML Body内容
用Post方式创建数据:
此步骤可能会遇到问题:CSRF Token Validation Failed
结果是成功的:
我们再用GET方法去获取数据,就可以看到我们刚才创建的这一条数据了
update
DATA: ls_vbeln TYPE zht_sales.
io_data_provider->read_entry_data( IMPORTING es_data = er_entity ).
MOVE-CORRESPONDING er_entity TO ls_vbeln.
MODIFY zht_sales FROM ls_vbeln.
和Update一样我们需要获取token和XML的BODY
更高XML中你想要更改的数据,只更新你想要更新的那一条数据,例如:
运行不会有提示,是空白的返回。
然后我们再去运行GET看有没有更新成功。可以看到该值已经更新成功
delete
DATA:lv_vbeln TYPE vbeln,
ls_key_tab TYPE LINE OF /iwbep/t_mgw_name_value_pair,
ls_vbeln TYPE zht_sales.
READ TABLE it_key_tab with key name = 'Vbeln' INTO ls_key_tab.
if sy-subrc = 0.
lv_vbeln = ls_key_tab-value.
ENDIF.
lv_vbeln = |{ lv_vbeln ALPHA = IN }|.
DELETE FROM zht_sales WHERE vbeln = lv_vbeln.
删除我们想要删除一条数据,不需要BODY,只需要token:
删除成功后我们再去GET查找这条数据:
可以看到无法发现此条数据了。