标准网关服务'FDP_EF_PURCHASE_ORDER_SRV'的问题for'PurchaseOrder'的GetEntity(Read)

2020-08-18 16:55发布

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

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


大家好,

作为项目要求的一部分,我正在测试用于PO表单的标准Odata服务,即FDP_EF_PURCHASE_ORDER_SRV,并且我遇到了GetEntity(Read)操作的问题。

当我运行以下URI时:

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder('4500000000')

它会给出错误消息"未找到段'PurchaseOrderNode'的资源",状态码为404。但是我可以看到其中已编码了对应于PurchaseOrder的GetEntity方法。

奇怪的是,当我在URI下运行时:

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder

它用于GetEntitySet(Query),效果很好,即使在响应有效负载中,我也可以看到这样的

即使GetEntity(Read)的代码仍然存在抛出错误,这还是很奇怪的。

任何人都可以帮助您理解此问题。

我的主要问题是,绑定到Adobe Form时会不会产生任何问题?

谢谢

四进

(16.6 kB)

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

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


大家好,

作为项目要求的一部分,我正在测试用于PO表单的标准Odata服务,即FDP_EF_PURCHASE_ORDER_SRV,并且我遇到了GetEntity(Read)操作的问题。

当我运行以下URI时:

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder('4500000000')

它会给出错误消息"未找到段'PurchaseOrderNode'的资源",状态码为404。但是我可以看到其中已编码了对应于PurchaseOrder的GetEntity方法。

奇怪的是,当我在URI下运行时:

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder

它用于GetEntitySet(Query),效果很好,即使在响应有效负载中,我也可以看到这样的

即使GetEntity(Read)的代码仍然存在抛出错误,这还是很奇怪的。

任何人都可以帮助您理解此问题。

我的主要问题是,绑定到Adobe Form时会不会产生任何问题?

谢谢

四进

(16.6 kB)
付费偷看设置
发送
9条回答
callcenter油条
1楼 · 2020-08-18 17:37.采纳回答

嗨Sijn,

我能够基于完全激活的设备

我调试了请求,发现CL_FDP_EF_PURCHASE_ORD_DPC_EXT类的GET_ENTITY方法是

(该方法的代码见下文)

,但是该实现期望仅通过查询中的导航请求单个采购订单。

< p>由于直接访问实体时没有提供源密钥,因此完整性检查失败。

 *完整性检查
 如果mt_source_keys是INITIAL。
   返回。  " <<仅允许查询调用(源键包含查询参数)
 ENDIF。

我认为缺少的是此时将引发有意义的错误消息。

因为当前行为是将请求发送回框架而没有 提供任何结果,以便框架发出通用错误消息

"段'PurchaseOrderNode'找不到资源"

如果要查找发送的请求,可以启动有效负载 使用事务/iwfnd/traces在系统中进行跟踪。

 METHOD Purchaseorders_get_entity。
 数据:ls_t052类型t052,
 it_payment类型标准文本表,
 wa_payment TYPE ttext。
   清除:er_entity,es_response_context。
 *在set_query_options()中使用
 mt_keys = io_tech_request_context-> get_keys()。
 *用于导航时的优化
 mt_navigation_info = io_tech_request_context-> get_navigation_path()。
 mt_source_keys = io_tech_request_context-> get_source_keys()。
 *设置实例变量
 _set_instance_variables(io_tech_request_context)。
 * 完整性检查
 如果mt_source_keys是INITIAL。
   返回。  " <<仅允许查询调用(源键包含查询参数)
 万一。
 *获取SADL映射属性的数据
 超级-> purchaseorders_get_entity
 

所以您现在可以关闭此问题。

关于

Andre

悠然的二货
2楼-- · 2020-08-18 17:37

如果这会导致SAP错误 在标准应用程序中,您应该通过SAP Service Marketplace引发事件。

xfwsx85
3楼-- · 2020-08-18 17:33

1。 那其他的采购订单呢? 这些请求还会失败吗?

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder('4500000001')

2。 在get_entity方法中添加一个断点,并检查是否实际读取了数据。

jovirus
4楼-- · 2020-08-18 17:27

首先非常感谢您的即时响应。

令我惊讶的是,在触发 GetEntitySet(Query),并在响应中成功执行之后,我可以看到每个PO记录都标有下面的URI

/sap/opu/odata/sap/FDP_EF_PURCHASE_ORDER_SRV/PurchaseOrder('4500000000')

我在屏幕截图中突出显示了相同的内容。 上面的URI就是GetEntity(Read)操作的URI。 因此,即使我从此处复制URI并在GW Client中运行,也会引发错误。

我已经检查了其实现的代码部分,并在其中填充了ER_ENTITY。 真的很奇怪。

如果将其绑定到AdobeForm时会产生问题,则会引发该问题。

谢谢

Sijin

天桥码农
5楼-- · 2020-08-18 17:46
< p>我只想在这里进行更新。

我们检查了将其分配给"标准采购订单Adobe Layout",它工作正常。

因此这些错误不会成为问题。

在我们在Gateway Client中运行该票证时,请打开它以了解此行为的原因。

谢谢

Sijin

何必丶何苦呢
7楼-- · 2020-08-18 17:22

嗨,Sijin,
FDP服务特定于输出控制,因此不应激活它们,或者 通过GW客户端消费! 正如您已经体验到的那样,它们的行为不像普通服务。

相反,您可以使用我们的内部帮助器类来查询数据:

 data(lo_helper)= cl_somu_form_services => get_instance(iv_query_top_node ='X')。
 数据lv_xml类型为xstring。
 尝试。
   lo_helper-> get_data(
     出口
       iv_service_name ='FDP_EF_PURCHASE_ORDER_SRV'
       it_key =值#(
         (name ='PurchaseOrder'值='4500000001')
         (name ='PurchaseOrderChangeFlag'value ='')
         (name ='ReceiverPartnerNumber'value ='')
         (name ='Language'value ='E')
         (名称='SenderCountry'值='GB')
       )
     输入
       ev_xml = lv_xml
   )。
 将cx_somu_error捕获到data(lo_error)中。
   "处理错误
 尝试。

如果您直接想要生成pdf:

数据lv_pdf类型xstring。
 数据lv_trace类型字符串。
 data(lo_helper)= cl_somu_form_services => get_instance(iv_query_top_node ='X')。
 尝试。
   lo_helper-> get_document(
     出口
       iv_trace_level = 4"调试目的,在生产中设置为0
       iv_form_name ='MM_PUR_PURCHASE_ORDER'"表单模板
iv_master_form_name ='SOMU_FORM_MASTER_A4' it_key =值#( (name ='PurchaseOrder'值='4500000001') (name ='PurchaseOrderChangeFlag'value ='') (name ='ReceiverPartnerNumber'value ='') (name ='Language'value ='E') (名称='SenderCountry'值='GB') ) 输入 ev_content = lv_pdf ev_trace_string = lv_trace )。 将cx_somu_error捕获到data(lo_error)中。 "//处理错误 尝试。

在这种情况下,ev_content是来自ADS的呈现的pdf和trace_string附加调试信息。

最好的问候
Pascal

一周热门 更多>