导航:首页 > 源码编译 > abap编译器原理

abap编译器原理

发布时间:2022-09-04 23:38:15

‘壹’ 哪位前辈给我讲讲ABAP中BDC的原理、作用,以及为何呀使用BDC请详细的讲讲。谢谢。

模拟一个场景:输入T-code, 进入一个屏幕,在某些字段输入值(也可能是标注checkbox选中或者不选中)或者修改这些字段里的值。‘ENTER’,再SAVE。这样一条记录的修改完成,继续下一条记录,循环……
就这个场景,如果让一个人做几万条记录,想想,都要疯啦,呵呵。要是让计算机来模拟人的操作就容易了。BDC作用大致就是这样模拟前台业务操作。
SAP可以通过一个程序(T-CODE:SHDB)把用户的一次业务操作记录下来。
从用户输入transaction code(事务代码),点下“Start Recording”开始,对于用户的来说是一次普通的业务操作,但是SAP却在记录:
光标放到哪个字段,(在程序中不用改变)
填入了什么值,(变量,循环中的Internal Table 某个字段)
点击了什么按钮(在程序中不用改变)
原理基本就是先记录一次操作,然后在程序里循环模拟这次业务操作。

‘贰’ 如何提高ABAP程序运行效率

程序的效率是每个程序员都应该重视的,无论您是采用哪一种语言进行开发. 程序有时候越短,并不
一定越快,有时候程序很多代码,但不一定会很慢. 性能是一把双刃剑, 获得时间效率的同时, 牺牲
的是空间的开销. 这里提供一些建议以提高你的程序运行速度和减低系统荷载。
首先是尽量减少I/O操作,类似对硬盘的读写的I/O操作是最耗费时间的, 比如读写数据库。以下是
减少I/O操作的例子:
1, 减少数据库DB的读写操作, 当使用VIEW视图的时候, 当被视图join的table有数据更新操作的时
候, 同时系统也会更新到这个view里面, 使得它们之间的数据一样, 所以使用视图会对这些日常操
作带来效率问题. 如果视图join的表多数是日常事物需要更新的事物数据表(如EKET), 就要避免
使用视图.
2, 避免使用SELECT *, 尽量使用SELECT A B C INTO TABLE ITAB这样的语句。这个操作会将所有符
合条件的数据一次性地读进内表,这比在SELECT A B C INTO WA... APPEND... ENDSELECT的循环中
添加数据到内表要快。不用频繁的读DB.
3, 避免频繁使用SELECT SINGLE语句, 特别是在LOOP和SELECT...ENDSELECT里面用, 应该把要读取
的数据用SELECT FOR ALL ENTRIES IN 一次全部取得, 然后用READ TABLE WITH KEY ... BINARY
SEARCH.
虽然说操作内存比磁盘操作要高效,但是如果对内存的使用不加以控制,可能有些时候不得不对硬盘
的交换空间操作, 这样就增加了对磁盘的I/O读写操作.正如下面所说:
4, 当你定义内表的时候可以也会出现这样的问题, 比如你定义一个内表使用的是OCCURS 100,而不
是OCCURS 0, 会导致内表长度大于100的时候,就会占用系统页面缓存。
5, Field-groups对于多层次的排序和显示是非常有用的。它是将数据写入系统的页面文件,而不是
内存(内表一般是使用内存的)。基于这个原因,field-groups比较适合于处理大量数据的列表(
一般超过50000条记录)。如果涉及大量的数据处理,应该首先和系统管理员协商来决定这个程序最
多能使用多少内存,以计算这个程序需要使用多少资源。然后你就可以决定是把数据写入内存还是
交换空间。
6, 用SORT代替ORDER BY, ORDER BY从句是执行在数据库服务器上, 而SORT是ABAP语句执行在应用服
务器上的. 数据库服务器通常会形成性能瓶颈问题, 所以最好是吧数据导入内表做SORT.
7, 避免使用SELECT DISTINCT语句, 因为当你用来判断唯一的字段为非索引字段时, 效率是十分的
低, 所以请导入内表SORT后, 使用DELETE ADJACENT DUPLICATES 来去重复.
其次就是要减轻CPU的负载, 可以通过优化程序来改善,比如在程序中语句和算法, 以下是减低CPU
负载的优化例子:
1, 使用宏代替频繁函数调用. ABAP没有内联函数这个说法, 所以我们如果需要频繁调用函数时, 函
数调用有栈内存创建和释放的开销. 在ABAP中可以用宏代码提高执行效率,宏代码不是函数但使用
起来像函数,编译器用复制宏代码的方式取代函数调用,省去了参数压栈、从而提高速度。注意使
用宏有缺点:(1)容易出错, 宏不能pass-by-value按值传递,用于代替实现函数功能时要十分注意!
(2)不可调试; (3)无法操作类的私有数据成员.
2, 避免使用过得的LOOP 和SELECT .... END SELECT. 避免使用嵌套的LOOP 和SELECT .... END
SELECT.
3, 尽可能多地使用表的KEY FIELD作为Where分句的条件选项。比如SELECT * FROM BSEG WHERE
BUKRS = '1000' AND BELNR = '0100000007' AND GJAHR =
'2006' AND BUZEI = '003'. 这里的四个字段BUKRS,BELNR,GJAHR,BUZEI 都
是BSEG表的KEY字段.
4, 如果某些数据需要频繁的从不同表提取, 使用视图VIEW实现读取缓存可以提高效率. 当视图连接
的是读取次数较多, 但写入不频繁的表时(比如物料主数据表MARA), 可以使用视图, 这样比在程序
里面简单用join要快,理论上join语句每次读取的速度都是一样的, 而视图是从读二次开始就快了,
而且cache使得网络负载减低.
5, 使用SQL语句里面的JOIN时候, 应该避免JOIN的表不要超过3个, 否则严重影响效率. 如果真的要
JOIN表3个以上的话, 正确的方法不是用视图VIEW, 而是使用SELECT ... INTO TABLE ... FOR ALL
ENTRIES IN 以及 READ TABLE WITH KEY BINARY SEARCH.例如我们要提高读取BSEG表的性能,首先我
们会根据GJAHR主键从BKPF表取出部分数据到内表itab,然后使用FOR ALL ENTRIES IN itab WHERE
BSEG~BELNR = itab~BELNR 这样的的方法取得符合itab里所有条件的BSEG数据.注意使用FOR ALL
ENTRIES要先CHECK作为条件的内表itab是否为空,还有作为WHERE的条件在这个内表里面是否会有空
值存在,否则无效.
6, 注意使用CORRESPONDING FIELDS OF 和 MOVE-CORRESPONDING 时候会进行字段比较, 带来CPU的
开销大.
7, 避免过得而频繁的数据类型转换,比如N转换为C,但是从N转换成STRING却是很快的,因为操作
STRING比CHAR类型少了比较长度的时间.
8, 使用二级索引提高DDIC的读写效率, 可以根据你的需要在SE11里面创建INDEX, 并让你程序里的
SQL查询语句里WHERE条件的顺序与你的索引顺序一致.
9, 二分查找比线性查找要高效,READ TABLE的之前使用SORT TABLE BY XXX 某个表关键字段进行排
序, 然后使用READ TABLE WITH KEY XXX = 'XXX' BINARY SEARCH. 这个就是所谓的二分
查找法的应用.
10, 避免使用SQL语句动态查询条件,动态表名和动态字段名, 必要时候用宏或者子程序模块代替.
11, 对于同一功能的函数和方法, 调用METHOD比调用FUNCTION要快.
12, SORTED TABLE可以使用二分查找法取得节点, 其时间复杂度是O(log N),但是插入节点会慢,因
为要移动很多节点. 而HASHED TABLE则是基于哈希算法的,其高效主要体现在把数据的存储和查找时
间大大降低,几乎可以看成是常数时间O(1),而代价是消耗比较多的内存,然而在硬件技术越来越
发达的今天,用空间换时间的做法在某种意义上是值得的。但是使用哈希表必须注意键值的唯一性
!如果键值会出现重复的话, 不能使用哈希表,只能用排序表和标准表。
13, 使用APPEND LINES(或者INSERT LINES) OF ITAB1 TO ITAB2 比 LOOP AT ITAB1 INTO WA.
APPEND(INSERT) WA TO ITAB2. ENDLOOP. 要高效.
14, 使用效率比较高的COLLECT, DELETE ADJACENT DUPLICATES FROM语句。
15, 使用高效的CONTEXT SQL语句.如以下代码2比代码1要快10倍以上!
代码1:
SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.
SELECT SINGLE AIRPFROM AIRPTO INTO (AP1, AP2)
FROM SPFLI
WHERE CARRID = SBOOK_WA-CARRID
AND CONNID = SBOOK_WA-CONNID.
SELECT SINGLE NAME INTO NAME1 FROM SAIRPORT
WHERE ID = AP1.
SELECT SINGLE NAME INTO NAME2 FROM SAIRPORT
WHERE ID = AP2.
ENDSELECT.

