AMDP从文档存储库集合中选择

2020-08-16 17:08发布

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

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


嗨,

我有一个名为 food_collection 的DocStore集合,我正在从其中通过AMDP将数据获取到ABAP世界中。

AMDP的代码如下:

公共部分。
     接口if_amdp_marker_hdb。
     类型:
       开始ty_food_json,
         food_collection TYPE字符串,
       ty offood_json的结尾,

       带有默认键的ty_food_json的tt_food_json类型标准表。

     类方法:
       read_by_group导入值(组)TYPE字符串
                     导出值(结果)类型tt_food_json。

 类别zfetch_food_collection IMPLEMENTATION。
   方法read_by_group按数据库过程
                                 对于组屋
                                 语言SQLSCRIPT
                                 选项为只读。
       结果=
         选择*来自" MYSCHEMA"。" FOOD_COLLECTION"
             其中" group" =:group;
   终结法。
 ENDCLASS。

现在,当我尝试通过以下方式调用此AMDP时:

 zfetch_food_collection => read_by_group(
 出口组='蔬菜'
 导入et_result = data(food))。

 cl_demo_output =>显示(食物)。

我收到以下错误:

不支持的功能:...第9行第5列(在pos 302):where子句的表达式不能被收集表支持

因此由于某种原因,我无法从AMDP查询JSON属性。 此查询在SQL控制台中完美运行:

 SELECT * FROM" MYSCHEMA"。" FOOD_COLLECTION",其中" group" ='Vegetables';


 语句" SELECT * FROM" MYSCHEMA"。" FOOD_COLLECTION",其中" group" ='Vegetables'
 在44 ms 26 µs中成功执行(服务器处理时间:5 ms 994 µs)
 在0 ms 44 µs中提取了3行(服务器处理时间:0 ms 0 µs)
 

我尝试将参数名称更改为 |'Vegetables'| ,但是没有用。 我还尝试将AMDP正文中的单引号(而不是调用方)串联起来,也没有用。

有人经历过吗?

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

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


嗨,

我有一个名为 food_collection 的DocStore集合,我正在从其中通过AMDP将数据获取到ABAP世界中。

AMDP的代码如下:

公共部分。
     接口if_amdp_marker_hdb。
     类型:
       开始ty_food_json,
         food_collection TYPE字符串,
       ty offood_json的结尾,

       带有默认键的ty_food_json的tt_food_json类型标准表。

     类方法:
       read_by_group导入值(组)TYPE字符串
                     导出值(结果)类型tt_food_json。

 类别zfetch_food_collection IMPLEMENTATION。
   方法read_by_group按数据库过程
                                 对于组屋
                                 语言SQLSCRIPT
                                 选项为只读。
       结果=
         选择*来自" MYSCHEMA"。" FOOD_COLLECTION"
             其中" group" =:group;
   终结法。
 ENDCLASS。

现在,当我尝试通过以下方式调用此AMDP时:

 zfetch_food_collection => read_by_group(
 出口组='蔬菜'
 导入et_result = data(food))。

 cl_demo_output =>显示(食物)。

我收到以下错误:

不支持的功能:...第9行第5列(在pos 302):where子句的表达式不能被收集表支持

因此由于某种原因,我无法从AMDP查询JSON属性。 此查询在SQL控制台中完美运行:

 SELECT * FROM" MYSCHEMA"。" FOOD_COLLECTION",其中" group" ='Vegetables';


 语句" SELECT * FROM" MYSCHEMA"。" FOOD_COLLECTION",其中" group" ='Vegetables'
 在44 ms 26 µs中成功执行(服务器处理时间:5 ms 994 µs)
 在0 ms 44 µs中提取了3行(服务器处理时间:0 ms 0 µs)
 

我尝试将参数名称更改为 |'Vegetables'| ,但是没有用。 我还尝试将AMDP正文中的单引号(而不是调用方)串联起来,也没有用。

有人经历过吗?

