点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, ...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, ...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
我正在从ABAP系统触发SCP工作流。 下面是我的代码。 我能够成功获取CSRF令牌值。 但是实际的实例创建没有发生,我收到403 Forbidden错误
注意:我可以使用邮递员触发实例。 因此工作流本身运行正常。
这是我的代码
*&--------------------------------------------- ------------------------ * *&报告Z_TRIGGER_SCP_WORFKLOW *&------------------------------------------------ --------------------- * *& *&------------------------------------------------ --------------------- * 报告Z_TRIGGER_SCP_WORFKLOW。 数据:lo_http_client类型参考if_http_client。 DATA:响应TYPE字符串。 "通过URL创建HTTP客户端 " API沙箱的API端点 呼叫方法cl_http_client => create_by_url 出口 url ='https://bpmworkflowruntimeXXXXXea-XXXXX.hana.ondemand.com/workflow-service/rest/v1/xsrf-token' 输入 客户端= lo_http_client 例外情况 arguments_not_found = 1 plugin_not_active = 2 internal_error = 3 其他= 4。 如果sy-subrc <> 0。 "错误处理 万一。 "设置请求方法 lo_http_client-> request-> set_method('GET')。 "添加标题 lo_http_client-> request-> set_header_field(name ='X-CSRF-Token'value ='Fetch')。 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')。 lo_http_client-> request-> set_header_field(name ='Authorization'value ='Basic XXXXXXXXXXXXXXXXXXXXX')。 " API沙箱的API密钥 * lo_http_client-> request-> set_header_field(name ='APIKey'value ='Vw0jBxyASfBvXXXXXXXFbEpcTKxizWKr')。 "用于生产性API端点的可用安全方案 "基本身份验证,OAuth 2.0 "基本身份验证:在授权标头中以Base64提供用户名:密码 " lo_http_client-> request-> set_header_field(名称='授权'值='基本')。 呼叫方法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。 "错误处理 万一。 数据:lt_fields类型TIHTTPNVP。 data(lo_response)= lo_http_client->响应。 lo_response-> IF_HTTP_ENTITY〜GET_HEADER_FIELDS(CHANGING字段= lt_fields)。 * cl_demo_output => display(lt_fields)。 data(ls_fields)= lt_fields [name ='x-csrf-token']。 data(lv_csrf)= ls_fields-value。 呼叫方法cl_http_client => create_by_url 出口 url ='https://bpmworkflowruntimeaXXXXXX-XXXXX.hana.ondemand.com/workflow-service/rest/v1/workflow-instances' 输入 客户端= lo_http_client 例外情况 arguments_not_found = 1 plugin_not_active = 2 internal_error = 3 其他= 4。 如果sy-subrc <> 0。 "错误处理 万一。 "设置请求方法 lo_http_client-> request-> set_method('POST')。 "添加标题 lo_http_client-> request-> set_header_field(name ='X-CSRF-Token'value = lv_csrf)。 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')。 lo_http_client-> request-> set_header_field(name ='Authorization'value ='Basic XXXXXXXXXXXXXXXXXXXXX')。 CONCATENATE'{" definitionId":" myworkflowtest",' '"上下文":{" PreqItem":" 00010","材料":" 000000000000000011",' '" Plant":5000," DelivDate":25082018," PrNumber":""}}'转换成数据(lv_json)。 呼叫方法lo_http_client-> request-> set_cdata 出口 数据= lv_json。 呼叫方法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。 "错误处理 万一。 响应= lo_http_client->响应-> get_cdata()。 cl_demo_output => display(response)。
嗨,Sesh,
进行更改以考虑cookie后,代码可以正常工作。 我在下面粘贴代码,以帮助他人。 我有一个问题。
-在这种情况下,创建箍客户端的最佳方法是什么? 是通过create_by_url还是create_by_destiantion? 在第一种情况下,我们必须以base64格式输入基本身份验证,但是在其他情况下,我们可以创建一个SM59(类型G)目标并使用该目标。
一周热门 更多>