其他分享
首页 > 其他分享> > PA教材提纲 TAW10-2

PA教材提纲 TAW10-2

作者:互联网

Unit1 Introduction to the ABAP Dictionary(ABAP字典介绍)

1.1 Describing the ABAP Dictionary(描述ABAP字典)

ABAP Dictionary基本功能:

 

ABAP Dictionary基本数据类型(types):

( Any complex user-defined type can be built from these basic types )

 

ABAP Dictionary services support program development程序开发服务:

 

ABAP Dictionary与runtime程序的关系:

Unit2 Data Types in the ABAP Dictionary(ABAP字典的数据类型)

2.1 Creating Domains and Data Elements(创建域和数据元素)

基本类型(重点是Domain部分):

 

Data elements知识点:

2.2 Creating Flat Structures(创建扁平式结构)

Structure components types结构元素可以有的类型:

 

Flat structure: a list of fields typed with data elements, one-dimensional

Nested structure: include another structured object

Deep structure: 元素中有表结构

 

注意: 有一类特殊结构叫做RANGES,标准RANGES命名规则为<fieldname>_ran,故可用*_ran在SE11中搜索。

2.3 Creating Table Types and Deep Structures(创建表类型和深度结构)

定义表结构需要以下参数(事务代码SE11):

 

几种常见的表类型:

2.4 Creating Type Groups(创建类型组)

Type group的可用于定义:

(新版本系统推荐使用OO技术,即constant class-attribute定义global constants)

 

Type group命名规则:

 

常用事务代码:

Unit3 Database Tables(数据库表)

3.1 Creating Transparent Tables(创建透明表)

表的组成:

 

Basic objects for defining data in ABAP Dictionary:

 

两种不改原表增加字段的方法:

 

合理选择indexes、tables ( data class, size category )可以有效减少内存碎片( defragmentation )

主要的Data Class包括:

 

Size Category:有0~9等选项,每个选项有固定的extend size

 

Log Data Changes:

 

Write Access Only with Java:只能用Java修改表数据,用ABAP可能出错

Technical Settings: DB-Specific Properties:配置数据库属性,如行存储、列存储等

3.2 Defining Cluster Tables and Pools Tables(定义簇表和池表)

查看簇表和池表对应的数据库表的方法:Utilities->Runtime Object

 

名词概念:

(注意: 簇表数据有关联functionally dependent,池表数据无关联not dependent)

 

簇表的字段组成:

 

池表的组成:

 

注意:

 

簇表和池表的优缺点:

Unit4 Performance During Table Access(读表性能)

4.1 Creating Database Table Indexes(创建数据表索引)

Index: can be considered to be a copy of a database table reduced to certain fields(Index就是一个索引表).

 

创建index的注意事项:

 

The database optimizer decides which index on the table should be use by the database to access data records.

 

Each database table has one primary index and an arbitrary(任意) number of secondary indexes and extension indexes:

 

Index命名规则:

 

创建Index的知识点:

4.2 Setting Up Table Buffering(设置表缓存)

The table access performance is improved by a factor of 10 to 100.

 

When you enter /$TAB in the command field, the system resets the table buffers on the corresponding application server.(注意:只有存在inconsistencies问题时执行该操作,因为该操作可能消耗数个小时。)

 

Buffering Types缓存类型:

 

配置缓存的途径:

 

Buffer Synchronization缓存同步:

 

Advantages and Disadvantages of Table Buffering表缓存的优缺点:

Summary结论:

 

Decision Tree for Buffering设置缓存的决策策略:

是否接受临时数据不一致、是否以读数为主?

(1) 是: 可以缓存——是否预期表尺寸小于32KB?

(1.1) 是: Full buffering

(1.2) 否: 是否以SELECT SINGLE访问为主?

(1.2.1) 是: Single record buffering

(1.2.2) 否: 是否预期表尺寸大于1MB(1000条数据)?

(1.2.2.1) 是: 需要根据经验选择secondary index或buffering,以及full buffering还是generic buffering

(1.2.2.2) 否: 是否访问时常用从左到右的键值?

(1.2.2.2.1) 是: Generic buffering

(1.2.2.2.2) 否: Full buffering

(2) 否: 不可缓存

Unit5 Input Checks(输入检查)

5.1 Creating Fixed Values(创建固定值范围)

固定值的概念:

 

用域的fixed values和字段的foreign keys,我们可以在不额外编码的情况下实现屏幕字段检查。( Validation of screen fields does not occur until a foreign key is defined or fixed values are provided in the domain definition. )

 

