点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) ...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) ...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
亲爱的朋友们!
我正在尝试在oData中创建Expand查询。 在测试时给了我错误" XML-ABAP转换错误的意外文本"。
我的方案是我有一个销售订单标题和交货明细的结构(两者都是自定义的,我没有使用bapi)。 我正在尝试获取销售订单标题信息以及对销售订单的交货,因此我收到错误消息。 在调试中,我发现在准备xml时它会给我数据,但会抛出该属性,我找不到它。
我已经清理了两个系统的缓存,也更改了基数。 对象生成! 仍然没有运气...此外,我还有一个问题。
当我在URL中使用$ filter选项时,它为我提供了不同的实体集名称,并且顺便说说是标题实体集;当我使用('1231231')时,它为我提供了项目实体集,有趣的是...选择选项表和 it_key_tab表都为空。 然后我对值进行了硬编码以获取数据。
请帮助我了解我在哪里做错了。
我的网址
/sap/opu/odata/sap/ZSD_LE_GPS_TRACKING_SRV/gps_delivery_detailsSet('0000014079')?$ expand = ToDelivery
这将返回空的key_tab。
/sap/opu/odata/sap/ZSD_LE_GPS_TRACKING_SRV/gps_delivery_detailsSet?$ filter = Vbeln eq'0000014079'&$ expand = ToDelivery
这将返回空的过滤器标签。
请参阅:我正在将此用于Get Method。
我的代码:
SPAN { 字体家族:" Courier New"; 字体大小:10pt; 颜色:#000000; 背景:#FFFFFF; } .L0S31 { 字体样式:斜体; 颜色:#808080; } .L0S32 { 颜色:#3399FF; } .L0S33 { 颜色:#4DA619; } .L0S52 { 颜色:#0000FF; } .L0S55 { 颜色:#800080; } .L0S70 { 颜色:#808080; } 方法/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜GET_EXPANDED_ENTITYSET。 数据lv_entityset_name类型字符串。 数据:str_exp的开头。 包括类型ZCL_ZSD_LE_GPS_TRACKIN_MPC_EXT => TS_GPS_DELIVERY_DETAILS。 数据:ToDeliveryLog类型为ZCL_ZSD_LE_GPS_TRACKIN_MPC_EXT => TT_DELIVERYLOG。 数据:str_exp的结尾。 数据:WA_SO TYPE/IWBEP/S_MGW_SELECT_OPTION。 数据WA_LO类型/IWBEP/S_COD_SELECT_OPTION。 DATA lv_vdatu类型TIMESTAMP。 数据:lt_expand如str_exp, ls_expand如str_exp, ls_item类型ZCL_ZSD_LE_GPS_TRACKIN_MPC_EXT => TS_DELIVERYLOG。 数据:ZSDST_GPS_DELIVERY_HEADER的it_head类型表, wa_head像it_head的一行, ZSDST_GPS_LOCATION的it_item类型表, wa_delitem喜欢it_item的行。 数据:ls_keytab/IWBEP/T_MGW_NAME_VALUE_PAIR的类型行。 数据:LV_VBELN类型VBELN, DRIVER类型ZSDST_GPS_DRIVER_LIST, SALES_ORDER_DATA类型ZSDST_GPS_SO_HEADER, SHIPPING_ADDRESS类型ZSDST_GPS_SHIPPING_ADDRESS, DELIVERY_LOG类型ZSDTT_GPS_LOCATION。 数据WA_KEY TYPE/IWBEP/S_MGW_NAME_VALUE_PAIR。 DATA ob_del类型参考ZSDCL_GPS_TRACKING。 *与ET_ENTITYSET相似的DATA WA_ENTITY。 常量:lc_expand_tech_clause类型字符串值'ToDelivery'。 lv_entityset_name = io_tech_request_context-> get_entity_set_name()。 大小写lv_entityset_name。 当'DeliveryLogSet''当我使用('12323123')像URL中的值时,我收到项目集 或'gps_delivery_detailsSet'。 "使用过滤器时,我会收到标题集 使用键属性='Vbeln'将表IT_FILTER_SELECT_OPTIONS读入WA_SO。 "总是空的 如果sy-subrc ='0'。 将表WA_SO-SELECT_OPTIONS读入WA_LO INDEX'1'。 如果SY-SUBRC ='0'。 *将wa_so –属性转换为大写。 案例WA_SO-PROPERTY。 当" Vbeln"。 lv_vbeln = WA_LO-LOW。 当别人。 "在应用程序日志中记录消息 我->/iwbep/if_sb_dpc_comm_services〜log_message( 出口 iv_msg_type ='E' iv_msg_id ='/IWBEP/MC_SB_DPC_ADM' iv_msg_number = 020 iv_msg_v1 = WA_SO-PROPERTY)。 引发例外 引发例外类型/iwbep/cx_mgw_tech_exception 出口 textid =/iwbep/cx_mgw_tech_exception =>内部错误。 结束。 万一。 万一。 如果IT_FILTER_SELECT_OPTIONS是初始的。 将表it_key_tab读入wa_key索引'1'。 "总是空的 如果sy-subrc ='0'。 lv_vbeln = wa_key-value。 万一。 万一。 如果lv_vbeln是初始的。 lv_vbeln ='0000014079'。 " <-硬编码销售订单号 万一。 创建对象ob_del。 呼叫方法ob_del-> get_delivery_detail 出口 i_vbeln = LV_VBELN 输入 驱动程序=驱动程序 sales_order_data = sales_order_data 送货地址=送货地址 delivery_log = delivery_log。 将lc_expand_tech_clause插入表et_expanded_tech_clauses中。 将sales_order_data移动到ls_expand。 将对应的shipping_address移动到ls_expand。 ls_expand的MOVE-CORRESPONDING驱动程序。 在delivery_log循环到wa_delitem。 将对应的wa_delitem移动到ls_item。 将ls_item附加到ls_expand-todeliverylog。 清除wa_delitem。 结束循环。 尾箱。 copy_data_to_ref( 出口 is_data = ls_expand 改变 cr_data = er_entityset)。 方法。 "到目前为止,这里没有触发任何错误。此方法完成并准备好xml之后会出现错误。
我已将关联,导航属性和此消息一起附加。
请帮助我了解我在哪里做错了。 非常感谢您在这方面的帮助。
致谢
Naim
(5.8 kB)
您不应使用参数IT _...,例如
IT_FILTER_SELECT_OPTIONS。 您应该使用
io_tech_request_context对象。
请参阅我的两个博客如何实现简单查询。
https://blogs.sap.com/2016/05/31/odata-service-development-with-sap-gateway-code-based-service-development /
https://blogs.sap.com/2016/05/31/odata-service-development-with-sap-gateway-code-based-service-development-part-ii / >
在该博客的第二部分。
其中提到了如何处理导航,如果您使用$ expand并让SAP Gateway框架对其进行隐式处理。
除了获取osql语句外,还可以将过滤器作为选择选项。
此致
安德烈
一周热门 更多>