是否可以将AMDP类的IMPORT参数作为SQL APPLY_FILTER的第二个参数传递。

2020-09-13 12:27发布

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

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


大家好,

我有一个AMDP类方法的Import参数,例如String类型的" iv_sel_opt"。

确实会有" CL_SHDB_SELTAB => combine_seltabs"中的值,因此它将转换报告屏幕的"选择选项"并将其转换为" SQL Where子句"。

现在无法在AMDP方法实现中将此" iv_sel_opt"用作" APPLY_FILTER"的第二个参数。

上面写着" SQLSCRIPT消息:参数不受支持的类型:APPLY_FILTER:第二个参数必须是标量变量&A0&A1&A2&A3&A4&A5&A6&A7&A8&A9"。

除了使用CDS表函数之外,还有其他方法可以实现吗?

非常有用的评论。

谢谢

四进

请找到我的代码:

 CLASS zcl_demo_consume_amdp_abap定义
   上市
   最后
   创建公众。


 公共部分。
   接口:if_amdp_marker_hdb。


   类型:
     ty_mara的开始,
         matnr TYPE C LENGTH 40,
         ernam TYPE C LENGTH 12,
     ty_mara的结尾,


     tt_mara ty_mara的类型标准表。
    
   类方法get_mara
     输入
         VALUE(iv_client)TYPE要求
         VALUE(iv_sel_opt)TYPE字符串
     出口
         VALUE(et_mara)类型tt_mara。
        
 受保护的部分。
 专用部分。
 ENDCLASS。


 类别zcl_demo_consume_amdp_abap实施。
   方法get_mara通过数据库过程
                   对于组屋
                   语言SQLSCRIPT
                   选项只读
                   使用玛拉。
     et_mara = apply_filter(mara,iv_sel_opt);  " <==这是错误
   终结法。
 ENDCLASS。
 

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

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


大家好,

我有一个AMDP类方法的Import参数,例如String类型的" iv_sel_opt"。

确实会有" CL_SHDB_SELTAB => combine_seltabs"中的值,因此它将转换报告屏幕的"选择选项"并将其转换为" SQL Where子句"。

现在无法在AMDP方法实现中将此" iv_sel_opt"用作" APPLY_FILTER"的第二个参数。

上面写着" SQLSCRIPT消息:参数不受支持的类型:APPLY_FILTER:第二个参数必须是标量变量&A0&A1&A2&A3&A4&A5&A6&A7&A8&A9"。

除了使用CDS表函数之外,还有其他方法可以实现吗?

非常有用的评论。

谢谢

四进

请找到我的代码:

 CLASS zcl_demo_consume_amdp_abap定义
   上市
   最后
   创建公众。


 公共部分。
   接口:if_amdp_marker_hdb。


   类型:
     ty_mara的开始,
         matnr TYPE C LENGTH 40,
         ernam TYPE C LENGTH 12,
     ty_mara的结尾,


     tt_mara ty_mara的类型标准表。
    
   类方法get_mara
     输入
         VALUE(iv_client)TYPE要求
         VALUE(iv_sel_opt)TYPE字符串
     出口
         VALUE(et_mara)类型tt_mara。
        
 受保护的部分。
 专用部分。
 ENDCLASS。


 类别zcl_demo_consume_amdp_abap实施。
   方法get_mara通过数据库过程
                   对于组屋
                   语言SQLSCRIPT
                   选项只读
                   使用玛拉。
     et_mara = apply_filter(mara,iv_sel_opt);  " <==这是错误
   终结法。
 ENDCLASS。
 

付费偷看设置
发送
10条回答
Alawn_Xu
1楼 · 2020-09-13 12:43.采纳回答

确保您得到此错误(在注释中提到),因为MARA表的字段比输出表ET_MARA中定义的字段多。 您可以使用以下示例进行解析:

 ...
 lt_mara = apply_filter(mara,:iv_sel_opt);
 et_mara = select matnr,ernam from:lt_mara; 
xfwsx85
2楼-- · 2020-09-13 12:45

正如我尝试添加':'的某些成员所强调的那样,

消息说:

 SQLSCRIPT消息:返回类型不匹配:过程ZCL_DEMO_CONSUME_AMDP_ABAP => GET_MARA:ET_MARA [MANDT:NVARCHAR(3)MATNR:NVARCHAR(40)ERSDA:NVARCHAR(8)ERNAM:NVARCHAR(12)LAEDA:NVARCHAR(8)AENAM:  NVARCHAR(12)VPSTA:NVARCHAR(15)PSTAT:NVARCH 

可以采取任何措施来消除此错误吗?

SKY徐
3楼-- · 2020-09-13 12:48

我看到的唯一一点是,缺少用于解决AMDP中IV_SELOPT参数的冒号。 您可以在参数名称前面添加冒号吗?

 et_mara = apply_filter(mara,:iv_sel_opt); 
粗暴的香蕉
4楼-- · 2020-09-13 12:47

我真的不知道为什么我的问题被某人否决了。 AMDP相当新,我无法通过互联网找到任何解决方案。

大道至简
5楼-- · 2020-09-13 12:44

嗨,

第二个错误与Apply过滤器无关,它表示Apply过滤器的返回表结构与给定的LHS表不匹配。

在这种情况下,et_mara和mara(应用过滤器内部)具有不同的结构。

请验证并纠正LHS和RHS中的结构相同,然后et_mara = apply_filter(mara,:iv_sel_opt); 应该可以。

-克里希纳(Krishna S)

SKY徐
6楼-- · 2020-09-13 12:59

嗨弗洛里安,

首先非常感谢,是的,我错过了这一部分:

 et_mara =从:lt_mara中选择matnr,ernam; 

能否请您将此评论作为新的答案,以便我可以接受它作为此查询的解决方案。

谢谢

Sijin

d56caomao
7楼-- · 2020-09-13 12:49

我要补充一点,CE函数已过时(根据SQL参考指南),您应该使用SQL函数(从mara中选择a,b,c ...,其中column = :iv_sel_opt)

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答