6.数据建模和数据检索及权限检查

 总学习目录请点击下面连接

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,不具备这个权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反复出现 idf.py: command not found 的解决办法

版本&#xff1a;ESP-IDF v4.4.8 1. 问题描述 当我们需要经常使用 ESP-IDF 时&#xff0c;总要反复安装编译链、设置环境&#xff0c;不然就会显示 idf.py: command not foundESP-IDF 是乐鑫官方的物联网开发框架&#xff0c;适用于ESP32、ESP32-S、ESP32-C 和ESP32-H 系列S…

IIC 通信协议

IIC 通信协议 参考&#xff1a;CSDN-Projectsauron、B站-江协科技 IIC Overview IIC协议&#xff08;Inter-Integrated Circuit&#xff0c;可简写为 I2C&#xff09;&#xff0c;是一种用于各种电子设备之间进行通信和数据交换的串行通信协议。它是由飞利浦&#xff08;Phil…

【图像处理】利用numpy、opencv、python实现车牌检测

| 利用opencv实现车牌检测 整体流程涉及5个部分 图像通道转换对比度增强边缘连接二值化边界区域裁剪 图像通道转换 将RGB图像转换为HSV图像&#xff0c;仅保留V通道。V通道表示颜色的明暗&#xff0c;常用于图像对比度拉伸、直方图均衡化等流程。 原图像&#xff1a; V通…

linux切换用户异常

1、报错现象 报错su: failed to execute /bin/bash: Resource temporarily unavailable 2、解决方案 vim /etc/security/limits.d/20-nproc.conf

UE5安装Fab插件

今天才知道原来Fab也有类似Quixel Bridge的插件&#xff0c;于是立马就安装上了&#xff0c;这里分享一下安装方法 在Epic客户端 - 库 - Fab Library 搜索 Fab 即可安装Fab插件 然后重启引擎&#xff0c;在插件面板勾选即可 然后在窗口这就有了 引擎左下角也会多出一个Fab图标…

Java、鸿蒙与嵌入式开发:技术选择与职业发展分析

在当今快速发展的科技领域中&#xff0c;Java、鸿蒙和嵌入式开发代表着不同的技术方向和职业机遇。每个方向都有其独特的市场价值和发展前景&#xff0c;让我们深入分析这三个领域的特点、发展趋势和职业规划。 Java开发方向已经发展了二十多年&#xff0c;仍然在软件开发领域…

synchronized 锁升级实现原理

synchronized 锁升级实现原理 对象的内存结构 在HotSpot虚拟机中&#xff0c;对象在内存中存储的布局可分为3块区域&#xff1a;对象头&#xff08;Header&#xff09;、实例数据&#xff08;Instance Data&#xff09;和对齐填充 我们需要重点分析MarkWord对象头 MarkWord …

vue3实现页签

效果 注意点 useStore涉及的部分是pina的缓存&#xff0c;需要改成自己的&#xff1b;userStore.tabStore是获取缓存里的页签&#xff0c;userStore.$patch(state > { state.tabStore tabStoreList.value }) 是存储改变的页签注意我的页签是根据路由path来判断的&#xf…

dfs算法搜索(详细)

目录 算法简介&#xff1a; 枚举方式&#xff1a; 1.每一个数都有两种状态&#xff0c;也就是选或不选&#xff0c;时间复杂度也就是2^n&#xff0c;每一个数都有选和不选两种状态。 2.生成给定集合所有可能排列的方法&#xff0c;与之不同的是同样是1 2 3三个数字&#xff0…

【机器学习】解构概率,重构世界:贝叶斯定理与智能世界的暗语

文章目录 条件概率与贝叶斯定理&#xff1a;深入理解机器学习中的概率关系前言一、条件概率与贝叶斯定理1.1 条件概率的定义与公式1.1.1 条件概率的定义1.1.2 条件概率的实例讲解 1.2 条件概率的性质与法则1.2.1 链式法则1.2.2 全概率公式1.2.3 贝叶斯定理的推导 1.3 贝叶斯定理…

利用开源Stable Diffusion模型实现图像压缩比竞争方法用更低的比特率生成更逼真的图像

概述 论文地址&#xff1a;https://studios.disneyresearch.com/app/uploads/2024/09/Lossy-Image-Compression-with-Foundation-Diffusion-Models-Paper.pdf 迪士尼的研究部门正在提供一种新的图像压缩方法&#xff0c;利用开源Stable Diffusion V1.2 模型&#xff0c;以比竞…

【Flask+OpenAI】利用Flask+OpenAI Key实现GPT4-智能AI对话接口demo - 从0到1手把手全教程(附源码)

文章目录 前言环境准备安装必要的库 生成OpenAI API代码实现详解导入必要的模块创建Flask应用实例配置OpenAI API完整代码如下&#xff08;demo源码&#xff09;代码解析 利用Postman调用接口 了解更多AI内容结尾 前言 Flask作为一个轻量级的Python Web框架&#xff0c;凭借其…

SpringBoot【十三(实战篇)】集成在线接口文档Swagger2

一、前言&#x1f525; 环境说明&#xff1a;Windows10 Idea2021.3.2 Jdk1.8 SpringBoot 2.3.1.RELEASE 二、如何生成Swagger文档 上一期我们已经能正常访问swagger在线文档&#xff0c;但是文档空空如也&#xff0c;对不对&#xff0c;接下来我就教大家怎么把相关的接口都给…

Qt之自定义动态调控是否显示日志

创作灵感 最近在芯驰x9hp上开发仪表应用。由于需要仪表警告音&#xff0c;所以在该平台上折腾并且调试仪表声音的时候&#xff0c;无意间发现使用&#xff1a; export QT_DEBUG_PLUGINS1 可以打印更详细的调试信息。于是想着自己开发的应用也可以这样搞&#xff0c;这样更方便…

Linux网络 UDP socket

背景知识 我们知道&#xff0c; IP 地址用来标识互联网中唯一的一台主机&#xff0c; port 用来标识该主机上唯一的一个网络进程&#xff0c;IPPort 就能表示互联网中唯一的一个进程。所以通信的时候&#xff0c;本质是两个互联网进程代表人来进行通信&#xff0c;{srcIp&…

数据链路层(Java)(MAC与IP的区别)

以太网协议&#xff1a; "以太⽹" 不是⼀种具体的⽹络, ⽽是⼀种技术标准; 既包含了数据链路层的内容, 也包含了⼀些物理 层的内容. 例如: 规定了⽹络拓扑结构, 访问控制⽅式, 传输速率等; 例如以太⽹中的⽹线必须使⽤双绞线; 传输速率有10M, 100M, 1000M等; 以太…

Apache APISIX快速入门

本文将介绍Apache APISIX&#xff0c;这是一个开源API网关&#xff0c;可以处理速率限制选项&#xff0c;并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15&#xff1a;简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的…

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用

文章目录 1 相关用语及其关系2 Plotter类的基本使用3 Plotter类具体的初始化设置3.1 全部初始化参数3.2 使用不同的axes vedo是Python实现的一个用于辅助科学研究的3D可视化库。 vedo的plotter模块封装了绘制器类Plotter。 Plotter实例可以用于显示3D图形对象、控制渲染器行为、…