代码2:
SELECT * FROM SBOOK INTO SBOOK_WA UP TO 10 ROWS.
SUPPLY CARRID = SBOOK_WA-CARRID
CONNID = SBOOK_WA-CONNID
TO CONTEXT TRAV1.
DEMAND AIRPFROM = AP1
AIRPTO = AP2
NAME_FROM = NAME1
NAME_TO = NAME2
FROM CONTEXT TRAV1.
ENDSELECT.

最后是注意内存的使用,以下是内存优化方面的例子:
1, 虽然ABAP拥有垃圾处理的机制, 但是这个是在程序运行完成后实现的. 所以我们尽量把无用的变
量,内表,对象都释放掉;
2, 尽量减少无用的静态定义的变量,内表和对象, 因为静态定义的对象会在编译开始就占有内存空
间;
3, 尽量减少网络的传输负载, 比如在设计RFC远程调用传回的内表数据要尽量精简, 数据量越大,对
CPU和内存需求越多;
4, 内存使用紧张的情况下, 使用FREE语句, 以及SQL语句的PACKAGE SIZE n 选项.
SELECT vbeln erdat
FROM vbak
INTO TABLE li_vbak PACKAGE SIZE 50.

‘叁’ ABAP程序 激活 有什么用

没有激活而直接运行的程序当前修改无效。ABAP程序一般会保存一个副本,当你激活一个程序的时候当前程序就覆盖之前的副本成为最终副本,也就是说,如果你改了一个程序但没有激活,那么你运行的时候其实是运行你修改之前的程序,你此次的修改还没有发现效果,直到你激活为止。ABAP程序的这个功能主要是确保程序运行和开发同时进行而不冲突。

