如何通过OData服务方法PATCH更新自定义业务对象中的数据?

2020-08-15 06:41发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,朋友。
我已经创建了CBO" ZZ1_MY_CBO"并为此生成了OData服务。 通过邮递员,我可以更新此CBO中的任何行,但是当我尝试从ABAP报告中更新该行时,我总是收到相同的错误"数据服务请求URI所标识的资源不允许使用指定的HTTP方法"! br>在邮递员中,我的网址如下:

 http:///sap/opu/odata/sap/ZZ1_MY_CBO_CDS/ZZ1_MY_CBO(guid'0050568d-81c7-1eea-b084-893ea05d70c3')

我的ABAP报告代码如下:

 DATA(lv_url)= | http:///sap/opu/odata/sap/ZZ1_MY_CBO_CDS/ZZ1_MY_CBO(guid'0050568d-81c7-1eea-b084-893ea05d70c3')|。
 
呼叫方法cl_http_client => create_by_url 出口 网址= lv_url 输入 客户端= lo_http_client 例外情况 arguments_not_found = 1 plugin_not_active = 2 internal_error = 3 其他= 4。 lo_http_client-> propertytype_accept_cookie = if_http_client => co_enabled。 lo_http_client-> request-> set_method(|'{iv_odata_method}'|)。 循环到it_cookies分配字段符号()。 lo_http_client-> request-> set_cookie(name = -name 路径= -路径 值= -值 域= -xdomain 过期= -过期 安全= -安全)。 结局。 lo_http_client-> request-> set_header_field(name ='sap-user'value ='myLogin')。 lo_http_client-> request-> set_header_field(name ='sap-password'value ='MyPassword'
lo_http_client-> request-> set_header_field(name ='x-csrf-token'value ='getToken')。 lo_http_client-> request-> set_header_field(name ='X-Requested-With'value ='X')。 lo_http_client-> request-> set_header_field(name ='Content-Type'value ='application/json')。 lo_http_client-> request-> set_header_field(name ='Accept'value ='application/json')。 request ='{" STATUS":"'&& | {iv_status} | &&'",'&& '" STATUS_REASON":"'&& | {iv_reason} | &&'"'&&'}'。

lo_http_client-> request-> set_cdata(data = request)。 呼叫方法lo_http_client->发送 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 其他= 5。 如果sy-subrc = 0。 调用方法lo_http_client-> receive 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 其他= 5。 万一。 如果sy-subrc = 0。 DATA(lv_response)= lo_http_client-> response-> get_cdata()。 在lv_response忽略案例结果数据(lv_send_error)中查找正则表达式'error'的所有事件。 如果lv_send_error不是INITIAL。 rv_result = abap_false。 其他。 rv_result = abap_true。 万一。 万一。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,朋友。
我已经创建了CBO" ZZ1_MY_CBO"并为此生成了OData服务。 通过邮递员,我可以更新此CBO中的任何行,但是当我尝试从ABAP报告中更新该行时,我总是收到相同的错误"数据服务请求URI所标识的资源不允许使用指定的HTTP方法"! br>在邮递员中,我的网址如下:

 http:///sap/opu/odata/sap/ZZ1_MY_CBO_CDS/ZZ1_MY_CBO(guid'0050568d-81c7-1eea-b084-893ea05d70c3')

我的ABAP报告代码如下:

 DATA(lv_url)= | http:///sap/opu/odata/sap/ZZ1_MY_CBO_CDS/ZZ1_MY_CBO(guid'0050568d-81c7-1eea-b084-893ea05d70c3')|。
 
呼叫方法cl_http_client => create_by_url 出口 网址= lv_url 输入 客户端= lo_http_client 例外情况 arguments_not_found = 1 plugin_not_active = 2 internal_error = 3 其他= 4。 lo_http_client-> propertytype_accept_cookie = if_http_client => co_enabled。 lo_http_client-> request-> set_method(|'{iv_odata_method}'|)。 循环到it_cookies分配字段符号()。 lo_http_client-> request-> set_cookie(name = -name 路径= -路径 值= -值 域= -xdomain 过期= -过期 安全= -安全)。 结局。 lo_http_client-> request-> set_header_field(name ='sap-user'value ='myLogin')。 lo_http_client-> request-> set_header_field(name ='sap-password'value ='MyPassword'
lo_http_client-> request-> set_header_field(name ='x-csrf-token'value ='getToken')。 lo_http_client-> request-> set_header_field(name ='X-Requested-With'value ='X')。 lo_http_client-> request-> set_header_field(name ='Content-Type'value ='application/json')。 lo_http_client-> request-> set_header_field(name ='Accept'value ='application/json')。 request ='{" STATUS":"'&& | {iv_status} | &&'",'&& '" STATUS_REASON":"'&& | {iv_reason} | &&'"'&&'}'。

lo_http_client-> request-> set_cdata(data = request)。 呼叫方法lo_http_client->发送 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 http_invalid_timeout = 4 其他= 5。 如果sy-subrc = 0。 调用方法lo_http_client-> receive 例外情况 http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3 其他= 5。 万一。 如果sy-subrc = 0。 DATA(lv_response)= lo_http_client-> response-> get_cdata()。 在lv_response忽略案例结果数据(lv_send_error)中查找正则表达式'error'的所有事件。 如果lv_send_error不是INITIAL。 rv_result = abap_false。 其他。 rv_result = abap_true。 万一。 万一。
付费偷看设置
发送
3条回答
哎,真难
1楼 · 2020-08-15 07:41.采纳回答

我解决了我的问题。
我的错误在于此运算符。

我们不应在此处的''之间放置iv_odata_method:

 lo_http_client-> request-> set_method(|'{iv_odata_method}'|)。

正确的变体是:

 lo_http_client-> request-> set_method(| {iv_odata_method} |)。
wang628962
2楼-- · 2020-08-15 07:22

嗨,布鲁诺! 非常感谢您的反馈!
我解决了我的问题。
我将在下面分享它。

打一壶酱油
3楼-- · 2020-08-15 07:41

您好 Sigy Freud 。 我对ABAP不太熟悉。 您如何调用该函数? 调用时如何指定URL? 您知道函数调用中使用的是哪个URL吗?

此致

一周热门 更多>