总学习目录请点击下面连接
SAP ABAP开发从0到入职,冷冬备战-CSDN博客
目录
1.数据建模和ABAP字典的透明表
现实产品到数据库数据过程
飞行数据模型
做一个简单的引用。
从旅行社来看:
对于开发人员:
透明表
结构体和透明表
在系统中看下透明表
技术设置
2.读取数据
SQL
OPEN SQL
四个复用模块访问数据库
OPEN SQL如何读取数据库表的数据
特殊的select使用情况
select 循环连续读取表中行
SY-DBCNT
into table
SQL优化
表连接
3.权限检查
定义
如何查看
权限检查如何实现
如何插入权限检查语句
实战操作
为权限检查创建元素
如何创建权限对象
如何在程序中使用
1.数据建模和ABAP字典的透明表
现实产品到数据库数据过程
商业应用软件开发中,要将现实生活中的东西使用数据进行建模。
当有了数据模型,要在ABAP字典中创建透明表。
通过透明表的定义,对应的数据库中表会自动地创建在数据库中,后续实际的数据也会被记录进这些表中。
飞行数据模型
做一个简单的引用。
业务: 如果一个旅行社顾客想要从一个地方旅行到另一个地方,那么他们需要找个旅行社查出以下信息
*哪一个线路提供最好的和最直接的航班
*在建议的旅行日上可接受的飞行事件
*居于个别条件,是否有最理想的方案,最便宜,最快,最特殊
从旅行社来看:
数据模型是为了管理需要的数据而设计的,数据在中心数据库中透明表以相应的技术标准被存储,数据的数量远超客户所需。
因此需要能够使用应用程序编辑这些数据来满足客户的个别需求。
下面是旅行社有的一些信息。
城市,机场,航空公司,航线,航班
这些实体都以某些方式相互关联,每个航行事件表包含一个航空公司,一个出发机场,和一个目标机场。
每个可预定的航班总是属于一个已经存在的航班时刻表。
在城市和附近的机场之间分配可以被设置。
我们利用这些关系,处理所需数据。
对于开发人员:
在ABAP字典中创建一个透明表,透明表仅仅是数据库的一个描述。
当透明表被激活时,SAP会提供工具生成透明表所定义的数据库表。
透明表包含不同的字段,允许我们以结构的方式存储和管理数据。
当字段内容被作用数据库唯一表示的时候,我们必须声明这些表字段为键字段。表的键包含键字段,也被称为逐渐,在同一个表中的数据记录必须对于主键值是唯一的,因此数据记录的键值就是表中唯一id。
透明表
在ABAP字典中,透明表是包含实际应用数据的相应数据库表的描述。
也就是说,数据库表和透明表的字段基本是一一对应的。
透明表里面的字段不能包含结构。
除了字段列表,透明表还包含其他用来在数据库上创建同名表和描述其他全部性能的信息。
数据库表的确定,用来创建数据库表需要的技术信息,能够加速对数据库表存取的技术设置。
结构体和透明表
透明表也可以当作结构类型被调用创建对象。只看主属性,附加属性基本不用管。
除了这个,结构体和透明表还有一个差别。
透明表总是一列基础的数据元素,而结构的组件可以仍然是结构,结构的组件甚至可以是表类型。
在系统中看下透明表
进入字典屏幕
前四行的键被打了勾表示他们是透明表的主键,将来生成的数据库表的主键也是这四个字段。
数据元素里面的类型都是在ABAP字典中定义好的类型。如果要定义自己的也需要去ABAP字典中进行定义。
技术设置
透明表包含创建数据库表所有的信息,在技术设置里面
在大小类型里面定义了数据库的大小。
如果满了就会再分配一块空间。
如果选了缓存激活,就表示允许使用缓存。
2.读取数据
学习目标:
列出查询数据库表的不同方法
编程对数据库表中的行和列读取访问
列出读取访问多个数据库表的不同方法
SQL
sql是结构化查询语言的缩写,是一种能对数据库表定义,修改和,查询的语言。
这个后面会一直用到。
每一种关系型数据库系统有一种本地sql,这种本地sql是对特定数据库的。因此使用本地sql语句的ABAP程序不能在所有的SAP系统中不受限制的被使用,因为不同的SAP系统可能使用不同的数据库系统。
OPEN SQL
opensql是一种SAP定义的,对ABAP语言来说不依赖数据库的SQL标准。OPEN SQL语句动态地转换成当前使用的数据库系统对应的本地sql语句,而因此不依赖于数据库。OPEN SQL使ABAP程序使用统一的规则对数据进行访问,而不管所安装的数据库系统。
四个复用模块访问数据库
在使用OPEN sql之前想访问数据库表,可以使用sap提供的一些用于读取的复用单元。
第一个逻辑数据库,从属分层的表中读取数据库。
第二个函数模块,SAP系统的函数库中存储的子程序,带有封装的功能,能够读取分层关系表。
第三个BAPI,带有读取功能的业务对象的方法。
第四个方法就是全局类。
如果没有找到可以复用的单元,就必须自己实现自己读取访问,建议封装这个访问成一个复用组件,也就是说,创建函数模块或者全局类的方法。
OPEN SQL如何读取数据库表的数据
使用oepn sql select语句
包含了一系列的句子,每一个都有不同的任务。
select描述那些字段需要被读取
form 字句表明数据源是什么。
into 确定被选取的数据存放在那个目标变量里面。
where 字句指定被选取的列表的内容,就是个限制条件。
特殊的select使用情况
select single 语句允许从数据库表中读取单挑数据,为确保唯一访问,where字句中的所有字段必须被填写。
如果没有使用where读取到第一条就会被返回
集团字段CLIENT 是个特例,如果没有表明,就表示从当前集团读取特例。
只能使用 CLIENT SPECIFIED组合来指定集团。
我们使用*指定表中素有的字段都被读取选择,如果我们只想要指定部分列,我们可以列出需要的字段,而不是使用 *。
我们使用into字句来指定记录被拷贝到那个目标变量,目标区域是左对齐。
如果我们只是想从表行中选择部分字段,那么我们需要在SELECT 字句中使用一个字段列表。
并且在into后面使用与之结构完全一致的字段的结构体。
into后面不使用结构,也可以使用一个个变量名字,中间用逗号分割。
如果列表字段和目标有不匹配的地方,使用CORRESPONDING FLELDS OF来进行同命匹配拷贝。
select 循环连续读取表中行
起点是一个selcet 终点是一个end select语句
where来确定那一条记录被读取到目标结构中,可以使用and或or来进行连接。
数据库以包的方式把数据传递给应用服务器的接口,接口动态的把OPEN SQL转换为本地SQL。再把包传给服务器。
一旦所有需要的都读取了,循环就会结束了。
SY-DBCNT
显示读到的记录的数量
into table
可以使用into table字句来直接拷贝选中的数据库部分到一个内表中,而不用一行行地处理。
就不用使用循环了。
这个内表里面的字段也需要左对齐,不然就要使用CORRESPONDING FLELDS OF来进行同名匹配拷贝。
按组获取时,内表的内容可能会被覆盖,如果想附加到内表中,可以使用APPENDING TABLE,如果有记录被拷贝到内表中,那么SY——SUBRC返回值是0.SY-DBCNT则包含读到的行数。
如果数据库表第一个字段是集团,那么就是集团限定的。
如果从集团限定的表中读取数据却没有指定,那么读取的就是当前集团的。
如果想要明确的指定集团读取,就要使用where来指定集团
SQL优化
在多数情况下,数据库的访问占用较大的ABAP程序运行时间,为了避免不必要的负荷,可以使用一些OPEN sql技术来进行优化。
1.如果能使用键,最好使用键来进行查询。
2.如果一个表频繁的被索取访问,可以为频繁索取的键创建辅助索引
如何创建索引,在透明表中,通过index按钮,点击后,出现索引表。
3.使用数据检索,就是缓冲区
如果运行时很大的数据被从数据库中取出发送到服务器,可以创建缓存,进行存储。
表连接
从不同的表中读取数据,不建议。
使用前,要先指定三个事情
1.连接的表:那些表要连接
2.那些字段要访问
3.连接条件,那些列需要。
实现表连接两种方式
1.在ABAP字典中,创建用于表连接的数据库视图,并在我们的程序从中选取。
2.在我们的程序中使用语句来实现,从定义的连接中选取,在运行时,系统在数据库接口中动态生成一个适当的数据库查询
除了select语句,我们还有很多其他的语句。
3.权限检查
我们创建的程序,有的用户可以使用,有的不可以使用,所以需要权限检查。
学习目标:解释权限检查,实现权限检查。
定义
SPA系统的关键数据部分功能必须被保护而不被无权限地访问。我们必须在我们的程序中实现权限检查,以便用户只访问授权的部分。
两个class分别由很多权限检查对象,这些对象会赋给权限文件,然后赋给role,最后赋给用户文件。
权限对象可以在对象类中被定义。当我们定义一个权限对象,必须指定适当的字段,通过给字段分配适当的值。来创造实际的权限对象。这个对象可以通过参数文件被集成到需要的用户主数据中,多个不同权限可以被创建在一个对象中。
在运行时,我们可以使用AUTHORITY-CHICK语句检查当前用户,在其用户主记录中是有必须权限执行功能呢,根据检查结果SY-subrc。
根据结果检查,我们可以因此继续我们的程序,
SY-SUBRC=0:用户有权限,
SY-SUBRC<>0:用户没有权限。
通常情况下,权限对象的定义时数据模型和数据库表的一部分。
我们访问一个已经存在的数据模型,使用这个模型的权限对象S_CARRID
这个权限对象有两个字段。
在我们的实行检查之前,必须确定各自权限概念的结构,一个对象通常包含ACTVT字段和一个其他字段,指定被保护的数据类型。这些权限字段的值指定了用户有做什么的权限。
如何查看
可以在ABAP工作台中直接显示权限对象,也可以使用交易事务su21来显示权限对象
权限检查如何实现
id是要检查的权限。
SY-SUBRC是检查结果,=0表示有足够权限。
如何插入权限检查语句
点击pattern按钮,然后点击AUTHORITY-CHECK语句,
最后录入权限对象,生成权限检查。
实战操作
为权限检查创建元素
se11,输入名字点击creat
点击数据元素
话有一个结构,和表类型。
输入短描述,并采用内置类型。
接下来维护字段标签,输入内容,回车,自动确定了长度,点保存
选包,变更请求
最后激活数据元素
现在就可以使用了,这个在ABAP字典中创建了,全局可用。
如何创建权限对象
先创建一个权限对象字段 su20
进入后,有很多现有的。
我们新建一个
指定开发包,变更请求。
有了字段然后创建权限对象 su21
里面都是对象类。
如何创建对象类,我这里权限不够。
起名字,描述,变更请求。
分配字段,保存
如何在程序中使用
打开一个ABAP程序
点击pattern按钮,找到权限这个选项,输入对象名。
然后就可以根据业务进行赋值
查看输出结果
error,不具备这个权限。