‘肆’ ABAP程序间传递数据的几种方法

1、SAP内存 memory / abap memory
2、submit时,屏幕传参
3、自定义缓存类数据库。原理类似 memory

‘伍’ sap abap模块必须要有程序背景才能学吗,学出来待遇好吗

sap abap没有程序背景也能学,sap行业待遇普遍都挺高。

ABAP作为一种面向特定应用的第四代编程语言.最早在20世纪80年代开发。它原本是作为一种报表语言应用在SAP R/2上,这是一个帮助大型公司在大型机上建立原材料管理和财务会计管理商务应用的平台。SAP ABAP开发是一种高级企业应用编程语言,英文全称为AdvancedBusiness Application Programming,还可以实现和其他编程语言的合成,如VB,JAVA,C/C++等。51sap

虽然SAP最早于1992年就发布了R/3,但ABAP仍可以用于为R/3系统编写程序。在20世纪90年代,随着计算机硬件的发展,越来越多的SAP的应用软件和系统都用ABAP来实现。一直到2001年,几乎所有的基本功能都是由ABAP编程实现的。在1999年,SAP在发布R/3 4.6版的同时也发布了一个对ABAP的面向对象扩展,叫做ABAP Objects。

SAP最新的开发平台NetWeaver同时支持ABAP和Java。

关于sapabap的运行环境

所有的ABAP程序都驻留在SAP数据库里。他们不像Java或者C++程序那样存储在一个单独的外部文件里,在数据库里所有的ABAP代码都以两种形式存在:可以用ABAP workbench查看和编辑的源代码和由ABAP运行环境载入和解释的“编译”代码(技术上更精确地说是“产生”代码)。当一段ABAP源代码第一次被调用时会隐含的进行代码产生。如果稍后源代码改变了或者程序访问的对象改变了(比如数据库的表添加了新的字段),产生代码就会自动重新产生。51sap

ABAP程序在运行时系统(SAP核心的一部分)的控制下运行在SAP应用服务器里。运行时系统负责处理ABAP语句,控制显示的逻辑序列和响应事件(比如,用户按一下屏幕上的一个按钮)。ABAP运行时系统的一个关键组件是数据库接口,它把ABAP的数据库无关语句(“开放SQL”)变成底层数据库管理系统可以理解的语句(“本地SQL”)。数据库接口处理ABAP程序和关系数据库之间所有的通信;它也有一些其他的作用,比如把经常访问的数据缓存到应用服务器本地的存储器里。51sap

‘陆’ abap的主要工作原理是什么

解释型语言,但被SAP称为所谓的“第四代”语言。支持OOP。语言功能一般,运行速度较慢,并 且只能用于SAP平台。通过调用SAP的内核模块(C或C++写成的)来完成所请求的功能。 SAP大部分大部分业务逻辑都是用ABAP来表达的。也是SAP的二次开发工具。

‘柒’ abap 冒泡法

如果要由大到小排列则在比较时前一个数比后一个数小就进行对调,方法相反。

