2020-08-14 13:05发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
大家好,
我有一种情况,当某个字段(例如)包含来自ABAP代理的空白值时,XI输出不会产生空标记,因为代理无法发送空白值,这就是xml保持正常状态的方式 通过不产生一堆空标签。 但这是我们的目标是在为空白时产生一个空标签。 因此,我们决定在该字段中找不到值时将值" blank"传递给XI。 当值是'blank'时,如何在XI内部创建映射以产生一个空标签,如果值不是'blank',则如何产生一个空标签?
谢谢!
为什么不使用节点函数mapWithDefault? 当源字段丢失时,这将创建一个空标签。 因此,您无需在ABAP代理中传递值。
嗨,瑞安,
答案是肯定的。
关于
嗨,
正如您所说的,空白字段不会传递给PI。 请求有效负载XML中没有空白值标签。
为此,我们需要使用if_wsprotocol_payloadinterface协议,
实际上,通过协议,您可以使用其他运行时服务。
不同的运行时支持不同的协议。
在我们的代理服务中。
每个结构都有一个类型为PRXCTRLTAB的额外字段。
我们需要在空白值字段中附加初始值。
您只需在现有代码中包括粗体字体代码,其余代码仅出于理解目的。
使用以下代码通过代理发送空白XML标签:-
********************************************代码开头* ************************************
DATA lo_service类型参考ZNAVCO_EMPLOYEE_DETAILS。 "代理ABAP对象的对象声明。 DATA lt_inputs TYPE ZNAVDT_DETAILS_OUTBOUND_TAB。"数据结构数据ls_input TYPE ZNAVDT_DETAILS_OUTBOUND_STR的内部表。 "数据结构的工作区
数据ls_record类型ZNAVMT_DETAILS_OUTBOUND_STR。 "代理的输出参数
数据lo_payload_protocol类型参考if_wsprotocol_payload。 "有效负载界面
* DATA lt_controller类型PRXCTRLTAB。 "控制器选项卡 DATA ls_controller TYPE PRXCTRL。"控制器结构
创建对象lo_service。
lo_payload_protocol?= lo_service-> get_protocol(if_wsprotocol => payload)。 "获取代理协议
呼叫方法lo_payload_protocol-> set_extended_xml_handling(abap_true)。 "主动扩展XML处理。
ls_controller-field ='EMP_LOCATION'。 "字段具有空白值 ls_controller-value = sai_ctrl_initial。"这将发送初始值将ls_controller附加到ls_input-controller。
ls_controller-field ='EMP_BANK_AC_NO'。 "字段具有空白值 ls_controller-value = sai_ctrl_initial。"这将发送初始值将ls_controller附加到ls_input-controller。
ls_input-NAME ='NAVNEET'。 "具有数据的正常人
ls_input-DOJ = '10 .01.2019'。
将ls_input附加到lt_inputs。
清除ls_input。
ls_input-NAME ='Anand'
ls_input-DOJ = '12 .05.2016'。
ls_input-emp_location ='印度'。
将ls_input附加到lt_inputs上。
ls_record -mt_sender_emp_details_templ-record = lt_inputs。
TRY。 lo_service-> send_employee_data(output = ls_record)。
CATCH cx_root INTO数据(lr_excep)。
消息lr_excep-> get_text()类型'E'。 ENDTRY。
*************************************代码结尾**** ****************************************
记住一件事:-
感谢和问候
Navneet Anand。
嗨,谢谢您的回答。 发送请求时,它工作正常,但是我收到异常SOAP:1027 SRT:序列化/反序列化失败,并且来自服务的成功消息。 这是SRT_UTIL的屏幕截图:
在SE80中,字段" relationNumber"的服务定义数据类型为STRING。 应该是INT4还是INT8?
您可以通过使用扩展的xml处理在ABAP代理中生成空白输出。
激活扩展XML处理-ABAP Web服务-SAP库 >
@Stefan Grube 的建议更容易????
此致
标记
最多设置5个标签!
为什么不使用节点函数mapWithDefault? 当源字段丢失时,这将创建一个空标签。 因此,您无需在ABAP代理中传递值。
嗨,瑞安,
答案是肯定的。
关于
< p> Mark嗨,
正如您所说的,空白字段不会传递给PI。 请求有效负载XML中没有空白值标签。
为此,我们需要使用if_wsprotocol_payloadinterface协议,
实际上,通过协议,您可以使用其他运行时服务。
不同的运行时支持不同的协议。
在我们的代理服务中。
每个结构都有一个类型为PRXCTRLTAB的额外字段。
我们需要在空白值字段中附加初始值。
您只需在现有代码中包括粗体字体代码,其余代码仅出于理解目的。
使用以下代码通过代理发送空白XML标签:-
********************************************代码开头* ************************************
DATA lo_service类型参考ZNAVCO_EMPLOYEE_DETAILS。 "代理ABAP对象的对象声明。
DATA lt_inputs TYPE ZNAVDT_DETAILS_OUTBOUND_TAB。"数据结构
数据ls_input TYPE ZNAVDT_DETAILS_OUTBOUND_STR的内部表。 "数据结构的工作区
数据ls_record类型ZNAVMT_DETAILS_OUTBOUND_STR。 "代理的输出参数
数据lo_payload_protocol类型参考if_wsprotocol_payload。 "有效负载界面
* DATA lt_controller类型PRXCTRLTAB。 "控制器选项卡
DATA ls_controller TYPE PRXCTRL。"控制器结构
创建对象lo_service。
lo_payload_protocol?= lo_service-> get_protocol(if_wsprotocol => payload)。 "获取代理协议
呼叫方法lo_payload_protocol-> set_extended_xml_handling(abap_true)。 "主动扩展XML处理。
ls_controller-field ='EMP_LOCATION'。 "字段具有空白值
ls_controller-value = sai_ctrl_initial。"这将发送初始值
将ls_controller附加到ls_input-controller。
ls_controller-field ='EMP_BANK_AC_NO'。 "字段具有空白值
ls_controller-value = sai_ctrl_initial。"这将发送初始值
将ls_controller附加到ls_input-controller。
ls_input-NAME ='NAVNEET'。 "具有数据的正常人
ls_input-DOJ = '10 .01.2019'。
将ls_input附加到lt_inputs。
清除ls_input。
ls_controller-field ='EMP_BANK_AC_NO'。 "字段具有空白值
ls_controller-value = sai_ctrl_initial。"这将发送初始值
将ls_controller附加到ls_input-controller。
ls_input-NAME ='Anand'
ls_input-DOJ = '12 .05.2016'。
ls_input-emp_location ='印度'。
将ls_input附加到lt_inputs上。
ls_record -mt_sender_emp_details_templ-record = lt_inputs。
TRY。
lo_service-> send_employee_data(output = ls_record)。
CATCH cx_root INTO数据(lr_excep)。
消息lr_excep-> get_text()类型'E'。
ENDTRY。
*************************************代码结尾**** ****************************************
记住一件事:-
感谢和问候
Navneet Anand。
嗨,谢谢您的回答。 发送请求时,它工作正常,但是我收到异常SOAP:1027 SRT:序列化/反序列化失败,并且来自服务的成功消息。 这是SRT_UTIL的屏幕截图:
在SE80中,字段" relationNumber"的服务定义数据类型为STRING。 应该是INT4还是INT8?
嗨,瑞安,
您可以通过使用扩展的xml处理在ABAP代理中生成空白输出。
激活扩展XML处理-ABAP Web服务-SAP库 >
@Stefan Grube 的建议更容易????
此致
标记
一周热门 更多>