付费偷看设置
发送
6条回答
微wx笑
1楼-- · 2020-08-16 17:25

设法以一种非常奇怪的方式解决了它。 使我意识到,通过AMDP与ABAP层集成使用时,文档存储所提供的灵活性就丧失了。

我必须在AMDP类的类型定义中指定要获取的确切字段:

类型:
       开始ty_food_json,
         名称TYPE字符串,
         fgroup TYPE字符串,
         营养素TYPE字符串,
         description TYPE字符串,
       ty offood_json的结尾,

       带有默认键的ty_food_json的tt_food_json类型标准表。

     类方法:

       read_by_group IMPORTING VALUE(imgroup)TYPE字符串
                     导出值(et_result)类型tt_food_json。
 

然后在实现中,我使用了CTE。 但这是棘手的部分,必须将集合中的字段名称重命名为大写!!! 我的猜测是,ABAP在内部从上面将类型定义大写,因此名称将不匹配(也被重命名为GROUP字段,因为它是SQL中的保留字)。 有了CTE,我就可以使用传统的SQLScript查询(不需要单引号或双引号):

方法read_by_group按数据库过程
                                 对于组屋
                                 语言SQLSCRIPT
                                 选项为只读。

     et_result = WITH food_view AS(
       选择"名称"作为名称,
              "组" AS FGROUP,
              "营养素"作为营养素,
              "描述"为描述
      来自" MYSCHEMA"。" FOOD_COLLECTION")

       选择*从food_view
       WHERE FGROUP =:imgroup;

   ENDMETHOD。

然后致电:

 zfetch_food_collection => read_by_group(
   出口
     imgroup ="蔬菜"
   输入
     et_result =数据(食物)
 )。

 cl_demo_output =>显示(食物)。

最后是来自控制台的结果:

在营养列中还有另一个JSON,因此要提取这些值,我需要一个嵌套结构。

Cikesha
2楼-- · 2020-08-16 17:45
 group =`'Vegetables'` 

看起来是错误的尝试

 group =`Vegetables` 
槿木_熙
3楼-- · 2020-08-16 17:48

在amdp内部使用类似功能时,我遇到了同样的问题:

BIND_AS_VALUE

示例:

METHOD ins_doc,用于HDB语言SQLSCRIPT的数据库过程。

从" TYRHANA"中删除。" APPLCONFIG",其中"基本"。" Id" = BIND_AS_VALUE(:applid);

方法。

然后,系统将导入变量(此处为plid)视为值,并且可以正常工作,通常优化器会决定是否将变量解释为参数或值,但是使用此功能,您可以告诉他这是一个值。

打一壶酱油
4楼-- · 2020-08-16 17:49

您可以尝试先声明一个帮助变量吗?

 DECLARE food_group string:= group;
 SELECT * FROM" MYSCHEMA"。" FOOD_COLLECTION"," group" =:food_group; 
歪着头看世界
5楼-- · 2020-08-16 17:24

宏,

我确实遵循SAP Help documenetaion,然后在SCN上找到了您的问题。 我实际上在AMDOP类中遇到错误。 但是我可以在HANA Studio的SQL控制台中执行所有CRUD。

" DEMOCOLLECTION"是未知的。 必须在METHOD语句中声明ABAP对象和DDIC对象。 本地名称必须在此处以":"开头。

从系统架构(例如SAPCAR或SAPSLT等)访问时会出现此错误,但在用户架构(例如KDASS)中可以正常工作

此致

Kevin Dass

Tong__Ming
6楼-- · 2020-08-16 17:37

查询在没有where条件的情况下工作。 字符串" Vegetables"必须用单引号引起来,字段名称必须用双引号引起来。 很奇怪,但这就是文档存储的工作方式,如此处的示例查询中所述

https://help .sap.com/viewer/4505d0bdaf4948449b7f7379d24d0f0d/2.0.01/zh-CN/fc6a0ab114c8416eb561c9b5aba8fc7d.html

一周热门 更多>