域用data type和field length描述字段取值范围。( A domain describes the value range of a field by specifying its data type and field length. )若取值范围为一组值,则可使用fixed values。

5.2 Defining Foreign Keys to Perform Input Checks(定义外键以实现输入检查)

外键的概念:

 

一些重要的名词和概念:

 

ABAP Dictionary中设置外键时需要注意的细节:

 

Cardinality基数:设置外键时需要设置基数,ABAP Dictionary中的基数不是强限制,但会影响view的生成

 

Types of Foreign Key Fields外键类型:

补充:

5.3 Creating Text Tables(创建文本表)

知识点:

 

创建文本表的步骤:

Unit6 Dictionary Object Dependencies(字典对象依赖关系)

6.1 Differentiating Between Active and Inactive Dictionary Objects(区分激活的与非激活的字典对象)

Basic Difference激活与非激活的基本区别:

 

用户可执行activation操作,此时将做一致性检查,如果没有问题,Inactive version将取代原来的Active version变成新的激活版本。一致性检查的意思是,待激活对象依赖的其它对象均可以被激活(即不存在错误)。对于耗时长的激活,可以选择Activating Objects in the background选项。

 

Mass Activation批量激活:允许同步( simultaneously )激活大量字典对象,且自动调整其激活顺序

 

激活操作如果成功将自动创建runtime object,如果失败将生成activation log(提供错误信息)。如果我们想显示或检查字典对象的runtime object,可以选择Utilities->Runtime Object。Runtime objects会被缓存,以便于快速访问。

 

Runtime Objects information:

(注意:runtime objects本质上是data elements, table types, views, structures, tables等,所以可以直接用来作为types使用。)

6.2 Identifying Dependencies with ABAP Dictionary Objects(确认ABAP字典对象的依赖关系)

Dependent objects: objects that use another object either directly or indirectly.

 

当我们激活一个对象时,这个对象的dependent objects会被找到并也被激活。

 

Where-used list: 我们可以通过该表找到所有跟当前对象有关的其它对象(访问路径为Utilities->Where-used list)。

 

Repository Information System: The Repository Information System ABAP Dictionary is part of the general Repository Information System. The where-used list for Repository objects can be called from the information system.(Information System可用于查看仓库对象,并可以调用where-used list。)

Unit7 Table Changes(表的修改)

7.1 Performing a Table Conversion(执行表的转化)

Runtime objects、透明表和底层数据库表的关系:

 

查找runtime objects和database objects的方法:

 

当我们修改透明表时,可能通过以下途径改变数据库表:

 

系统如何判定选择哪种途径改变数据库表:

(归根结底考虑三个问题:有没有数据存在、哪些数据库系统在用、有没有结构性变化。)

 

下面以TAB表为例讲解表转化的过程:

(1) 首先锁表,且与该表有关的视图变成非激活状态(如果转化过程中报错,则该锁不能自动解除)

(2) TAB表重命名为QCMTAB表(即TAB表名前加QCM),并删除TAB表的secondary index(如果以前已经存在QCMTAB表,旧QCMTAB表会被删除)

(3) 创建QCM8TAB表,系统中将存在两个表QCMTAB表和QCM8TAB表

(3.1) QCMTAB表沿用原TAB的结构,且存放有原表数据

(3.2) QCM8TAB表与新TAB结构相同,且不含数据

(3.3) 如果转化过程中原表数据丢失,可以进入QCM开头的表中找回原数据

(4) 通过MOVE-CORRESPONDING语句将QCMTAB的数据复制到QCM8TAB

(4.1) 如果字段长度有缩小,此时会出现信息丢失

(4.2) 必须保证足够的复制空间,另外rollback segment需要至少16MB空间

(4.3) 如果键值被减弱了,则只会有一条符合条件的数据被复制过来(这种状况建议清空表数据)

(5) 复制完成后,如果有键值减弱的操作,则QCMTAB会被保留,否则QCMTAB会被删除

(6) QCM8TAB表重命名为TAB表,重新建立TAB表的secondary index,并激活有关的视图

(7) 解锁并删除restart log(如果转化过程中报错,则锁会保留,且生成reset log,里面记录着每步操作的状态)

(8) 如果有报错,必须清除引起错误的原因并执行完转化过程

 

常见转化错误与解决方法:

 

解决转化错误常用工具:

7.2 Enhancing Tables Using Append Structures(通过Append结构增强表)

Append Structures概念:

 