冒泡法的基本思想就是:在待排序的数据中,先找到最小(大)的数据将它放到最前面,再从第二个数据开始,找到第二小(大)的数据将它放到第二个位置,以此类推,直到只剩下最后一个数为止。这种排序方法在排序的过程中,是小的数就如气泡一样逐层上浮,而使大的数逐个下沉,于是就形象地取名为冒泡排序,又名起泡排序。

‘捌’ MS/SAP是什么,原理是什么!

它们都是中大型企业的企业运营和管理信息系统,具有国际化应用支持,个性化自定义配置的友好操作界面、系统模块间的无缝集成。SAP 就是资深的ERP产品代表,它一度成为ERP的代名词。MS、SAP这两套在当今ERP市场上叱垞风云。
系统架构

SAP R/3是三层结构(在3.1以后的版本中,通过增加Internet/Intranet层,R/3的结构将变成多级结构)产品清楚地分为表达服务,应用服务和数据库服务。SAP R/3以一种实用的方式支持全部Gartner Group Client/Server模式的5层结构。
SAP开发了ABAP/4工作台(ABAP/4 Development Workbench)作为实施client/server方案的完整的CASE环境和工作流工具包,加速并从一定程度上使实施过程自动化,保证了连续有效的业务再造,这已由R/3应用程序的成功开发史所证明。ABAP/4工作台集成数据,业务过程,组织结构和工作流部件,并基于一个主动地与应用连接的集成的库上,包括了动态对话程序编辑(Dynamic Program),屏幕和菜单绘制,原代码生成器,交互式纠错,性能优化,计算机辅助测试(CATT),ABAP/4仓库,数据字典,开发组织等。
R/3支持主流的数据库软件,如Informix,Oracle,ADABASD,DB2和MS SQL Server.
R/3系统可运行于所有主流的UNIX系统,同时也支持Windows NT(Microsoft)和OS/400(IBM)操作系统。
Oracle数据库下,用户可以通过SAPGUI进行联机监控,能够获取多项重要数据,如Oracle的Data Buffer,Shared Pool,Redo Log Buffer,Calls,Table Scans/Table Fetch,Sorts等。此外,用户还能观察I/O请求,V$值等。
SAP R/3系统对数据的传送(message)和分发复制(replication)在各个层次上都提供了可靠的保证。R/3系统使用TCP/IP协议作为主要的网络通信协议。TCP/IP协议不但是事实上的工业标准,而且其内置的差错检测和纠正机制提供了可靠的网络传输。在前端客户程序和后台应用服务器之间传送的数据都经过加密(Encryption)和压码校验(Authentication)处理,防止消息内容被篡改。
SAP充分考虑到客户实施ERP项目时要求的多样性及实施过程的复杂性,按照软件工程的观点,提供了先进的软件开发环境(ASDE)和实用的项目管理、实施工具。SAPR/3系统中的变更(changes)分为以下五类:定制(customizing)、功能强化(Enhancement)、客户的应用程序开发(customer development) 、对SAP提供的标准应用程序的修改(modification)
MS AX现在是标准的三层结构,应用服务器处理商业逻辑层的一切事务,客户端则是标准的Windows程序,AOS(Axapta object server)集群技术可以很有效的进行负载均衡和灾难恢复。

同时利用微软的Share Point的技术,AX也是支持完全的多层架构和WEB访问,可以通过多种媒体进行访问。
MS AX的开发平台叫MorphX,是一个完全智能化的开发平台,可以完成通过鼠标的拖拽完成绝大多的窗体和报表的开发。如果需要进一步开发,就有需要AX的开发语言X++,X++是一个完全面向对象的、高效的商业软件开发语言,有着完整的编译器和调试器,可以快速开发所有的商业代码。而且尤其重要的是现有的AX的所有功能也是X++开发出来的,完全公开代码,用户可以查看和编辑所有的代码.
MS AX同时支持的主流数据库有Oracle和MS SQL Server,保护最新的Oracle 10G和MS SQL Server 2005。同时利用2005的最新的很多特性。

由于是微软的产品,AX目前支持Windows操作系统。

AX中队数据库管理和支持是比较丰富,可以及时管理数据库连接,支持数据库的所有DDL操作,可以图形化管理数据库德表、字段和Index等.

‘玖’ ABAP 中 open sql与 native sql的流程区别是什么

open sql 是静态的,所有的取数必须在编译前确认,二native sql是动态的,只有到runtime时才能知道他们想做什么,其实原理就是拼SQL

阅读全文

与abap编译器原理相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:337
攻城掠地怎么查看服务器 浏览:601