有人可以清楚地解释什么是字典类型和ABAP类型

2020-08-19 20:53发布

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

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


对不起,我是SAP系统的新手,即使我在互联网上学习和搜索了将近两天,我也确实无法理解有关SAP系统的一些基本逻辑。

我的问题是:为什么我只能在ABAP程序中使用服务器词典类型? 我的SAP系统版本是

据我了解,CURR,CUKY是ABAP词典中的预定义数据类型,我们可以在ABAP程序中使用它,因为SAP系统将这些类型定义为默认数据元素(对吗?)。 ABAP程序将预定义的数据类型转换为ABAP类型,如下所示:

就我而言,我无法在ABAP程序中使用CURR/CUKY的数据类型/数据元素,但是UNIT,DATS可以。 我想念它背后的某些知识还是误解某些东西? 有人可以清楚地解释吗? 谢谢。

(6.3 kB)

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

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


对不起,我是SAP系统的新手,即使我在互联网上学习和搜索了将近两天,我也确实无法理解有关SAP系统的一些基本逻辑。

我的问题是:为什么我只能在ABAP程序中使用服务器词典类型? 我的SAP系统版本是

据我了解,CURR,CUKY是ABAP词典中的预定义数据类型,我们可以在ABAP程序中使用它,因为SAP系统将这些类型定义为默认数据元素(对吗?)。 ABAP程序将预定义的数据类型转换为ABAP类型,如下所示:

就我而言,我无法在ABAP程序中使用CURR/CUKY的数据类型/数据元素,但是UNIT,DATS可以。 我想念它背后的某些知识还是误解某些东西? 有人可以清楚地解释吗? 谢谢。

(6.3 kB)
付费偷看设置
发送
6条回答
ZJXianG
1楼 · 2020-08-19 21:24.采纳回答

您的问题:

>>为什么我只能在ABAP程序中使用服务器词典类型?
>>我不能在ABAP中使用CURR/CUKY的数据类型/数据元素

  • 这是因为在您的系统中,CURR和CUKY是通用的预定义数据类型,而CURR也被定义为域,但两者均未定义 另一方面,
  • UNIT和DATS在系统中被定义为数据元素,因此您可以在编码中选择它们(它们也是预定义的数据 类型,并且在DATS的情况下也是一个域,但是从简单地能够将它们用作编码中的变量的类型的角度来看,这没关系。

通常的理解:

通常,对于ABAP编码中的简单变量,可以使用数据元素也可以使用 ABAP类型。 这是这两种方式的连接方式:数据元素具有分配的域,该域具有分配的数据类型,该数据类型具有基础ABAP类型并映射到内部ABAP类型。

  • 自定义数据元素和 可以创建域,而预定义了数据类型和ABAP类型以及内部ABAP类型。
  • 数据元素,域和数据类型是DDIC的一部分,而运行时环境使用ABAP类型和内部ABAP类型。
  • 可以定义相同的名称 对于数据元素,域,数据类型以及ABAP类型,除了数据元素和ABAP类型外,它们必须是唯一的。
    在某些情况下,对于某些" 类型",它们不必"必须"彼此链接
    (例如,字符串/STRING是域,数据类型和ABAP类型,内部ABAP类型为" g",而DATS是数据元素,域和 ABAP类型为" d"且内部ABAP类型为" D"的数据类型)

何时按ABAP类型定义变量以及何时按数据元素定义变量:

在ABAP程序中定义变量时,出于简化原因,您可以选择ABAP类型,或者,如果您想拥有DDIC功能的"全部功能",则可以使用具有DDIC功能的数据元素,特别是 用于GUI输入/输出,来自所有三个元素的组合:数据元素(例如 说明,搜索帮助),域(例如值帮助,转换退出),数据类型(例如初始值,DATS和TIMS的日历/日期/时间计数功能)。

旁注A:这是 来自ABAP文档中有关预定义词典类型数据类型和ABAP类型以及它们如何链接的信息:

< p>注释B:以下屏幕快照显示了在Oracle数据库中数据元素,域,数据类型和内部ABAP类型以及映射的数据库类型之间的大多数链接:

< img src="/storage/temp/1803697-data-element-domain-data-type-for-db-table.png">

愤怒的猪头君
2楼-- · 2020-08-19 21:45

UNIT,DATS,LANG,LCHR,CURR是 DDIC预定义的数据类型。 它们只能在DDIC对象(域,数据元素,表等-> cf事务代码SE11)中使用,直接在ABAP中使用它们无效(相反,ABAP应该使用DDIC对象)。

bbpeas
3楼-- · 2020-08-19 21:32

在ABAP程序中,我们不使用预定义类型。

大多数时候,我们使用数据元素。

数据元素是描述+域(字典对象)

域表示数据的真实类型

例如,对于某个日期,您可以使用SYDATUM。 (数据元素)

可以在事务SE11中创建字典对象,例如数据元素和域。

您也可以在程序中双击数据元素以跳转 直接将其发布到此对象的屏幕上

落灬小鱼
4楼-- · 2020-08-19 21:42

请以文本形式而不是图像形式发布代码,以便人们可以通过测试您的代码来轻松回答。

大道至简
5楼-- · 2020-08-19 21:28
可以Cel
" 1. ABAP类型=(预定义)数据类型=基本数据类型
"(预定义)字典类型= DDIC类型=域类型

我想我得到您要在此处进行比较的问题,问题是,ABAP和字典/存储库中有太多"类型"的事物,并且它们 命名相似或什至相同,通常很难像我或您一直尝试做的那样简单地将其分解。 尤其是SAP文档有时对不同的"类型"使用相同的名称,有时甚至对相同的"类型"使用两个不同的名称。

我会在1.语句中用一个" ="符号来切换 " <-"符号,然后我会同意它(因为它们绝对不相等)。

" 2. ABAP和ABAP词典是两种不同的体系结构,以下数据类型树用于ABAP 只有ABAP词典具有比ABAP丰富的数据类型(只是显示在data-types.png中)

是的,ABAP和ABAP词典/存储库是两个不同的东西,您可以轻松地更改ABAP词典/存储库,因为 它全部保存在数据库记录中,但是您不能更改ABAP,因为这几乎是"其他"(编码,堆栈,运行时,调试等),我不会将它们称为两种不同的体系结构,因为这意味着 对我来说,它们是可互换的,但是,您将它们"需要"在一起。

" 3. SAP系统没有预定义的数据 映射到字典类型的元素,如果我需要在ABAP程序中使用CURR,CUKY字典类型,我应该自己创建Z_CURR/Z_CUKY(或引用表字段)并使用它,我可以在ABAP程序中使用UNIT和DATS  SAP系统预定义了具有相同字典类型名称的数据元素的巧合。

"是"。 (尽管有一些标准数据元素通过域链接到字典类型,并且它们都具有相同的名称,从技术上讲,它们可以被认为是"巧合",但开发人员显然是故意这样做的,除非您不是那样做的。

通常最好的做法是为自己的程序定义自己的DDIC数据元素和域。 这样,在进行必要的更改时,您将拥有最大的自由度。 只是您非常确定,重用标准DDIC完全可以满足您的目的/要求,而不是应重用它们。

土豆飞人
6楼-- · 2020-08-19 21:19
  • 如果可能,请尝试使用尽可能多的数据元素在ABAP编码中声明简单变量,而不是使用ABAP类型
  • 仅在必要时且绝对不需要DDIC功能时,才使用ABAP类型< br>最有可能的是,您将使用ABAP类型的string和xstring而不是查找数据元素或创建一个数据元素。
    在其他情况下(多数出于简化原因),您将选择使用ABAP类型

一周热门 更多>