ABAP 开发系列(09): ABAP 数据字典

SAP ABAP 数据字典ABAP Dictionary)SAP定义和管理数据的主要工具,是 ABAP Workbench 的重要组成部分。

通过数据字典可以定义系统中的各类数据对象,包括数据类型、数据结构、数据库表、视图等。

数据字典中的所有对象可以供所有SAP程序使用。

用户也可以创建自定义表,称之为Add-On表,一般通过字母 ‘Z’ 或者 ‘Y’ 开头定义。

 

SAP R/3 系统提供了以下 T-Code 维护ABAP数据字典:

SE80 – Repository Browser

SE15 – Repository Information System

SE16 /SE16N – Data Browser

SE11ABAP Dictionary

SE13 – Dictionary technical settings

SM30 – Maintain Table Views

SM31 – Table Maintenance

 

其中,SE11为数据字典的维护工具:

abap_09_Dictionary_Initial_Screen

 

1. 基础数据字段对象

SAP透明表(Transparent Table),系统中存储数据的物理表;

由多个Field 对象组成,而Field 对象则通过参考Data Element对象定义,而Data Element对象又通过参考Domain对象定义,逐层往上继承:

abap_09_Transparent_Table

 


2.抽象级别

Domain:域,也称之为数据域,它是所有数据对象设置的基础;

从前面数据类型的章节中知道,ABAP有8种基本类型,然而Domain可以通过基本类型定义数据类型、格式、长度、初始化值等属性。

 

SAP R/3 系统为Domain提供了以下基本预定义类型:

abap_09_Predefined_Types

 

Date Element:所有数据对象定义的基本类型,它可以以Domain作为参照对象,继承Domain的所有属性;

但是它可以在Domain的基础上重新定义相关长度、格式等属性,一个Domain下可包含多个Data Element。

Field: 透明表字段,可以作为透明表的主/外键,继承了Data Element的所有属性。

 


3.Domain 对象创建与维护

Domain的维护界面包括 Properties、Definition、Value Range三个选项卡:

 

3.1 Properties 选项卡:用于记录Domain对象的创建人、创建时间、归属开发包、语言版本属性;

abap_09_Domain_Properties

 

3.2 Definition 选项卡:主要用于定义该Domain对象的类型;