Append Structure的使用限制:

 

ABAP Dictionary can be enhanced by the customer in the following ways:

增强可能导致的错误:

 

在ABAP Dictionary菜单Extras->Enhancement category。我们可以查看对应表格的可增强属性,通常有以下几种:

Level

Category

Meaning

1

Not classified

The structure does not have an enhancement category

2

Not enhanceable

The structure cannot be enhanced

3

Enhanceable and character-like

All structure components and their enhancements must be character-like

4

Enhanceable and character-like or numerical

The structure and its enhancement cannot contain any deep data types

5

Freely extendable

The structure and its enhancements may contain components whose data type is optional

(主表内部includes和substructures的可增强属性Level不能超过主表。)

 

注意:

Character-like types: C, D, N, T

Numerical types: F, I, P

Hexadecimal types: X

Deep types: STRING, XSTRING

Unit8 Views and Maintenance Views(视图和维护视图)

8.1 Creating Database Views(创建数据库视图)

Views的定义: application-specific views of data in multiple tables.

  1. Several tables can be combined in a meaningful way using a view ( join )
  2. Hide information that is not important ( projection )
  3. Display only those data records that satisfy certain conditions ( selection )

 

构造视图的过程

  1. Cross: 首先把要JOIN的表做叉乘运算
  2. Join Condition: 然后通过ON运算筛选JOIN的数据
  3. Field Selection: 然后做PROJECTION运算,去掉不要的列
  4. Selection Condition: 然后通过WHERE运算,筛取符合条件的数据

(注意:我们可用ABAP Dictionary做JOIN运算,也可在代码中用OPEN SQL做JOIN运算,但是后者速度比较慢。)

 

三种视图使用的JOIN:

 

Database view知识点:

8.2 Creating Maintenance Views(创建维护视图)

基础概念:

 

创建维护视图的途径:

 

使用SE11创建维护视图时的注意事项:

 

在字段维护界面,有一列为maintenance attributes(字段名为P):

 

创建维护视图( Maintenance View )的步骤:

  1. Copy Tables复制主表
    1. 指定主表
    2. 指定主表的主键
    3. 指定需要的外键,并通过relationships按钮(见基础概念部分)加入OUTER JOIN的其它表
    4. 指定其它表的外键,并通过relationships按钮加入更外围的表
  2. Copy the View Fields维护视图字段
  3. Selection Conditions筛选条件
    1.  
      1. 直接使用筛选条件
      2. 通过SE54创建表维护视图并创建变式( maintenance view variants )
  4. Maintenance Status维护状态
    1.  
      1. 设置该页签的属性,可以控制如何通过事务代码SM30访问维护视图界面
  5. Activate激活

 

创建表维护生成器( Maintenance Dialog )的步骤:

(维护生成器除了维护视图,还会有maintenance modules和maintenance interfaces)

  1. 创建维护视图
    1. 在ABAP Dictionary (SE11)->Utilities->Table Maintenance Generator
    2. 或在SAP Easy Access menu,选择Tools->ABAP Workbench->Development->Other Tools->Generate Table Maintenance Dialog
    3. 或直接使用事务代码SE54
  2. 通过Maintain Table Views(事务代码SM30)访问
    1.  
      1. 输入table或view名称
      2. 选择Generated Objects
      3. 选择Create/Change按钮

 

定义表维护生成器( Maintenance Dialog )的关键参数:

8.3 Creating View Cluster(创建视图簇)

为何要用视图簇(视图簇由多个维护视图组成):

 

视图簇的优点:

 

视图簇由多个维护视图组成。( A view cluster consists of one or more maintenance views. )

Unit9 Search Help(搜索帮助)

9.1 Creating Search Helps(创建搜索帮助)

创建Search Help需要哪些要素:

(注意: Search Help可以没有IMPORT参数,但是必须有EXPORT参数。)

 

Elementary Search Helps基本搜索帮助需要定义如下参数:

 

搜索帮助与视图的关系:

 

搜索帮助增强选项:

 

三种典型的search help:

(注意:Search Help维护界面右键选择技术信息,可以查看其类型。)

 

