CDS元数据表

2020-09-19 09:14发布

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

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


专家们,

我需要弄清楚在哪里可以找到有关CDS视图(DDL)及其对应的ABAP对象的元数据。 我认为生成的ABAP视图将包含与生成它们的CDS视图相同的参数,但事实并非如此。 我有一个示例(来自S4/HANA IDES系统的C_PurRequisitionNoTouch),其中CDS定义了三个参数,但生成的ABAP视图(CMMPRNOTOUCH)在SE11中的定义中仅列出了两个"选择条件"。 但是,在查询ABAP视图时,必须设置所有三个参数,否则会出现语法错误。 因此,我需要以某种方式找到CDS DDL的元数据,以便能够查询ABAP视图。 我在表DD02V(字段" WITH PARAMETERS")中拥有的ABAP视图元数据和选择条件在表DD28S中。 有一个表RSODPABAPCDSVIEW将CDS与ABAP视图链接,完整的CDS DDL可以在DDDDLSRC中找到。 我当然可以解析CDS DDL,但是我不确定如果扩展CDS视图包含多个"层"的参数,那将如何工作。 有什么想法吗?

这是一个说明问题的小程序:

报告ZS4H2。
 数据:
   l_date_function(32)类型c,
   l_start_date TYPE日期,
   l_end_date TYPE日期。
 数据:
   t_view带有标题行的CMMPRNOTOUCH的类型表。

   l_date_function ="。
   l_start_date ='20160101'。
   l_end_date ='20180101'。

 *选择*从C_PurRequisitionNoTouch(P_DateFunction = @l_date_function,P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这有效

 选择*从CMMPRNOTOUCH(P_DateFunction = @l_date_function,P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这有效

 *选择*从CMMPRNOTOUCH(P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这不起作用
  
 表@t_view的对应字段。

 如果sy-subrc = 0。
   环视t_view。
     写:/t_view-PURCHASEREQUISITION,
              t_view-PURCHASEREQUISITIONITEM,
              t_view-SUPPLIER。
   结局。
 万一。
 

(48.7 kB)

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

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


专家们,

我需要弄清楚在哪里可以找到有关CDS视图(DDL)及其对应的ABAP对象的元数据。 我认为生成的ABAP视图将包含与生成它们的CDS视图相同的参数,但事实并非如此。 我有一个示例(来自S4/HANA IDES系统的C_PurRequisitionNoTouch),其中CDS定义了三个参数,但生成的ABAP视图(CMMPRNOTOUCH)在SE11中的定义中仅列出了两个"选择条件"。 但是,在查询ABAP视图时,必须设置所有三个参数,否则会出现语法错误。 因此,我需要以某种方式找到CDS DDL的元数据,以便能够查询ABAP视图。 我在表DD02V(字段" WITH PARAMETERS")中拥有的ABAP视图元数据和选择条件在表DD28S中。 有一个表RSODPABAPCDSVIEW将CDS与ABAP视图链接,完整的CDS DDL可以在DDDDLSRC中找到。 我当然可以解析CDS DDL,但是我不确定如果扩展CDS视图包含多个"层"的参数,那将如何工作。 有什么想法吗?

这是一个说明问题的小程序:

报告ZS4H2。
 数据:
   l_date_function(32)类型c,
   l_start_date TYPE日期,
   l_end_date TYPE日期。
 数据:
   t_view带有标题行的CMMPRNOTOUCH的类型表。

   l_date_function ="。
   l_start_date ='20160101'。
   l_end_date ='20180101'。

 *选择*从C_PurRequisitionNoTouch(P_DateFunction = @l_date_function,P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这有效

 选择*从CMMPRNOTOUCH(P_DateFunction = @l_date_function,P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这有效

 *选择*从CMMPRNOTOUCH(P_StartDate = @l_start_date,P_EndDate = @l_end_date)
 *这不起作用
  
 表@t_view的对应字段。

 如果sy-subrc = 0。
   环视t_view。
     写:/t_view-PURCHASEREQUISITION,
              t_view-PURCHASEREQUISITIONITEM,
              t_view-SUPPLIER。
   结局。
 万一。
 

(48.7 kB)
付费偷看设置
发送
4条回答
95年老男孩
1楼 · 2020-09-19 10:01.采纳回答

这正是原因之一,为什么您不应该访问ABAP之外的ABAP托管数据库对象。

DB上CDS(参数)视图的表示形式是ABAP运行时环境的内部事务,它取决于数据库,并且可能因发行版本而异。

请参见 https://blogs .sap.com/2018/04/03/abap-managed-database-objects-and-how-to-to-access-them/https://launchpad.support.sap.com/#/notes/2511210

宇峰
2楼-- · 2020-09-19 09:48

好,非常感谢,我将通过查询CDS实体then/Mats来构建数据提取

我是小鹏鹏啊
3楼-- · 2020-09-19 09:55

您好,霍斯特,谢谢 你的答案。 不幸的是,即使阅读了博客和注释,我仍然不确定我是否理解。 我想通过从ABAP程序中调用它来提取CDS视图数据。 使用Open SQL的限制不是问题。 我应该从CDS视图还是ABAP视图(随时间/发行版稳定哪一个)中选择数据? 还是没有? 以我的示例为例:

  1. CDS视图:SELECT * FROM C_PurRequisitionNoTouch ...除了定义本身(ABAP类或表)以外,还有其他元数据来源吗?
  2. ABAP视图:SELECT * FROM CMMPRNOTOUCH ...在哪里可以找到他视图的元数据,以便找出如何查询它的方法?
  3. 或者,我的设计完全错了吗?

/Mats

野沐沐
4楼-- · 2020-09-19 09:58

经过更多研究后,我相信它是生成的ABAP视图(在我的示例CMMPRNOTOUCH中),我应该从ABAP程序中调用它。 我还找到了带有参数(全部三个)的表,因此该问题也得到了解决。 但是,如果您可以确认这是您在博客中描述的正确方法,那就太好了, Horst Keller

/垫子

一周热门 更多>