abap_09_Domain_Definition

 

  • Short Description:Domain的基本描述(必输项);
  • Data Type:   SAP预定义数据类型;
  • No. Characters: 可保存数据字符最大长度;
  • Decimal Places:小数点长度,用于数字类型;
  • Output Length:显示输出的长度;
  • Convers. Routine:定义数据转换程序名;
  •  

    很多数值在数据表中的保存值与其输出的表现值是不同的。

    如:计量单位PC在数据库中保存实际为ST,所以该类型需要相关程序进行转换,

    如:单位转换函数格式为:CONVERSION_EXIT_CUNIT_INPUT,此处取其CUNIT为定义转换函数

    所有转换函数格式均为:CONVERSION_EXIT_XXX_INPUT/OUTPUT,其中XXX为域定义函数名。

     

  • Sign:是否包含负数,用于数字类型;
  • Lower Case:是否允许小写;SAP中字段输入值传入系统后,都会被转换为大写格式,选择选项后,可允许输入小写;
  •  

    3.3 Value Range选项卡:定义Domain数值范围,限制该Domain输入/输出值。

    abap_09_Domain_Value_Range

    只能输入:C、Y、F中的一种。

     

    4. Data Element 对象的创建与维护

    在Data Type文本框输入域中,输入自定义的Data Element,以’Z’ 或’Y’ 开头,然后点击”Create” 按钮创建Data Element;

    在新建Data Element时,与Domain不同的是,Data Element会弹出对话框,让你选择哪种Data Element:

    abap_09_Data_Element_Init

  • Data Element:是一般的数据类型;
  • Structure: 结构体,在《内表与内表结构》章节中介绍过结构体,可以作为一种数据类型维护在数据字典中;
  • Table Type: 透明表类型;
  • 这里直接选择第一个即可。

     

    可以查看已存在的Data Element:

    abap_09_Data_Element_Data_Type

     

    Data Element也包括4个标签选项卡:Attribute、Data Type、Further Characteristics、Field Label

    4.1 Attribute选项卡: 与Domain的Properties一致,显示创建人、创建日期等基本信息;

    4.2 Data Type选项卡:区分Elementary TypeReference Type;

    Reference Type 为参考数据字典中已存在的具体类定义(这里不做详细介绍)。

    Element Type 则又有两种定义方式:

    1) 通过Domain定义,可以输入已经定义好的 Domain,而Data Type、Length、Decimal Places等属性会继承该Domain在系统中自动带出;

    2) 通过R/3系统预定义类型(Predefined Type)定义,需要手动设置相应参数:

    a. 输入R/3系统预定义类型,或按F4键,通过搜索帮助(Search Help)选择预定义类型;

    abap_09_Predefined_Type_Search_Help

     

    b. 在Length 输入Data Element的长度;

    abap_09_Data_Element_Predefined_Type_Length

     

    c. Decimal Places 用于数字类型,显示数字保留多少位小数点;

    若Data Type为 QUAN 的数值类型,可在这里定义需要保留几位小数。

     

    4.3 Further Characteristics 选项卡:Data Element的高级参数设置;

    abap_09_Data_Element_Further_Characteristics

    可以对Data Element设置其Search  Help,Parameter ID等。

    Parameter ID用于SAP屏幕间传输参数:

    输出(Outbound)使用 SET  Parameter ID ‘XXX’;输入(InBound)接收使用 GET Parameter ID ‘XXX’。

     

    4.4 Field Label 选项卡:定义该Domain在不同数值长度时,显示不同的名称;

    abap_09_Data_Element_Field_Label

     

    SAP透明表的Field对象都是通过参考Data Element对象定义类型;

    在输出内容时,SAP会根据输出的长度适应显示不同的名称;

    通过Short、Medium、Long、Heading 4种模式分别定义相应的名称。

     
     

    5. SAP R/3数据

    SAP R/3系统数据库中存放的数据大致分有以下几类:

    abap_09_SAP_R3_Data

     

    1) Master Data:业务主数据;即:SAP 各模块中的主数据:总账科目、供应商主数据、物料主数据等;

    2) Transaction Data:业务处理数据;在业务处理操作中,生成的凭证号等数据,如:销售订单凭证号、采购订单凭证号、收货凭证号等;

    3) System Data:系统数据;包括ABAP程序的源码、元数据、文档等数据;

    4) Configuration Data:配置数据;存放企业项目实施时,配置的初始化信息,如:货币汇率、订单类型、变式等

     
     

    6. SAP Table类型

    SAP Table类型有几种类型:Transparent Table、Pooled Table、Cluster Table、Internal Table

     

    6.1 Transparent Table

    透明表,透明表是一对一的表,同时存在于Dictionary 和Database中, 且具有完全相同的结构,有相同的名称,相同数量的字段,相同的字段名;

    如若你创建一个自定义透明表的同时,完全相同的一个表将会被创建在Database中。

    Transparent Table用来存储应用数据,而 Pooled table 和C luster table用来存储系统数据。

     

    6.2  Table Pool 和 Pooled Table

    Table Pool是数据库中的一个Table,它存储的是Pooled Table。

    R/3用Table Pool存储大量的(数十到数千个)小Table(每个只有10-100行)。

    Table Pool减少了同时打开多个小Table所需要的数据库资源。

    Pooled Table被SAP主要用于存储定制数据。

    abap_09_Pooled_Table

     

    6.3  Table Cluster 和Cluster Table

    Cluster Table类似于Pooled Table。它们用来存储少数几个(大约2-10个)非常大的Table。这几个表有相同的主键,需要同时访问它们。

    Table Cluster包含的Table比Table Pool少的多。与Table Pool不同,Table Cluster中的每个Table有相同的主键,多个不同的Table中有相同主键的行组成Table Cluster中的一行。

    Cluster table减少了读数据库的次数,从而提高了性能。

    abap_09_Cluster_Table

     

    6.4  Internal Table

    内表,在ABAP Program中的临时创建存储空间的数据表,包括有5种类型:Standard Table,Sorted Table, Index Table,Hashed Table, Any Table ( Generic type , Rarely used )

    具体内容可查看《内表与内表结构》,这里不做累述。

     

    6.5 Transparent Table 与  Cluster Table的区别

    Transparent Table用来直接存储数据,在系统以外可以使用Open SQL语句直接读取Database的数据;

    Cluster Table 和Pooled Table是不能从外部访问的,因为其数据都是被聚合和汇集到一个栏位中。

    简单的说:

    Transparent table:是对应数据库中实际存在的表,可以在数据库中直接找到

    Cluster Table 和Pooled Table:数据库表中存放的一条实际记录,可能对应的是系统中多张表中的逻辑记录

     


    7. 透明表(Transparent Table)的创建与维护

    abap_09_Transparent_Table_Fields

    Transparent Table 界面包括5个标签选项卡:Attribute、Delivery and Maintenance、Fields、Entry help/check、Currency/Quantity Fields

     

    7.1 Attribute选项卡

    与 Domain 的 Properties 和 Data Element 的 Attribute 一致,显示创建人、创建日期、归属开发包、语言版本等基本信息

    7.2 Delivery and Maintenance选项卡

    abap_09_Transparent_Table_Deliver_and_Maintance

    1) Delivery Class:表示该表的传递类型;通过搜索帮助看到以下几类类型:

    abap_09_Transparent_Table_Deliver_Class

     

    2) Data Browser/Table View Maint.:用于确认该表数据是否允许通过表维护工具直接使用;

    展开选项,有三项可以选择,依次是: 有权限的维护、允许维护、不允许维护

    abap_09_Transparent_Table_Data_Table_View_Maintenance

     

    7.3 Fields选项卡:显示Transparent Table维护的主要字段属性;包括:

  • Fields:表字段名称,同一表中的字段名称不能重复;
  • Key:主键,如若勾选,则表示该字段为主键,表中数据不允许重复,支持2个以上字段作为表主键;
  • Init:是否为空,如若勾选,在新增数据时,该字段不能为空;
  • Field Type:字段类型,为R/3系统中定义的Data Element,输入后,系统会带出相关的属性;
  • Data Type:数据类型,如若参照Domain定义的Data Element会带出相应的预定义数据类型,也可以通过字典维护器中的 “Predefined Type“按钮,
  • abap_09_Transparent_Table_Fields_Predefined_Type_Button

    自定义基本类型:

    abap_09_Transparent_Table_Fields_Predefined_Type_Input

     

  • Length:字段内容长度
  • Decimal Places:小数点位数
  • Short Description:表字段描述
  •  

    7.4 Entry help/check 选项卡:数据参考关联表、Search Help、外键、Domain等属性信息;

    因 SAP 使用的是关系数据库,很多主要字段可同时分布在不同表中;

    为了保证这些关键字段的准确性,必须要求这些字段以某个主表的数据为参考标准,以防止用户在数据修改或新增时出错。

    该选项卡中的内容信息,均为系统保留类型,在输入Field Type之后,将自动显示。

    abap_09_Transparent_Table_Entry_Help_Check

     

    7.5 Currency/Quantity Fields 选项卡:货币/数量字段维护

    数据表中有一些特殊单位,如货币、计量单位等。与它们相关的数据也是直接从关联表中获取。

    当创建完数量字段后,都要根据通过手工维护输入参考的货币或计量单位:

    abap_09_Transparent_Table_Currency_Quantity_Fields

    如若没有设置,创建完Add-On表之后,在激活该表时,系统会报出没有维护货币或计量单位的错误。

     

    7.6 透明表的技术参数设置(Technical Settings

    当表字段维护成功后,还需要对表的技术参数进行设置;

    技术参数界面通过字典维护器工具栏的 “Technical Settings” 按钮进入:

    abap_09_Transparent_Table_Technical_Settings

    Technical Settings 维护界面:

    abap_09_Transparent_Table_Technical_Settings_Screen

    1) Data Class:设置表在数据库中的物理存储空间,以便分类与维护,默认分为几类:

    abap_09_Transparent_Table_Data_Class

     

    2) Size Categories:按实际需求定义表的空间大小,以大小分为以下9种:

    abap_09_Transparent_Table_Size_Catalogries

     

    3) Buffering 和 Buffering Type:定义表的缓存空间,设置缓存空间有利于提高表的检索效率,但是同样也会加大服务器的资源损耗。

    一般不建议使用缓存,如若要提高检索效率,可以通过设置表索引。

    4) Log data changes:此复选框设置是否会记录表数据变动情况,此功能对存储空间损耗较大,如无特殊情况不推荐使用。

     

    7.7 透明表索引(Indexes

    随着表中数据量日益增大,查询数据的速度效率也会相应的降低,可以通过对常用的字段创建索引,以提高查询效率。

    在工具栏点击“Index”按钮,查看透明表中的索引:

    abap_09_Transparent_Table_Indexes

    标准表中都会创建相应字段的索引:

    abap_09_Transparent_Table_Indexes_Standard

    Add-On表中没有维护索引的话,是空白列表:

    abap_09_Transparent_Table_Indexes_Cus

    可以通过点击工具栏的新建索引按钮,创建索引:

    abap_09_Transparent_Table_Indexes_Create

    输入索引名字:

    abap_09_Transparent_Table_Indexes_Create_Index_Name

    进入索引字段维护界面:

    abap_09_Transparent_Table_Indexes_Create_Screen

    输入索引描述及相关索引字段。

    除了手工输入Field Name外,可以通过点击 “Table Fields”按钮,选择表中相应字段:

    abap_09_Transparent_Table_Indexes_Tables_Fields

    输入完成后,点击保存及激活按钮,激活该索引后,即可完成该设置。

     


    8. 创建 Add-On 表操作实例

    结合上面内容,这里给出一个操作实例,通过最快捷方式创建一个Add-On表,

    创建自定义表,自定义Data Element,自定义Domain等。

     

    1) 通过SE11进入数据字典初始化界面,在Database Table 处输入自定义表名称:”ZSAPJX09“,点击”Create“按钮创建Add-On 表

    abap_09_Dictionary_Demo_Initial_Screen

     

    2)进入维护界面后,默认位于Delivery and Maintenance标签:

    Delivery Class:由于为定制表,故选择C;

    abap_09_Dictionary_Demo_Delivery_Class

    Data Browser/Table View Maint.:允许通过维护器维护数据;

    abap_09_Dictionary_Demo_Devliery_and_Maintenance

     

    3) 切换到Fields选项卡,在字段维护中输入字段,第一行必须输入MANDT字段;

    因为同一个SAP可以分有多个CLIENT,不同的CLIENT数据完全不同。

    实际上同一个服务器的数据都是放在相同的表中,通过MANDT字段来保存Client信息并进行区分。

    所建立的数据为Client独享,MANDT为SAP Table保留字,一般情况下为必填。

    abap_09_Dictionary_Demo_Fields

    MATNR为系统标准Data Element,会自动带出相应属性;

    ZTESTF为自定义Data Element,由于还未定义该Data Element,所以相应属性:Length、Decimal Places、Sort Description都为空,且在下边栏会有未激活的提示;

    先保存表定义,然后双击ZTESTF Data Element,会弹出未创建该Data Element,让你选择是否创建:

    abap_09_Dictionary_Demo_Create_Data_Element_Dialog

    点击”Yes”按钮,进入Data Element维护界面,并输入相应选项;

    Data Type选项卡:

    abap_09_Dictionary_Demo_Data_Element_Screen

     

    Field Label选项卡:

    abap_09_Dictionary_Demo_Data_Element_Field_Label

    在定义Element Type时,“ZTEST_DOMAIN” 亦未定义Domain,同样的,先保存” ZTESTF” Data Element,然后双击 “ZTEST_DOMAIN”,弹出提示对话框:

    abap_09_Dictionary_Demo_Create_Domain_Dialog

    点击“Yes”,进入Domain维护界面,并输入相应内容:

    abap_09_Dictionary_Demo_Domain_Screen

    输入完成后,检查通过后,直接保存并激活即可(每个对象创建完之后必须激活,才能使用,Domain、Data Element、Table等都一样)。

    abap_09_Dictionary_Demo_Data_Element_Active

     

    激活成功后,后退(或按“F3”键),返回到Data Element维护界面,激活” ZTESTF” Data Element:

    激活Data Element成功后,再次后退,返回到定义透明表的维护界面,这时候,TESTF字段的Domain属性会自动带出:

    abap_09_Dictionary_Demo_Fields_Created

    当然,也可以先创建好自定义Domain和Data Element,然后在维护字段时,直接输入Data Element。

     

    4) 点击“Technical Settings”按钮,进入技术参数设置维护界面:

    输入Data Class 与Size Category,其他保持默认:

    abap_09_Dictionary_Demo_Technical_Settings

    设置完成后,保存,技术参数状态会变成 “Saved”:

    abap_09_Dictionary_Demo_Technical_Settings_Status

    返回字段维护界面,保存透明表并激活,即可完成Add-On表的创建:

    abap_09_Dictionary_Demo_Table_Status

     

    5) Add-On表创建成功后,如若需要添加Field字段,但又不想参照Data Element定义,则可以通过Predefined Type定义;

    输入新的字段名称后,点击 “Predefined Type”按钮:

    abap_09_Dictionary_Demo_Predefined_Type

    点击后, 输入预定义类型、长度、描述,由于定义的是数值型,所以要指定保留小数点位数:

    abap_09_Dictionary_Demo_Predefined_Type_Input

    定义成功后,保存并激活,会发现出现错误:

    abap_09_Dictionary_Demo_Error

    原因在于我们新添加的字段为数值类型字段,必须维护参照的计量单位。

     

    6) 切换到Currency/Quantity Fields 选项卡,在MENGE字段的 ”Reference Table” 和 “Reference Field” 栏位位置输入参考表和参考计量单位;

    一般都参考物料主数据的计量单位,分别输入”MARA“和”MEINS“。

    abap_09_Dictionary_Demo_Currency_Quantity_Fields

    输入完成后,保存并激活,这次就不会出现错误了。

     
     
     
     
     
     

    参考文献:

    《SAP ABAP实用程序开发攻略》(唐骏华 编著)

    《SAP实用程序开发进阶》(唐 嘉 等 编著)

     

    参考文章:

    http://blog.csdn.net/kevingao/article/details/335724 (科华在线)

    http://www.erpgreat.com/abap/the-different-types-of-sap-tables.htm

     
     

    6 条评论

    1. jevinxu 说:

      @lisaw1 :) 谢谢支持,文章已恢复,有敏感词,被屏蔽了!

    2. lisaw1 说:

      写的真的不错,能不能整整呢。。看不到呢。

    3. jevinxu 说:

      @travelu 被垃圾评论搞不见了,回头我再整整~

    发表评论

    电子邮件地址不会被公开。 必填项已用*标注

    您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>