访问不同类型search help的优先级:

  1. Input help from screen(屏幕上的search help)
    1. PROCESS ON VALUE-REQUEST(F4函数)
    2. Search help for screen field(屏幕定义,MATCH CODE)
    3. Check of the flow logic(代码逻辑,FIELDCAT-REF_TABLE、FIELDCAT-REF_FIELD)
  2. Search help for field(本表字段的search help)
  3. Check table help(外部检查表的search help)
    1.  
      1. Search help for check tables(检查表有search help)
      2. Check table with text tables(检查表有文本表)
      3. Key values of check table(检查表有主键)
  4. Search help for data element(数据元素定义)
    1.  
      1. Search help in data element(数据元素有search help)
      2. Fixed values(数据元素的domain有固定值)
      3. Clock or calendar help(时间或日历帮助)

 

常用的F4函数:

 

帮助视图(Help Views)的知识点:

 

输入帮助( input help )类型:

(注意:在Help->Settings里,用户可以选择显示的模式。)

9.2 Applying Advanced Search Help Techniques(提供升级版的搜索帮助技术)

Collective and Elementary Search Helps(集中搜索帮助或基本搜索帮助)

 

用附加搜索帮助(append search help)增强集中搜索帮助(collective search help)的方法:

(1) 打开一个collective search help,选择Goto->Append search helps

(2) 输入append search help的名称和描述

(3) 选择页签Included Search Helps

(4) 选择Parameter Assignment,选择需要的字段

(5) 如果希望隐藏某些字段,请选中该字段的Hidden checkbox

(6) 激活append search help

(注意:append search help本身也是特殊的collective search help。利用append search help可以在不修改标准search help的情况下,隐藏不需要的elementary search help)

 

搜索帮助出口函数:

在定义搜索帮助的界面,有一个选项叫"搜索帮助出口",可参考函数F4IF_SHLP_EXIT_EXAMPLE,该函数允许用户在Search Help的输入、输出等阶段进行逻辑判断,如权限判断等。(F4UT开头的函数模块可用于实现搜索帮助出口)

 

利用Append Search Help可以在不修改标准Collective Search Help的情况下,隐藏不需要的Elementary Search Help。

Unit10 Selection Screens(选择屏幕)

10.1 Implementing a Selection Screen(实现一个选择屏)

Selection Screen定义: serve as an interface between the program and the user.

 

常用关键字:

(更多细节请参考第三方资料。)

 

选择屏幕文本编辑路径:Goto->Text Elements->Selection Texts

 

SELECT-OPTIONS部分参数的含义:

Field

Value

Meaning

SIGN

I

Include

E

Exclude

OPTION

EQ

Equal

NE

Not Equal

LE

Less or Equal

LT

Less Than

GE

Greater or Equal

GT

Greater Than

BT

Between

NB

Not Between

CP

Contains Pattern

NP

Does Not Contain Pattern

 

10.2 Implementing Multiple Selection Screens(实施多个选择屏幕)

实施多个Selection Screen的知识点:

 

实施多个Subscreen的知识点:

(可参考本人整理的在普通屏幕嵌入select-options的资料。)

 

实施多个Tabstrips的知识点:

(请参考教材TAW10-2 310页代码。)

10.3 Implementing Input Checks and Creating Variants(实现输入检查与创建变式)

输入检查事件:

 

变式(可配合SE93事务代码配置控制界面显示与输入):

(变式配合事务代码运行的方法请参考第三方资料。)

Unit11 Introduction to Screen Programming(屏幕编程介绍)

11.1 Explaining the User Dialog Programming Model(解释用户对话框程序模块)

Single-Screen Transaction(单屏幕程序):

(注意: 该类型程序通常有多个INCLUDE文件)

 

单屏幕程序界面分为四个区:

 

ABAP Program Types(两大类六小类ABAP程序类型):

 

头文件(Include programs)命名规则:

(当程序结构比较复杂时,最好将不同部分分别装入不同的头文件,以便于进行管理。)

11.2 Introducing Screen Programming(屏幕编程入门)

屏幕元素分类:

