| |
| |
Foreword | |
| |
| |
Acknowledgments | |
| |
| |
| |
Introduction | |
| |
| |
| |
What Are Programming Guidelines | |
| |
| |
| |
Why Programming Guidelines | |
| |
| |
| |
Which Guidelines Are Involved Here | |
| |
| |
| |
Target Audience | |
| |
| |
| |
How to Use This Book | |
| |
| |
| |
General Basic Rules | |
| |
| |
| |
Separation of Concerns | |
| |
| |
| |
KISS Principle | |
| |
| |
| |
Correctness and Quality | |
| |
| |
| |
ABAP-Specific Basic Rules | |
| |
| |
| |
ABAP Objects as a Programming Model | |
| |
| |
| |
Program Type and Program Attributes | |
| |
| |
| |
Program Type | |
| |
| |
| |
Program Attributes | |
| |
| |
| |
Original Language | |
| |
| |
| |
Modern ABAP | |
| |
| |
| |
Checks for Correctness | |
| |
| |
| |
Syntax Check | |
| |
| |
| |
Extended Program Check | |
| |
| |
| |
Code Inspector | |
| |
| |
| |
ABAP Test Cockpit | |
| |
| |
| |
Structure and Style | |
| |
| |
| |
Source Code Formatting | |
| |
| |
| |
Case Sensitivity | |
| |
| |
| |
Statements per Program Line | |
| |
| |
| |
Using the Pretty Printer | |
| |
| |
| |
Line Width | |
| |
| |
| |
Naming | |
| |
| |
| |
Selecting the Language | |
| |
| |
| |
Descriptive Names | |
| |
| |
| |
Names of Repository Objects | |
| |
| |
| |
Program-Internal Names | |
| |
| |
| |
Comments | |
| |
| |
| |
Selecting the Language | |
| |
| |
| |
Content | |
| |
| |
| |
Arrangement in the Source Code | |
| |
| |
| |
Program and Procedure Structure | |
| |
| |
| |
Global Declarations of a Program | |
| |
| |
| |
Local Declarations | |
| |
| |
| |
Source Code Organization | |
| |
| |
| |
Source Code Modularization | |
| |
| |
| |
Multiple Use of Include Programs | |
| |
| |
| |
Alternative Notations | |
| |
| |
| |
Alternative Language Constructs in Statements | |
| |
| |
| |
Chained Statements | |
| |
| |
| |
Method Calls | |
| |
| |
| |
Assignments and Calculations | |
| |
| |
| |
Calculation Expressions | |
| |
| |
| |
Complexity | |
| |
| |
| |
Expressions | |
| |
| |
| |
Nesting Depth | |
| |
| |
| |
Procedure Volume | |
| |
| |
| |
Class Size | |
| |
| |
| |
Dead Code | |
| |
| |
| |
Architecture | |
| |
| |
| |
Object-Oriented Programming | |
| |
| |
| |
Encapsulation | |
| |
| |
| |
Modularization | |
| |
| |
| |
Static Classes and Singletons | |
| |
| |
| |
Inheritance | |
| |
| |
| |
Class References and Interface References | |
| |
| |
| |
Local Types for Global Classes | |
| |
| |
| |
Instance Constructor | |
| |
| |
| |
Error Handling | |
| |
| |
| |
Reaction to Error Situations | |
| |
| |
| |
Classical and Class-Based Exceptions | |
| |
| |
| |
Exception Categories | |
| |
| |
| |
Exception Texts | |
| |
| |
| |
Using Exception Classes | |
| |
| |
| |
Handling and Propagating Exceptions | |
| |
| |
| |
Cleanup After Exceptions | |
| |
| |
| |
Catchable Runtime Errors | |
| |
| |
| |
Assertions | |
| |
| |
| |
Messages | |
| |
| |
| |
User Interfaces | |
| |
| |
| |
Selecting the User Interface Technology | |
| |
| |
| |
Encapsulating Classical User Interfaces | |
| |
| |
| |
Lists | |
| |
| |
| |
Accessibility | |
| |
| |
| |
Data Storage | |
| |
| |
| |
Persistent Data Storage | |
| |
| |
| |
Database Accesses | |
| |
| |
| |
Client Handling | |
| |
| |
| |
Using the Shared Memory | |
| |
| |
| |
Secure and Robust ABAP | |
| |
| |
| |
Data Types and Data Objects | |
| |
| |
| |
Bound and Standalone Data Types | |
| |
| |
| |
Declaration of Data Types and Constants | |
| |
| |
| |
Declaration of Variables | |
| |
| |
| |
Including Structures | |
| |
| |
| |
Using Types | |
| |
| |
| |
Referring to Data Types or Data Objects | |
| |
| |
| |
Table Work Areas | |
| |
| |
| |
Literals | |
| |
| |
| |
Strings | |
| |
| |
| |
Start Values | |
| |
| |
| |
Data Objects for Truth Values | |
| |
| |
| |
Assignments, Calculations, and Other Accesses to Data | |
| |
| |
| |
Assignments Between Different Types | |
| |
| |
| |
Avoiding Invalid Values | |
| |
| |
| |
Using Conversion Rules | |
| |
| |
| |
Specification of Numbers | |
| |
| |
| |
Selecting the Numeric Type | |
| |
| |
| |
Rounding Errors | |
| |
| |
| |
Division by Zero | |
| |
| |
| |
Casting | |
| |
| |
| |
Runtime Errors When Accessing Data Objects | |
| |
| |
| |
Anonymous Containers | |
| |
| |
| |
Passing Global Data by Reference | |
| |
| |
| |
System Fields | |
| |
| |
| |
Access | |
| |
| |
| |
Obsolete and Internal System Fields | |
| |
| |
| |
Evaluation | |
| |
| |
| |
Return Value | |
| |
| |
| |
Using System Fields as Actual Parameters | |
| |
| |
| |
Using System Fields on the User Interface | |
| |
| |
| |
Using System Fields in Operand Positions | |
| |
| |
| |
Internal Tables | |
| |
| |
| |
Selecting the Table Category | |
| |
| |
| |
Secondary Keys | |
| |
| |
| |
Initial Memory Allocation | |
| |
| |
| |
Sorted Filling | |
| |
| |
| |
Aggregated Filling | |
| |
| |
| |
Output Behavior | |
| |
| |
| |
Loop Processing | |
| |
| |
| |
Modularization Units | |
| |
| |
| |
Function Modules and Subroutines | |
| |
| |
| |
Type of the Formal Parameters of Procedures | |
| |
| |
| |
Transfer Type of Formal Parameters | |
| |
| |
| |
Passing Output Parameters by Reference | |
| |
| |
| |
Typing of Formal Parameters | |
| |
| |
| |
Internal and External Procedure Calls | |
| |
| |
| |
Exiting Procedures | |
| |
| |
| |
Dialog Modules and Event Blocks | |
| |
| |
| |
Macros | |
| |
| |
| |
Dynamic Programming Techniques | |
| |
| |
| |
Using Dynamic Programming Techniques | |
| |
| |
| |
Runtime Errors During Dynamic Processing | |
| |
| |
| |
Using Dynamic Data Objects | |
| |
| |
| |
Memory Consumption of Dynamic Memory Objects | |
| |
| |
| |
Administration Costs of Dynamic Memory Objects | |
| |
| |
| |
Accessing Data Objects Dynamically | |
| |
| |
| |
Generic Programming | |
| |
| |
| |
Internationalization | |
| |
| |
| |
Storing System Texts | |
| |
| |
| |
Translation-Friendly Message Texts | |
| |
| |
| |
Text Environment | |
| |
| |
| |
Character Set of Source Code | |
| |
| |
| |
Splitting Texts | |
| |
| |
| |
Codepages for Files | |
| |
| |
| |
Obsolete Language Constructs | |
| |
| |
| |
Procedures | |
| |
| |
Subroutines | |
| |
| |
| |
Table Parameters | |
| |
| |
| |
Typing of Formal Parameters | |
| |
| |
| |
Declarations | |
| |
| |
| |
Declaring Type Groups | |
| |
| |
| |
Interface Work Areas | |
| |
| |
| |
Table Work Areas | |
| |
| |
| |
Referring to Data Types | |
| |
| |
| |
Declaring Field Symbols | |
| |
| |
| |
Typing Field Symbols | |
| |
| |
| |
Header Lines of Internal Tables | |
| |
| |
| |
Declaring Internal Tables | |
| |
| |
| |
Ranges Tables | |
| |
| |
| |
Addressing Data Objects | |
| |
| |
| |
Loading Classes and Interfaces | |
| |
| |
| |
Object Generation | |
| |
| |
| |
Anonymous Data Objects | |
| |
| |
| |
Calls and Exits | |
| |
| |
| |
Dialog Modules | |
| |
| |
| |
Function Module Exit | |
| |
| |
| |
External Subroutine Call | |
| |
| |
| |
Exiting Programs | |
| |
| |
| |
Exception Handling | |
| |
| |
| |
Program Flow Control | |
| |
| |
| |
Relational Operators | |
| |
| |
| |
Case Distinction | |
| |
| |
| |
Checking the Binding to Actual Parameters | |
| |
| |
| |
Checking Changes of Data Objects | |
| |
| |
| |
Loops for Memory Content | |
| |
| |
| |
Assignments | |
| |
| |
| |
Subfield Access | |
| |
| |
| |
Converting Packed Numbers | |
| |
| |
| |
Initialization | |
| |
| |
| |
Temporary Storage of Data Objects | |
| |
| |
| |
Casting | |
| |
| |
| |
Dynamic Assignment to a Field Symbol | |
| |
| |
| |
Calculation Statements | |
| |
| |
| |
Component-Based Calculations | |
| |
| |
| |
Calculations with Memory Content | |
| |
| |
| |
Processing Character and Byte Strings | |
| |
| |
| |
Searching in Character and Byte Strings | |
| |
| |
| |
Replacements in Character and Byte Strings | |
| |
| |
| |
Creating the Nine's Complement | |
| |
| |
| |
Translating Characters and Numbers | |
| |
| |
| |
Text Editor | |
| |
| |
| |
Internal Tables | |
| |
| |
| |
Processing Statements | |
| |
| |
| |
Key Specifications | |
| |
| |
| |
Deleting a Table | |
| |
| |
| |
Formatted Assignment | |
| |
| |
HR Infotypes | |
| |
| |
| |
Dynpro Flow Logic | |
| |
| |
| |
Comparing Values | |
| |
| |
| |
Accessing Databases | |
| |
| |
| |
Extending Subscreens | |
| |
| |
| |
Step Loops | |
| |
| |
| |
Classical List Processing | |
| |
| |
| |
Formatting | |
| |
| |
| |
List Event | |
| |
| |
| |
Print Parameters | |
| |
| |
| |
Spool Request | |
| |
| |
| |
Extreme Values and Calculations | |
| |
| |
| |
Data Storage | |
| |
| |
| |
Open SQL | |
| |
| |
| |
Native SQL | |
| |
| |
| |
Data Cluster | |
| |
| |
| |
Data Clusters in the ABAP Memory | |
| |
| |
| |
Data Clusters in the Database | |
| |
| |
| |
Work Area for Data Clusters | |
| |
| |
| |
Obsolete Database Accesses | |
| |
| |
| |
Contexts | |
| |
| |
| |
External Interfaces | |
| |
| |
| |
XML Connection | |
| |
| |
| |
CPI-C Interface | |
| |
| |
| |
JavaScript Connection | |
| |
| |
| |
Automatic Check of Naming Conventions | |
| |
| |
| |
Naming Conventions in the Code Inspector | |
| |
| |
| |
Type-Specific Prefix Components | |
| |
| |
| |
Prefixes for Procedure-Local Declarations | |
| |
| |
| |
Structured Programming | |
| |
| |
| |
Object-Oriented Programming | |
| |
| |
| |
Assessment of the Naming Conventions | |
| |
| |
| |
Table of Rules | |
| |
| |
| |
Recommended Reading | |
| |
| |
| |
The Authors | |
| |
| |
Index | |