(在线查看屏幕元素属性的方法http://help.sap.com/nw75,Function-Oriented View ( choose language )->Application->Application Server ABAP->Application Development on AS ABAP->ABAP Workbench - Classic->ABAP Workbench Tools->Screen Painter->Maintaining Attributes for Screen Elements)

 

屏幕属性:

(在线查看屏幕属性的方法http://help.sap.com/nw75,Function-Oriented View ( Choose language )->Application->Application Server ABAP->Application Development on AS ABAP->ABAP Workbench - Classic->ABAP Workbench Tools->Screen Painter->Creating a Screen->Maintaining Screen Attributes)

 

关于OK_CODE属性:

在所有屏幕创建时(不含子屏幕),都有一个叫OK(或确定)的元素。我们可以给元素起名(如OK_CODE),。然后在程序中用同名变量获取屏幕上输入的指令。而sy-ucomm获取的不仅仅是屏幕上输入的指令。

11.3 Creating Screens and Screen Elements(创建屏幕与屏幕元素)

创建屏幕的步骤:

 

两种processors( in one program ):

11.4 Modifying Screens at Runtime(运行时修改屏幕)

在PBO模块中,程序会将屏幕属性读到一个行类型为SCREEN的内表中,该内表常见属性有:

 

运行时修改屏幕的代码(在PBO中):

LOOP AT SCREEN.

IF screen-group1 = 'SEL'.

screen-input = 1.

ENDIF.

 

IF screen-name = 'FIELD1'.

screen-active = 0.

ENDIF.

 

MODIFY SCREEN.

ENDLOOP.

(注意: LOOP AT SCREEN命令不能跟随WHERE条件)

11.5 Designing Screen Sequence(设计屏幕顺序)

几种控制屏幕顺序的方法:

11.6 Calling a Dialog Box Dynamically(动态调用对话框屏幕)

调用屏幕代码示例:

CALL SCREEN <nnnn> STARTING AT left_col upper_row ENDING AT right_col lower_row.

注意:

Unit12 The Program Interface(程序接口)

12.1 Explaining User Interfaces(解释用户接口)

User Interface用户接口:

  1. Menu bar: 菜单栏(含子菜单),其中System和Help菜单所有屏幕都有且不能修改或隐藏
    1. 包含Menu list,其中System和Help菜单自动出现在所有程序中
    2. 最多只有15个栏目(entries),3个层级
    3. 如果要静态菜单文本,则直接赋值(如Menu1),如果要动态菜单文本,则应给右键出字段名(此时生成的字段名称格式有尖括号围住,如<GV_MENUNAME>),然后在代码中定义同名字段(类型为SMP_DYNTXT或DYNTEXT_DEF)进行PBO赋值(详情可参考第三方资料)
    4. 通过Edit->Insert->Include menu可以将当前菜单包含进其它程序的status中
  2. Standard toolbar: 标准工具栏,所有屏幕都相同,不可用的按钮会灰掉
  3. Application toolbar: 应用工具栏,含常用按钮
  1.  
    1. 最多只有35个按钮
    2. 如果想控制未激活的按钮是否显示,需进入Goto->Attributes->Pushbutton assignment
    1. Function key settings: 快捷键
  2.  
    1. 包含Key assignments和Application toolbars
    2. 设置Application toolbars的方式为Menu Painter->Goto->Interface objects; Function key settings-><name>->Pushbutton settings; User interface->Subobject->Create
    3. function list会列出所有的menus和key assignments

 

PF-STATUS的按钮均含有Function Type属性,该属性决定了按钮用途:

(在线查看function信息的方法http://help.sap.com/nw75,Function-Oriented View ( Choose your language )->Application Server ( on left panel )->Application Server ABAP->Application Development on AS ABAP->ABAP Workbench-Classic->ABAP Workbench Tools->Menu Painter->Basic Concepts->Functions)

(查看开关switches信息的方法ABAP Keyword documentation->ABAP-Release-Specific Changes->Changes for Release 7.0->Switch Framework for Release 7.0)

 

注意: 我们能看到的function key有三种:

1. Reserved Function Keys

2. Recommended Function Keys

3. Freely Assigned Function Keys

12.2 Setting a GUI Title and a GUI Status(设置GUI标题和状态)

动态创建GUI标题方法示例:

 

快捷键设置key settings

 

OK_CODE属性(前面章节有介绍):为了屏幕跳转时不要报错,我们应在跳转前使用CLEAR OK_CODE.清空指令。

 

注意: 我们可以用reference technique复制GUI Status,以复用menu bars、application toolbars、function key assignments。

Unit13 Simple Screen Elements(简单屏幕元素)

13.1 Creating Screen Elements for Output(创建输出用的屏幕元素)

13.2 Creating Input/output Fields(创建输入/输出字段)

基本概念:

 

Input fields输入检查:

 

我们可以通过系统表SCREEN修改input/output field的灰掉的属性。

不同类型的input/output field使用的属性不同,比如数据类型为CHAR时,Leading zeros属性就失效了。

 

创建input/output fields的方式:

(自定义输入/输出字段,用DATA关键字定义同名变量进行赋值。从DDIC导入的输入/输出字段,则需要用TABLES关键字声明同名表再进行赋值。)

 

Dropdown boxes下拉菜单:禁止用户输入值,只能在列表中选值。创建方式如下:

13.3 Defining Checkboxes and Radio Button Groups(定义复选框和单选框)

单选框和复选框的共同属性:

 

创建复选框:

 

创建单选框(和组):

(也可右键创建分组,而设置group1的值并不能给控件分组)

13.4 Creating Pushbuttons(创建按钮)

Pushbuttons: are input fields for the command field OC_CODE.(当我们按下按钮,PAI事件就通过OK_CODE调用对应的函数)

 

Pushbuttons常用属性:

 

创建Pushbuttons的方法:

Unit14 Screen Error Handling(屏幕错误处理)

14.1 Handling Errors Using Dialog Messages and Field Input Checks(通过对话框消息和字段输入检查处理错误)

通过SET和GET读写input/output fields(请参考TAW10-1 15.2章内存部分):

 

定义SET和GET参数的方法:

 

对话框消息共有6种:

Category

Text

Description

A

Termination

The processing terminates, and the user must restart the transaction.

X

Exit

The processing terminates with short dump MESSAGE_TYPE_X, and the user must restart the transaction.

E

Error

The processing interrupts, and the user must correct the entry.

W

Warning

The processing interrupts, and the user may correct the entries.

I

Information

The processing interrupts, but the user can continue by confirming the message choosing Enter

S

Success

Information displays on the status bar of the output screen.

 

Input Checks输入检查:在PAI运行前,系统会自动进行输入检查:

  1. Mandatory fields check必输字段检查:首先执行,检查必输项是否都填写
  2. Field format check格式检查:检查值类型是否与输入字段类型匹配
  3. Foreign key check外键检查:若输入字段对应的ABAP Dictionary字段有检查表,则进行外键检查
  4. Fixed values固定值检查:如果轮到固定值检查,则help function激活并列出下拉菜单

 

Field Input Checks with Error Dialog单一字段输入检查:

(1) Flow logic:

PROCESS AFTER INPUT.

FIELD <field_name> MODULE check_input.

(2) ABAP program:

MODULE check_input INPUT.

... MESSAGE E ... .

ENDMODULE.

注意:

 

Check on Groups of Fields组合字段输入检查代码:

(1) Flow logic:

PROCESS AFTER INPUT.

CHAIN.

FIELD: <f1>, <f2>, ...<fn>.

MODULE check_input.

ENDCHAIN.

(2) ABAP program:

MODULE check_input INPUT.

.... MESSAGE E ... .

ENDMODULE.

注意:

 

一个输入检查控制的例子:

(1) Flow logic:

PROCESS AFTER INPUT.

FIELD A MODULE check_A.

FIELD B MODULE check_B.

CHAIN.

FIELD: C, D.

MODULE check_CD.

ENDCHAIN.

CHAIN.

FIELD: C, B.

MODULE check_CB.

ENDCHAIN.

(2) ABAP program:

MODULE check_CB.

... MESSAGE E ... .

ENDMODULE.

上面的代码,如果在输入B、C字段时出错,则会进行如下操作:

  1. 跳过PBO,回到输入界面,此时其它字段不可编辑,B、C字段可重新输入
  2. 如果B字段被更改,则从FIELD B MODULE check_B.开始执行;如果C字段被更改,则从FIELD: C, D.开始执行。总之就是从第一个申明的行开始执行。

 

这是因为输入检查控制遵循以下规则:

  1. If the application sends an error or warning message, the current screen is displayed back to the user, but the PBO module is not processed again.
  2. Only the fields to which the module is assigned are ready for input again.
  3. After the user enters new values, the PAI module is not completely reprocessed. It is restarted somewhere within the processing block.
  4. The system identifies the field that the user has changed and resumes processing at the first corresponding FIELD statement.
  5. If the user confirms a warning message without changing the content of the field, the system restarts the PAI processing after the MESSAGE statement where the error was triggered.

 

其它跟FIELD关键字有关的知识点:

 

只在非初始值时进行输入检查的方法:

(1) 单字段写法:

PROCESS AFTER INPUT.

FIELD <field_name> MODULE <module> ON INPUT.

(2) 组合字段写法:

PROCESS AFTER INPUT.

CHAIN.

FIELD: <f1>, <f2>, ...<fn>.

MODULE <module> ON CHAIN-INPUT.

 

只在修改操作时进行输入检查的方法:

(1) 单字段写法:

PROCESS AFTER INPUT.

FIELD <field_name> MODULE <module> ON REQUEST

(2) 组合字段写法:

PROCESS AFTER INPUT.

CHAIN.

FIELD: <f1>, <f2>, ...<fn>.

MODULE <module> ON CHAIN-REQUEST.

 

避免输入检查的方法:

(1) Flow logic:

PROCESS AFTER INPUT.

MODULE exit AT EXIT-COMMAND.

 

因为退出型模块比所有模块都先执行,也先于自动输入检查执行,所以我们可以把返回和退出功能放在这种模块里。这样我们如果直接退出,就不会进行输入检查了。

 

如果我们未退出,那么还是会按顺序执行后面的模块,包括先进行的自动输入检查。

(2) ABAP program:

MODULE exit INPUT.

CASE ok_code.

WHEN 'CANCEL'.

CLEAR ok_code.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

LEAVE PROGRAM.

ENDCASE.

ENDMODULE.

 

开关控制( Switch-Depending )的模块调用方法:

(1) Flow logic:

PROCESS AFTER INPUT.

MODULE add_check SWITCH sw_nnn.

 

只有开关存在且处于ON状态时才执行该模块。开关不存在或者OFF都不执行该模块。

开关对应的屏幕字段不能用FIELD关键字申明。

(2) ABAP program:

MODULE add_check INPUT.

CASE ok_code.

WHEN 'ADD_FUNCTION'.

...

ENDCASE.

ENDMODULE.

 

14.2 Handling Errors Using Navigation and Input Help(用导航和输入帮助处理错误)

Navigation Functions导航函数:

 

BACK/Change Session

Exit

Cancel

Saves dialog

Yes

Yes

No

Check entries

Yes

Yes

No

Sequence

Check, then save dialog

Save dialog, then check

-

Function type

''

'E'

'E'

Example

Save data?

Save data?

Unsaved data will be lost, Cancel?

Function module for dialog

popup_to_comfirm

popup_to_comfirm

popup_to_comfirm

 

用户输入标识: SY-DATAR,当用户有输入时为X,否则为空,可用于在退出前进行检测,以避免丢失数据。

Change Session: 上表中的Change Session即Change/Display切换,需要注意的是,如果没有保存修改后的数据就切换成Display,则系统会显示保存前的数据。

Input Help: 即系统标准功能F4帮助,可以通过Field旁边的按钮或F4打开并列出所有参考输入值。通常input help跟语义层有关,所以在ABAP Dictionary中定义。

 

注意: 在Single-Screen Transaction中,BACK和EXIT会退出当前程序并进入主调程序calling program,但CANCEL会再次显示界面并清空输入字段with initialized data fields。

Unit15 Subscreens(子屏幕)

15.1 Creating Subscreens(创建子屏幕)

子屏幕概念:A subscreen area is reserved rectangular area on a screen in which you place another screen at runtime.

 

根据概念可知,子屏幕具有以下特点:

 

子屏幕主要用途:

 

以下场景可能用到子屏幕:

 

子屏幕常用属性:

 

使用子屏幕的限制:

 

在Screen Painter拖入Subscreen Area即可创建屏幕区域,且必须在Flow logic的PBO和PAI模块写代码进行调用:

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN <subarea> INCLUDING <program_name><dynpro_number>.

 

PROCESS AFTER INPUT.

CALL SUBSCREEN <subarea>.

 

 

有时为了动态选择屏幕号,PBO代码会写成:

CALL SUBSCREEN sub INCLUDING sy-cprog dynnr.

为了在ABAP Program中动态控制dynnr,我们需要在TOP头文件中定义同名变量:

DATA: dynnr TYPE sy-dynnr,

ok_code TYPE sy-ucomm.

 

如何通过函数组实现可重复调用的子屏幕:

  1. 在SE80创建Function Group并在其中创建屏幕
  2. 同一个函数组的对象可以共享全局变量,故子屏幕的全局变量需要被定义在函数组头文件中,以供其它Functions使用,这些Functions将用来对子屏幕进行读值和写值
  3. 主程序跟要调用的子屏幕不在同一个函数组,故不能直接通过全局变量读写子屏幕中的值,这时就需要第2步写的读值和写值functions来帮助主程序进行读值和写值

 

主程序利用函数组调用子屏幕的示例代码如下:

  1. Flow logic:

PROCESS BEFORE OUTPUT.

MODULE status_<nnnn>.

MODULE export_data.

CALL SUBSCREEN sub1 INCLUDING 'SAPL…''0100'.

 

PROCESS AFTER INPUT.

CALL SUBSCREEN sub1.

MODULE import_data.

MODULE user_command.

 

注意: 若想显示时子屏幕有值,则子屏幕读值函数得在PBO中调用子屏幕之前;若想把主屏幕的值写入子屏幕,则子屏幕的写值函数应在PAI中调用子屏幕之后。为了让主程序能响应子屏幕的输入,则user_command应该在最后。

  1. ABAP Program:

MODULE export_data OUTPUT.

CALL FUNCTION 'F1'

EXPORTING

p1_f1 = … .

ENDMODULE.

 

MODULE import_data INPUT.

CALL FUNCTION 'F2'

IMPORTING

p1_f1 = … .

ENDMODULE.

 

Unit16 Tabstrip Controls(页签控制)

16.1 Creating Tabstrip Controls(创建页签控制)

页签适用场景:

 

页签不可使用的场景:

 

页签的组成:

 

创建页签的方法:

  1. Define the tab area定义页签控制区域( tabstrip control area ):
    1. Choose tabstrip control from the object list in the Screen Painter, and place it on the screen.
    2. Assign a name to the tabstrip control in the Object name attribute.
    3. In the TOP include of your ABAP program, declare like this – CONTROLS: my_tab_strip TYPE TABSTRIP.(注意: TABSTRIP是定义在CXTAB类型池中的结构,其字段可控制页签,比如ACTIVETAB字段可以指定展示的页)
  2. Define the tab titles and, if necessary, add further tab titles定义页标题
    1.  
    2.  
      1. 页标题相当于一个pushbutton
      2. 设定的属性包括Name、Text、Function code、Function type(空值类型,则按下页时触发PAI;P类型,用户可在页间滑动而不触发PAI)
      3. 如果想增加页的数量,可以拖动Pushbutton按钮到你的页标题区域(tab title area )
  3. Assign a subscreen area to each page element分配子屏幕
    1.  
    2.  
    3.  
      1. 页签中间的位置,可以放置子屏幕区域
      2. 在页标题中,有一个属性叫做reference field,其值为子屏幕区域ID,通过这个参数,我们可以让不同的页共享子屏幕,也可以让它们分别使用自己的子屏幕
      3. 如果我们在点中某个页之后再将子屏幕区域拖入,系统将自动为其命名并与页标题进行关联

16.2 Programming Tabstrip Controls(编程控制页签)

各页拥有自己子屏幕区域的情况:

  1. Flow logic:

PROCESS BEFORE OUTPUT.

CALL SUBSCREEN subarea1 INCLUDING sy-cprog '0101'.

CALL SUBSCREEN subarea1 INCLUDING sy-cprog '0102'.

CALL SUBSCREEN subarea1 INCLUDING sy-cprog '0103'.

 

PROCESS AFTER INPUT.

CALL SUBSCREEN subarea1.

CALL SUBSCREEN subarea2.

CALL SUBSCREEN subarea3.

  1. ABAP:

CONTROLS: my_tab_strip TYPE TABSTRIP.

 

 

各页共享子屏幕区域的情况:

  1. Flow logic:

PROCESS BEFORE OUTPUT.

MODULE fill_dynnr.

CALL SUBSCREEN subarea INCLUDING sy-cprog dynnr.

 

PROCESS AFTER INPUT.

CALL SUBSCREEN subarea.

MODULE user_command.

  1. ABAP:

CONTROLS: my_tab_strip TYPE TABSTRIP.

DATA: ok_code LIKE sy-ucomm,

dynnr LIKE sy-dynnr.

 

MODULE fill_dynnr OUTPUT.

CASE my_tab_strip-activetab.

WHEN 'FC1'.

dynnr = '0101'.

WHEN 'FC2'.

dynnr = '0102'.

WHEN 'FC3'.

dynnr = '0103'.

WHEN OTHERS.

dynnr = '0101'.

my_tab_strip-activetab = 'FC1'.

ENDCASE.

ENDMODULE.

 

MODULE user_command INPUT.

CASE ok_code.

WHEN 'FC1' OR 'FC2' OR 'FC3'.

my_tab_strip-activetab = ok_code.

ENDCASE.

ENDMODULE.

 

 

用户若不愿手工创建页签,可以借助Tabstrip Control Wizard自动创建页签。

标签:提纲,TAW10,SCREEN,ABAP,PA,key,table,屏幕,data
来源: https://www.cnblogs.com/Intercalaryland/p/10522537.html