ABAP Scan rules
Contrast Scan supports these rules for ABAP.
Severity | Contrast rule | Engine rule ID | Description |
---|---|---|---|
Medium | Access B Din Loop | OPT.ABAP.AMR.AccessBDinLoop | AccessBDinLoop: Avoid massive database operations inside a loop |
High | Alter Layout Dinamically | OPT.ABAP.AWD.AlterLayoutDinamically | AlterLayoutDinamically: WebDynpro Layout should be modified only in wdDoModifyView method |
High | Assign I D Element | OPT.ABAP.AWD.AssignIDElement | AssignIDElement: Attributes for Web Dynpro elements must be unique |
Info | Authority Checks | OPT.ABAP.SEC.AuthorityChecks | AuthorityChecks: Authority checks (informative) |
Medium | Avoid Batch Input | OPT.ABAP.AMR.AvoidBatchInput | AvoidBatchInput: Do not call transactions using batch input |
Medium | Avoid Call No Def Module | OPT.ABAP.APBR.AvoidCallNoDefModule | AvoidCallNoDefModule: Avoid call modules that have not been declared |
High | Avoid Client Specified | OPT.ABAP.ASR.AvoidClientSpecified | AvoidClientSpecified: Avoid CLIENT SPECIFIED option |
Low | Avoid Commented Out Code | OPT.ABAP.MAINT.AvoidCommentedOutCode | AvoidCommentedOutCode: Avoid commented out code blocks |
Medium | Avoid Complex Context | OPT.ABAP.AWD.AvoidComplexContext | AvoidComplexContext: Too deeply nested nodes in Web Dynpro context |
Medium | Avoid Controller With Code | OPT.ABAP.AWD.AvoidControllerWithCode | AvoidControllerWithCode: Too much code in Web Dynpro view |
High | Avoid Database Hints | OPT.ABAP.PORTABILITY.AvoidDatabaseHints | AvoidDatabaseHints: Avoid %_HINTS in SELECT |
Medium | Avoid Declare Vars In Mod | OPT.ABAP.AGR.AvoidDeclareVarsInMod | AvoidDeclareVarsInMod: Avoid declarations inside a dialog module |
Medium | Avoid Duplicate Events | OPT.ABAP.AGR.AvoidDuplicateEvents | AvoidDuplicateEvents: Avoid duplicate declarations for same event block |
Info | Avoid Duplicate Includes In Programs | OPT.ABAP.APFR.AvoidDuplicateIncludesInPrograms | AvoidDuplicateIncludesInPrograms: Avoid same INCLUDE in different programs |
Low | Avoid Elementi I U Tree | OPT.ABAP.AWD.AvoidElementiIUTree | AvoidElementiIUTree: In Web Dynpro, do not use the Tree UI element |
Low | Avoid Empty Blocks In Loop Or If | OPT.ABAP.MAINT.AvoidEmptyBlocksInLoopOrIf | AvoidEmptyBlocksInLoopOrIf: Avoid using loops and conditional statements with empty blocks |
Medium | Avoid Empty Catch Blocks | OPT.ABAP.APBR.AvoidEmptyCatchBlocks | AvoidEmptyCatchBlocks: Avoid use empty CATCH blocks |
Low | Avoid Empty Subroutine Or Function | OPT.ABAP.MAINT.AvoidEmptySubroutineOrFunction | AvoidEmptySubroutineOrFunction: Avoid using functions or subroutines with empty blocks |
Medium | Avoid Empty When Others | OPT.ABAP.APBR.AvoidEmptyWhenOthers | AvoidEmptyWhenOthers: If used, WHEN OTHERS clause should not be empty |
Low | Avoid Form Param Without Type | OPT.ABAP.AGR.AvoidFormParamWithoutType | AvoidFormParamWithoutType: Avoid subroutines with untyped or too generic type parameters |
Critical | Avoid Free Memory | OPT.ABAP.AGR.AvoidFreeMemory | AvoidFreeMemory: Avoid using FREE MEMORY without explicit data cluster |
Low | Avoid From Dynamic | OPT.ABAP.ASR.AvoidFromDynamic | AvoidFromDynamic: Avoid subqueries in FROM clauses |
Medium | Avoid Literal Wit Add | OPT.ABAP.AGR.AvoidLiteralWitAdd | AvoidLiteralWitAdd: In the sentece Add is better use variables instead of literal |
Low | Avoid Logic DB | OPT.ABAP.ASR.AvoidLogicDB | AvoidLogicDB: Do not to use logical databases |
High | Avoid Macro | OPT.ABAP.AGR.AvoidMacro | AvoidMacro: Do not define custom macros |
Low | Avoid Modify Context | OPT.ABAP.AWD.AvoidModifyContext | AvoidModifyContext: Avoid programmatic modification of a Web Dynpro context |
Low | Avoid Modify Elements Directly | OPT.ABAP.AWD.AvoidModifyElementsDirectly | AvoidModifyElementsDirectly: Do not modify programmatically the layout for Web Dynpro context nodes |
Low | Avoid Module Messed Up | OPT.ABAP.APBR.AvoidModuleMessedUp | AvoidModuleMessedUp: Avoid call a module from a program |
Low | Avoid Multiple Dynamic Attributes | OPT.ABAP.AWD.AvoidMultipleDynamicAttributes | AvoidMultipleDynamicAttributes: Avoid assigning multiple attributes dynamically in a WebDynpro element |
Low | Avoid Nested Layout | OPT.ABAP.AWD.AvoidNestedLayout | AvoidNestedLayout: To avoid to nest layouts |
Low | Avoid Non Transp Table | OPT.ABAP.AGR.AvoidNonTranspTable | AvoidNonTranspTable: Do not create tables that are not transparent |
Medium | Avoid Non Used Declared Module | OPT.ABAP.AMR.AvoidNonUsedDeclaredModule | AvoidNonUsedDeclaredModule: Avoid declaring dialog modules that are not used |
Info | Avoid No Standard Page Heading | OPT.ABAP.ADR.AvoidNoStandardPageHeading | AvoidNoStandardPageHeading: The standard SAP report header should not be disabled (NO STANDARD PAGE HEADING) |
Medium | Avoid No Use Fields | OPT.ABAP.AGR.AvoidNoUseFields | AvoidNoUseFields: Avoid declare fields on internal tables that are not used |
High | Avoid Percentage Var | OPT.ABAP.AMR.AvoidPercentage_Var | AvoidPercentage_Var: Avoid identifier names starting with %_ |
Medium | Avoid Pool And Include | OPT.ABAP.AWD.AvoidPoolAndInclude | AvoidPoolAndInclude: Do not use TYPE-POOL and INCLUDE TYPE/STRUCTURE |
High | Avoid Read S A P Tables | OPT.ABAP.ASR.AvoidReadSAPTables | AvoidReadSAPTables: READ TABLE on database table |
Medium | Avoid S A P Queries | OPT.ABAP.ASR.AvoidSAPQueries | AvoidSAPQueries: Do not call SAP Query |
Medium | Avoid Sap Script | OPT.ABAP.AGR.AvoidSapScript | AvoidSapScript: Avoid SAP Script |
High | Avoid SQL Exist Subqueries | OPT.ABAP.EFFICIENCY.AvoidSqlExistSubqueries | AvoidSqlExistSubqueries: Avoid using the EXISTS clause |
Medium | Avoid Stop Messed Up | OPT.ABAP.APBR.AvoidStopMessedUp | AvoidStopMessedUp: Avoid STOP statement out of the event blocks START-OF-SELECTION, GET or AT SELECTION-SCREEN |
High | Avoid Stretched Vertically | OPT.ABAP.AWD.AvoidStretchedVertically | AvoidStretchedVertically: Do not set StretchedVertically in MatrixLayout |
Medium | Avoid Sub Select Queries | OPT.ABAP.APFR.AvoidSubSelectQueries | AvoidSubSelectQueries: Avoid subqueries in WHERE |
High | Avoid Trace On | OPT.ABAP.APFR.AvoidTraceOn | AvoidTraceOn: Avoid use sentences that activate the trace generator |
Critical | Avoid Up To Rows With For All Entries | OPT.ABAP.EFFICIENCY.AvoidUpToRowsWithForAllEntries | AvoidUpToRowsWithForAllEntries: Avoid using UP TO ROWS clause in combination with FOR ALL ENTRIES in SELECT statements |
Info | Avoid Vble Message | OPT.ABAP.ADR.AvoidVbleMessage | AvoidVbleMessage: Do not use variables as parameters for messages |
Low | Avoid Where Dynamic | OPT.ABAP.ASR.AvoidWhereDynamic | AvoidWhereDynamic: Avoid subqueries in WHERE |
Info | Avoid Write To | OPT.ABAP.AGR.AvoidWriteTo | AvoidWriteTo: Replace WRITE TO sentence with MOVE TO |
Critical | Backdoors | OPT.ABAP.SEC.Backdoors | Backdoors: Avoid development/test backdoors in production code |
High | Bad Authorization Check | OPT.ABAP.SEC.BadAuthorizationCheck | BadAuthorizationCheck: Improper implementation of authorization check |
High | Call Editor Call | OPT.ABAP.AGR.CallEditorCall | CallEditorCall: Avoid EDITOR-CALL |
Medium | Call F M In Group | OPT.ABAP.AGR.CallFMInGroup | CallFMInGroup: Unused function |
Info | Calls2 Critical Functions | OPT.ABAP.SEC.Calls2CriticalFunctions | Calls2CriticalFunctions: Calls to Critical ABAP functions |
Critical | Call Sys Function | OPT.ABAP.AGR.CallSysFunction | CallSysFunction: Do not call system / kernel functions from ABAP application code |
Low | Call S Y S U B R C | OPT.ABAP.APBR.CallSYSUBRC | CallSYSUBRC: Check the value of SY-SUBRC after certain operations |
High | Call Tx | OPT.ABAP.AGR.CallTx | CallTx: Avoid called transactions corresponding to a certain module |
Medium | Case No Repeat When | OPT.ABAP.AGR.CaseNoRepeatWhen | CaseNoRepeatWhen: Avoid repeat WHEN conditions in a CASE sentence |
Low | Case Should Have At Least3 When | OPT.ABAP.MAINT.CaseShouldHaveAtLeast3When | CaseShouldHaveAtLeast3When: A CASE statement should have at least 3 WHEN clauses |
Low | Check Atr No Exist Dynpro | OPT.ABAP.APBR.CheckAtrNoExistDynpro | CheckAtrNoExistDynpro: Avoid checking attributes of a non-existing dynpro |
Medium | Check Auth In All Programs | OPT.ABAP.SEC.CheckAuthInAllPrograms | CheckAuthInAllPrograms: Any report must perform an authority check |
High | Check Authority | OPT.ABAP.APBR.CheckAuthority | CheckAuthority: Invalid authorization fields in AUTHORITY-CHECK |
High | Check Dlg Modules | OPT.ABAP.APBR.CheckDlgModules | CheckDlgModules: Avoid work with non-existing dynpros |
Medium | Check F Don't use masterpage filesaram | OPT.ABAP.APBR.CheckFMParam | CheckFMParam: Avoid use an incorrect category for a function module parameters |
High | Check Fn Module | OPT.ABAP.APBR.CheckFnModule | CheckFnModule: Avoid working with non-existing functions |
Low | Check Includes | OPT.ABAP.APBR.CheckIncludes | CheckIncludes: Avoid call files from include sentece that are not type I |
High | Check Load Table | OPT.ABAP.APBR.CheckLoadTable | CheckLoadTable: Load only existing tables in SAP system |
High | Check Messages | OPT.ABAP.APBR.CheckMessages | CheckMessages: Use only existing messages in the table T100 |
Info | Check Status P F | OPT.ABAP.AGR.CheckStatusPF | CheckStatusPF: Check if the program program personalizes the STATUS PF |
Medium | Check Submit With Param | OPT.ABAP.APBR.CheckSubmitWithParam | CheckSubmitWithParam: Avoid undeclared selection criteria in SUBMIT |
Info | Check Titlebar | OPT.ABAP.AGR.CheckTitlebar | CheckTitlebar: Check if the program program personalizes the TITLEBAR |
High | Check Tx | OPT.ABAP.APBR.CheckTx | CheckTx: Only use existing transactions |
High | Close All Open Resources | OPT.ABAP.APFR.CloseAllOpenResources | CloseAllOpenResources: Every open resource (cursor or dataset) should be closed |
Low | Cmd Table Out Loop | OPT.ABAP.ASR.CmdTableOutLoop | CmdTableOutLoop: Avoid to use commands of table with implicit use of index out of the LOOP |
Critical | Command Injection | OPT.ABAP.SEC.CommandInjection | CommandInjection: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') |
Low | Comments Before Classes | OPT.ABAP.MAINT.CommentsBeforeClasses | CommentsBeforeClasses: Check if there are comment lines before a class |
High | Comments Before Programs Or Reports | OPT.ABAP.ADR.CommentsBeforeProgramsOrReports | CommentsBeforeProgramsOrReports: Check if there are comment lines before programs and reports |
Low | Comments Before Subroutines | OPT.ABAP.ADR.CommentsBeforeSubroutines | CommentsBeforeSubroutines: Check if there are comment lines before functions, method, forms or macro |
Medium | Compatible Form Params | OPT.ABAP.APBR.CompatibleFormParams | CompatibleFormParams: With PERFORM, arguments should match subroutine formal parameters |
Medium | Complex Layout Use Matrix Layout | OPT.ABAP.AWD.ComplexLayoutUseMatrixLayout | ComplexLayoutUseMatrixLayout: Avoid too many elements in Web Dynpro views |
High | Control Fields Client Tables | OPT.ABAP.ASR.ControlFieldsClientTables | ControlFieldsClientTables: Include audit fields in custom tables |
Low | Correct Naming Meth | OPT.ABAP.ADR.CorrectNamingMeth | CorrectNamingMeth: Methods must follow a standard naming convention |
High | Correspond Raise Excep | OPT.ABAP.APBR.CorrespondRaiseExcep | CorrespondRaiseExcep: EXCEPTIONS and RAISE must match |
Critical | Cross Client Database Access | OPT.ABAP.SEC.CrossClientDatabaseAccess | CrossClientDatabaseAccess: Do not bypass SAP client separation mechanism |
Critical | Cross Site Scripting | OPT.ABAP.SEC.CrossSiteScripting | CrossSiteScripting: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting') |
High | Cx Root Caught | OPT.ABAP.RELIABILITY.CxRootCaught | CxRootCaught: Do not catch CX_ROOT |
High | Cyclomatic Complexity | OPT.ABAP.AMTR.CyclomaticComplexity | CyclomaticComplexity: Avoid functions/forms/methods....¬° with high cyclomatic complexity |
Info | Dangerous File Download | OPT.ABAP.SEC.DangerousFileDownload | DangerousFileDownload: Dangerous file download |
Info | Dangerous File Upload | OPT.ABAP.SEC.DangerousFileUpload | DangerousFileUpload: Dangerous file upload |
Low | Data Definition At The Beginning | OPT.ABAP.AMR.DataDefinitionAtTheBeginning | DataDefinitionAtTheBeginning: Do not insert declarations after the first executable line |
Medium | Deeply Nested Statements | OPT.ABAP.MAINT.DeeplyNestedStatements | DeeplyNestedStatements: Avoid too deeply nested statements |
High | Delete From Table Without Where | OPT.ABAP.RELIABILITY.DeleteFromTableWithoutWhere | DeleteFromTableWithoutWhere: DELETE FROM statement must have WHERE condition |
High | Deprecated Asyncronous R F C | OPT.ABAP.PORTABILITY.DeprecatedAsyncronousRFC | DeprecatedAsyncronousRFC: Use Background RFC instead of older Transactional or Queue RFC |
High | Direct Recursive Call | OPT.ABAP.RELIABILITY.DirectRecursiveCall | DirectRecursiveCall: Avoid recursive calls |
High | Direct Update | OPT.ABAP.SEC.DirectUpdate | DirectUpdate: SQL Bad Practices - Direct Update |
Critical | Dynamic Code | OPT.ABAP.SEC.DynamicCode | DynamicCode: Avoid Dynamic Code constructs |
High | Dynamic Constructs | OPT.ABAP.SEC.DynamicConstructs | DynamicConstructs: Avoid dynamic constructs controlled by external input |
Medium | Dynpro Non Exist Atr | OPT.ABAP.APBR.DynproNonExistAtr | DynproNonExistAtr: Avoid references to non-existing attributes for a dynpro screen element |
Low | Elseif With Else | OPT.ABAP.RELIABILITY.ElseifWithElse | ElseifWithElse: IF ... ELSEIF statements must be terminated with ELSE |
Critical | Empty Select Endselect | OPT.ABAP.EFFICIENCY.EmptySelectEndselect | EmptySelectEndselect: Avoid empty SELECT-ENDSELECT statements |
Critical | Enqueue Instead Of Select Single For Update | OPT.ABAP.ASR.EnqueueInsteadOfSelectSingleForUpdate | EnqueueInsteadOfSelectSingleForUpdate: Use SAP locking mechanism instead of SELECT SINGLE FOR UPDATE |
Low | Equal Number Param | OPT.ABAP.APBR.EqualNumberParam | EqualNumberParam: Avoid call a FORM with diferent number of parameters as declared |
Low | Excess Of Parameters | OPT.ABAP.AMTR.ExcessOfParameters | ExcessOfParameters: Avoid functions/forms/methods with an excess of parameters |
Low | Excess Of Responsibility | OPT.ABAP.AMTR.ExcessOfResponsibility | ExcessOfResponsibility: Avoid programs with excess of responsibility |
Low | Excess Of Return | OPT.ABAP.AMTR.ExcessOfReturn | ExcessOfReturn: Avoid an excess of RETURN statements |
Low | Exist Prog Form Decl | OPT.ABAP.APBR.ExistProgFormDecl | ExistProgFormDecl: Avoid declare FORMS in programs that do not exists in the analyzed system |
Medium | Exists Form | OPT.ABAP.AGR.ExistsForm | ExistsForm: Avoid call non-declared FORMS |
Medium | Extract Code Into Subroutines | OPT.ABAP.AMR.ExtractCodeIntoSubroutines | ExtractCodeIntoSubroutines: Organize big code sections in smaller ones |
Low | Fan In | OPT.ABAP.AMTR.FanIn | FanIn: Limit the number of calls to each routine in programs, reports and classes |
Medium | Fan Out | OPT.ABAP.AMTR.FanOut | FanOut: Limit number of calls (fan-out) from each processing block |
Info | Fields Curr Quan | OPT.ABAP.AGR.FieldsCurrQuan | FieldsCurrQuan: CURR and QUAN fields must have asociated unit fields |
Critical | First Stmt Return Select Endselect | OPT.ABAP.EFFICIENCY.FirstStmtReturnSelectEndselect | FirstStmtReturnSelectEndselect: Avoid using a RETURN statement as the first statement into a SELECT-ENDSELECT block |
High | Form Corresponds Perform | OPT.ABAP.AGR.FormCorrespondsPerform | FormCorrespondsPerform: Avoid declaring unused subroutines |
Low | Harcoded Text In Message | OPT.ABAP.MAINT.HarcodedTextInMessage | HarcodedTextInMessage: Avoid hardcoding text in message |
High | Hardcoded Client Check | OPT.ABAP.SEC.HardcodedClientCheck | HardcodedClientCheck: Hardcoded SAP client check (sy-mandt) |
Low | Hardcoded Date Check | OPT.ABAP.SEC.HardcodedDateCheck | HardcodedDateCheck: Avoid hardcoding into the code current server date checks (sy-datum) |
Medium | Hardcoded Host Check | OPT.ABAP.MAINT.HardcodedHostCheck | HardcodedHostCheck: Avoid hardcoding sy-host checks |
Low | Hardcoded OS Check | OPT.ABAP.MAINT.HardcodedOSCheck | HardcodedOSCheck: Avoid hardcoding sy-opsys checks |
Medium | Hardcoded Rfc Destination | OPT.ABAP.RELIABILITY.HardcodedRfcDestination | HardcodedRfcDestination: Avoid hardcoding the RFC destination parameter |
Low | Hardcoded Sensitive Data | OPT.ABAP.SEC.HardcodedSensitiveData | HardcodedSensitiveData: Avoid hardcoding sensitive information |
High | Hardcoded System Id Check | OPT.ABAP.SEC.HardcodedSystemIdCheck | HardcodedSystemIdCheck: Hardcoded System ID check (sy-sysid) |
High | Hardcoded Username Check | OPT.ABAP.SEC.HardcodedUsernameCheck | HardcodedUsernameCheck: Hard-coded user name in check (potential backdoor) |
Critical | Http Header Manipulation | OPT.ABAP.SEC.HttpHeaderManipulation | HttpHeaderManipulation: Unvalidated data in HTTP response header |
Medium | Implement Layout | OPT.ABAP.AWD.ImplementLayout | ImplementLayout: All Web Dynpro views must have a layout |
Low | Import Export Dynpro | OPT.ABAP.AMR.ImportExportDynpro | ImportExportDynpro: Avoid using import/export dynpro |
Critical | Import Export Nametab | OPT.ABAP.AGR.ImportExportNametab | ImportExportNametab: Avoid IMPORT / EXPORT NAMETAB |
High | Insecure Randomness | OPT.ABAP.SEC.InsecureRandomness | InsecureRandomness: Standard pseudo-random number generators cannot withstand cryptographic attacks |
High | Join Instead Of Select In Loop | OPT.ABAP.EFFICIENCY.JoinInsteadOfSelectInLoop | JoinInsteadOfSelectInLoop: Use join instead of select + loop + nested select |
High | Key Select Option | OPT.ABAP.AGR.KeySelectOption | KeySelectOption: SELECT-OPTIONS must always include key or indexed fields |
Info | Keywords For User Identifiers | OPT.ABAP.MAINT.KeywordsForUserIdentifiers | KeywordsForUserIdentifiers: ABAP keywords should not be used as identifiers |
Info | Limited Number Of Includes | OPT.ABAP.APFR.LimitedNumberOfIncludes | LimitedNumberOfIncludes: Too many included source files |
High | Limited Number Of Tables In Queries | OPT.ABAP.ASR.LimitedNumberOfTablesInQueries | LimitedNumberOfTablesInQueries: Try to limit the number of tables used in a SELECT query |
Medium | Limit Indexes | OPT.ABAP.ASR.LimitIndexes | LimitIndexes: Do not to create too many indexes in a table |
Medium | Logic Depending On Text Symbols | OPT.ABAP.RELIABILITY.LogicDependingOnTextSymbols | LogicDependingOnTextSymbols: Logic depending on text symbols |
Info | Loop At Into | OPT.ABAP.EFFICIENCY.LoopAtInto | LoopAtInto: Avoid LOOP AT itab INTO |
Low | Loop At Where Inside Loop | OPT.ABAP.APFR.LoopAtWhereInsideLoop | LoopAtWhereInsideLoop: Avoid using LOOP AT with WHERE inside another LOOP AT |
Info | Loop Where Instead Of Loop Check | OPT.ABAP.APFR.LoopWhereInsteadOfLoopCheck | LoopWhereInsteadOfLoopCheck: Use LOOP + WHERE instead of LOOP + CHECK |
High | Mark Buffering If Necessary | OPT.ABAP.ASR.MarkBufferingIfNecessary | MarkBufferingIfNecessary: Activate table buffering when needed |
Medium | Match Layout With View Controller | OPT.ABAP.AWD.MatchLayoutWithViewController | MatchLayoutWithViewController: Without associated layout, view controller code is stored in wdDoModifyView method |
Low | Maximum Joins Per Query | OPT.ABAP.APFR.MaximumJoinsPerQuery | MaximumJoinsPerQuery: Restrict the number of tables that can be used in a SELECT |
Low | Max Long Line Size | OPT.ABAP.APTR.MaxLongLineSize | MaxLongLineSize: Avoid width parameter LINE-SIZE greater than 255 |
Medium | Max Number DB Op | OPT.ABAP.APFR.MaxNumberDBOp | MaxNumberDBOp: Too many DB operations in a report or procedure |
Low | Max One Append Struct | OPT.ABAP.ASR.MaxOneAppendStruct | MaxOneAppendStruct: Table or standard structure with multiple append structures |
Low | Message Language | OPT.ABAP.ADR.MessageLanguage | MessageLanguage: The messages must be translated into the necessary languages |
Low | Message Param | OPT.ABAP.APBR.MessageParam | MessageParam: Check that messages have the correct number of parameters |
High | Modified Input Parameter | OPT.ABAP.RELIABILITY.ModifiedInputParameter | ModifiedInputParameter: Modification of input parameter passed by reference |
Info | Move Instead Of Move Corresponding | OPT.ABAP.AGR.MoveInsteadOfMoveCorresponding | MoveInsteadOfMoveCorresponding: Use MOVE instead of MOVE-CORRESPONDING |
High | Naming Components | OPT.ABAP.AWD.NamingComponents | NamingComponents: To control the nomenclature of the components |
Low | Naming Conventions | OPT.ABAP.ADR.NamingConventions | NamingConventions: Standard naming conventions should be followed |
Low | Nested Case Statement | OPT.ABAP.AMR.NestedCaseStatement | NestedCaseStatement: Avoid CASE sentences with many nested levels |
Low | Nested If Statement | OPT.ABAP.AMR.NestedIfStatement | NestedIfStatement: Try to limit nested IF |
Medium | Nested Loops | OPT.ABAP.AMR.NestedLoops | NestedLoops: Avoid using nested loops |
Medium | Nested Only Data Def | OPT.ABAP.AGR.NestedOnlyDataDef | NestedOnlyDataDef: Avoid declaring a redundant nested structure |
Critical | Nested Select Statement | OPT.ABAP.EFFICIENCY.NestedSelectStatement | NestedSelectStatement: Avoid nested SELECT statements |
Critical | No Absolute Paths | OPT.ABAP.APTR.NoAbsolutePaths | NoAbsolutePaths: There should not be an absolute path |
High | No Access Model From Mths | OPT.ABAP.AWD.NoAccessModelFromMths | NoAccessModelFromMths: No direct access to assistance classes from Web Dynpro view controller methods |
Medium | No Append Sorted By | OPT.ABAP.APFR.NoAppendSortedBy | NoAppendSortedBy: Do not use APPEND ... SORTED BY |
High | No Assert With Side Effects Condition | OPT.ABAP.RELIABILITY.NoAssertWithSideEffectsCondition | NoAssertWithSideEffectsCondition: Avoid configurable ASSERTs with side-effects |
Critical | No Authorization Check Call Transaction | OPT.ABAP.SEC.NoAuthorizationCheckCallTransaction | NoAuthorizationCheckCallTransaction: Authorization check must be done explicitely before CALL TRANSACTION |
Critical | No Authorization Check R F C | OPT.ABAP.SEC.NoAuthorizationCheckRFC | NoAuthorizationCheckRFC: Authorization check must be done explicitly in RFC-enabled functions |
High | No Authorization Check SQL | OPT.ABAP.SEC.NoAuthorizationCheckSQL | NoAuthorizationCheckSQL: Authorization check must be done explicitely on SQL statements |
High | No Authorization Group4 Table | OPT.ABAP.SEC.NoAuthorizationGroup4Table | NoAuthorizationGroup4Table: Table without authorization group |
Critical | No Break Point Statements | OPT.ABAP.APBR.NoBreakPointStatements | NoBreakPointStatements: Remove BREAK-POINT statements from production code |
Medium | No Check Or Continue Within Select Loops | OPT.ABAP.APFR.NoCheckOrContinueWithinSelectLoops | NoCheckOrContinueWithinSelectLoops: Do not use CHECK, EXIT or CONTINUE statements inside a SELECT loop |
High | No Control Break Within Loop At Where | OPT.ABAP.APBR.NoControlBreakWithinLoopAtWhere | NoControlBreakWithinLoopAtWhere: Do not use WHERE/FROM/TO in LOOP AT with control level processing blocks (AT FIRST, AT NEW, AT END, AT LAST) |
Low | No Corresponding Fields | OPT.ABAP.APFR.NoCorrespondingFields | NoCorrespondingFields: Do not use CORRESPONDING FIELDS in SELECT * |
Medium | No Data Definitions Within Events | OPT.ABAP.AGR.NoDataDefinitionsWithinEvents | NoDataDefinitionsWithinEvents: Avoid declarations inside an event block |
Medium | No Data Or Object Creation Inside Loops | OPT.ABAP.APFR.NoDataOrObjectCreationInsideLoops | NoDataOrObjectCreationInsideLoops: Avoid creating objects or declaring data inside a loop |
Low | No Dead Data Definitions | OPT.ABAP.AMR.NoDeadDataDefinitions | NoDeadDataDefinitions: In a program, all information defined is in use |
Info | No Declared Field | OPT.ABAP.ASR.NoDeclaredField | NoDeclaredField: Avoid referencing undeclared fields in internal tables or structures |
High | No Exec SQL Statements | OPT.ABAP.APTR.NoExecSqlStatements | NoExecSqlStatements: There should not be an EXEC SQL statements |
Info | No Exist Context | OPT.ABAP.APBR.NoExistContext | NoExistContext: Do not use fields from non declared tables or structures |
Medium | No Field As Operator | OPT.ABAP.ADR.NoFieldAsOperator | NoFieldAsOperator: Avoid using operators as field names |
Low | No Hyphen In Name | OPT.ABAP.AGR.NoHyphenInName | NoHyphenInName: Not use hyphens in the name of the internal table fields |
Medium | No Ids Other Type | OPT.ABAP.ADR.NoIdsOtherType | NoIdsOtherType: Field name is identical to a primitive type but it is declared as another type |
Info | No Literals | OPT.ABAP.AMR.NoLiterals | NoLiterals: Do not use literals in the code |
Low | No Long Ids | OPT.ABAP.ADR.NoLongIds | NoLongIds: Do not use large identifier names |
Info | No Lost Cursor | OPT.ABAP.ASR.NoLostCursor | NoLostCursor: Avoid in a loop SELECT to call to a sentence because of which the cursor gets lost |
High | No Over Write Sys Var | OPT.ABAP.AGR.NoOverWriteSysVar | NoOverWriteSysVar: Avoid overwrite system-variables |
Medium | No Raise Out Of Function Group | OPT.ABAP.APBR.NoRaiseOutOfFunctionGroup | NoRaiseOutOfFunctionGroup: RAISE exception statements inside improper processing block |
Medium | No Select All | OPT.ABAP.ASR.NoSelectAll | NoSelectAll: Avoid SELECT * in SQL queries |
High | No Select Inside Loop | OPT.ABAP.APFR.NoSelectInsideLoop | NoSelectInsideLoop: Avoid include SELECT sentences inside a loop |
Medium | No Sentence After Exit | OPT.ABAP.AGR.NoSentenceAfterExit | NoSentenceAfterExit: Avoid other senteces after STOP, LEAVE PROGRAM, EXIT, RETURN, RAISE, REJECT or SUBMIT |
High | Not In Subquery | OPT.ABAP.EFFICIENCY.NotInSubquery | NotInSubquery: Avoid NOT IN subquery in SELECT |
Critical | No Update Config Tables | OPT.ABAP.ASR.NoUpdateConfigTables | NoUpdateConfigTables: Avoid write operations on sensitive database tables from ABAP code |
High | No Use S Y Uname | OPT.ABAP.AGR.NoUseSYUname | NoUseSYUname: Avoid using system variable SY-UNAME inside a condition |
High | No Wildcards At The Beginning Of Like Literals | OPT.ABAP.APFR.NoWildcardsAtTheBeginningOfLikeLiterals | NoWildcardsAtTheBeginningOfLikeLiterals: Do not use wildcards (% or _) at the beginning of the literal used in LIKE comparisons in SQL statements |
Medium | Number View In W D | OPT.ABAP.AWD.NumberViewInWD | NumberViewInWD: Control the number of views |
Medium | Obsolete Code | OPT.ABAP.PORTABILITY.ObsoleteCode | ObsoleteCode: Obsolete code in SAP 7+ |
Info | One Statement Per Line | OPT.ABAP.AMR.OneStatementPerLine | OneStatementPerLine: Place each sentence in one line |
Low | Only Client Fields In Append Str | OPT.ABAP.ASR.OnlyClientFieldsInAppendStr | OnlyClientFieldsInAppendStr: Always use custom fields in Append structures |
High | Only One Commit And Rollback | OPT.ABAP.APFR.OnlyOneCommitAndRollback | OnlyOneCommitAndRollback: There should be only one COMMIT and ROLLBACK inside a programme |
Medium | Open Close Resources Only Once | OPT.ABAP.APFR.OpenCloseResourcesOnlyOnce | OpenCloseResourcesOnlyOnce: Every resource (cursor or dataset) should be opened and closed only once |
Critical | Open Redirect | OPT.ABAP.SEC.OpenRedirect | OpenRedirect: URL Redirection to Untrusted Site ('Open Redirect') |
Low | Output File Extension | OPT.ABAP.AGR.OutputFileExtension | OutputFileExtension: Output files must have appropiate extensions |
Medium | Output Files With Header | OPT.ABAP.AGR.OutputFilesWithHeader | OutputFilesWithHeader: Output datasets must have a header record |
High | Overwrite System Fields | OPT.ABAP.SEC.OverwriteSystemFields | OverwriteSystemFields: Inadequate usage of ABAP System field |
High | Password Management | OPT.ABAP.SEC.PasswordManagement | PasswordManagement: Avoid hard-coded or in-comment credentials (username / password) in code |
Critical | Path Manipulation | OPT.ABAP.SEC.PathManipulation | PathManipulation: External Control of File Name or Path |
Medium | Path Output File | OPT.ABAP.AMR.PathOutputFile | PathOutputFile: Output files must be stored in file system |
Medium | Percentage Of Comment Lines Per File | OPT.ABAP.ADR.PercentageOfCommentLinesPerFile | PercentageOfCommentLinesPerFile: Check the global amount of comment lines per file |
Medium | Percentage Of Comment Lines Per Method | OPT.ABAP.MAINT.PercentageOfCommentLinesPerMethod | PercentageOfCommentLinesPerMethod: Check the global amount of comment lines per method |
Medium | Recommendable Dynpro Size | OPT.ABAP.AWD.RecommendableDynproSize | RecommendableDynproSize: Use correct sizes in Web Dynpro fields |
Medium | Recommend A L Vwith Report | OPT.ABAP.AGR.RecommendALVwithReport | RecommendALVwithReport: Use ALV (Abap List Viewer) instead of classic list generation in reports |
Low | Recommend Case When Others | OPT.ABAP.AGR.RecommendCaseWhenOthers | RecommendCaseWhenOthers: WHEN OTHERS clause should appear in every CASE statement |
Info | Recommend Start Of Selection | OPT.ABAP.AGR.RecommendStartOfSelection | RecommendStartOfSelection: START-OF-SELECTION event handler should appear in every ABAP report |
High | Recommend Where With Indexes | OPT.ABAP.ASR.RecommendWhereWithIndexes | RecommendWhereWithIndexes: Use indexed columns in WHERE condition on large tables |
Critical | Regex Injection | OPT.ABAP.SEC.RegexInjection | RegexInjection: Prevent denial of service attack through malicious regular expression ('Regex Injection') |
Medium | Replace If With Case | OPT.ABAP.APFR.ReplaceIfWithCase | ReplaceIfWithCase: Replace IF ... ENDIF with CASE ... ENDCASE when possible |
High | Rfc Callback Attack | OPT.ABAP.SEC.RfcCallbackAttack | RfcCallbackAttack: RFC call without callback attack protection |
Critical | Rfc Destination Injection | OPT.ABAP.SEC.RfcDestinationInjection | RfcDestinationInjection: Destination injection in RFC call |
Medium | Security Select Tables | OPT.ABAP.ASR.SecuritySelectTables | SecuritySelectTables: Avoid queries on sensitive tables from ABAP code |
Low | Select Into Instead Of Select Appending | OPT.ABAP.APFR.SelectIntoInsteadOfSelectAppending | SelectIntoInsteadOfSelectAppending: Use SELECT + INTO instead of SELECT APPENDING |
Low | Select Into Table Instead Of Select End Select | OPT.ABAP.APFR.SelectIntoTableInsteadOfSelectEndSelect | SelectIntoTableInsteadOfSelectEndSelect: Do not use SELECT...ENDSELECT for loading an internal table |
Low | Set Get Sys Param | OPT.ABAP.APBR.SetGetSysParam | SetGetSysParam: Use existing parameters in the system |
High | Sort Before Removing Duplicates | OPT.ABAP.RELIABILITY.SortBeforeRemovingDuplicates | SortBeforeRemovingDuplicates: Sort internal tables before removing duplicates |
Low | Sort Instead Of Order By | OPT.ABAP.ASR.SortInsteadOfOrderBy | SortInsteadOfOrderBy: Use ABAP SORT instead of ORDER BY in SELECT |
Critical | Sort Stmt In A Loop | OPT.ABAP.EFFICIENCY.SortStmtInALoop | SortStmtInALoop: Avoid declaring SORT statements inside a LOOP |
Critical | SQL Injection | OPT.ABAP.SEC.SqlInjection | SqlInjection: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') |
Medium | Stand Comment Form | OPT.ABAP.ADR.StandCommentForm | StandCommentForm: In the FORM it is advisable to use the comments with standard format |
High | Submit Report | OPT.ABAP.AGR.SubmitReport | SubmitReport: Avoid too many SUBMIT calls in a report |
Low | Submit Report Type1 | OPT.ABAP.APBR.SubmitReportType1 | SubmitReportType1: Avoid call reports that are not type 1 |
Critical | Submit Stmt In A Loop | OPT.ABAP.EFFICIENCY.SubmitStmtInALoop | SubmitStmtInALoop: Avoid declaring SUBMIT statements inside a LOOP |
Low | Subroutine Definitions After Events | OPT.ABAP.AGR.SubroutineDefinitionsAfterEvents | SubroutineDefinitionsAfterEvents: Every subroutine should be declared after events |
Low | Suggest Append Lines Instead Of Append | OPT.ABAP.APFR.SuggestAppendLinesInsteadOfAppend | SuggestAppendLinesInsteadOfAppend: For efficiency, use APPEND LINES OF instead of APPEND |
Medium | Suggest Others Exceptions | OPT.ABAP.APBR.SuggestOthersExceptions | SuggestOthersExceptions: Call with no OTHERS option in EXCEPTIONS |
High | Suggest Select Where | OPT.ABAP.ASR.SuggestSelectWhere | SuggestSelectWhere: SELECT without WHERE |
Low | Suggest Typed Parameters | OPT.ABAP.AGR.SuggestTypedParameters | SuggestTypedParameters: Avoid procedures with untyped or too generic type parameters |
High | Suggest While Instead Of Do | OPT.ABAP.APFR.SuggestWhileInsteadOfDo | SuggestWhileInsteadOfDo: Use WHILE instead of unconditional DO loops |
Low | Too Many Attributes In A Class | OPT.ABAP.MAINT.TooManyAttributesInAClass | TooManyAttributesInAClass: Avoid declaring too many class attributes |
Low | Too Many Database Operations In Block | OPT.ABAP.MAINT.TooManyDatabaseOperationsInBlock | TooManyDatabaseOperationsInBlock: Avoid too many database operations in a behavioral unit |
Low | Too Many Lines By File | OPT.ABAP.MAINT.TooManyLinesByFile | TooManyLinesByFile: Avoid files with too many lines |
Medium | Too Nested Macro Calls | OPT.ABAP.MAINT.TooNestedMacroCalls | TooNestedMacroCalls: Avoid too nested macro calls |
High | Uncaught Exception In Rfc Call | OPT.ABAP.RELIABILITY.UncaughtExceptionInRfcCall | UncaughtExceptionInRfcCall: Uncaught exception in RFC call |
Medium | Unicode Programs | OPT.ABAP.ADR.UnicodePrograms | UnicodePrograms: The code must guard compatibility with UNICODE |
High | Update Dbtable Without Where | OPT.ABAP.RELIABILITY.UpdateDbtableWithoutWhere | UpdateDbtableWithoutWhere: UPDATE on database table without WHERE |
High | Update Delete Without Where | OPT.ABAP.EFFICIENCY.UpdateDeleteWithoutWhere | UpdateDeleteWithoutWhere: UPDATE / DELETE without WHERE |
Info | Usages Of Sy Sysid | OPT.ABAP.SEC.UsagesOfSySysid | UsagesOfSySysid: Usage of sy-sysid (informative) |
Info | Usages Of Sy Uname | OPT.ABAP.SEC.UsagesOfSyUname | UsagesOfSyUname: Usage of sy-uname (informative) |
Medium | Use Attributes Controller Class | OPT.ABAP.AWD.UseAttributesControllerClass | UseAttributesControllerClass: Web Dynpro controller classes must have the attributes WDTHIS and WDCONTEXT |
Medium | Use Class Based Exceptions | OPT.ABAP.MAINT.UseClassBasedExceptions | UseClassBasedExceptions: Use class-based exception handling |
High | Use For All Entries | OPT.ABAP.APFR.UseForAllEntries | UseForAllEntries: Ensure that internal table in FOR ALL ENTRIES clause is not empty |
Medium | Use Local Instead Of Tables In Subroutines | OPT.ABAP.AGR.UseLocalInsteadOfTablesInSubroutines | UseLocalInsteadOfTablesInSubroutines: Do not declare TABLES/NODES in procedures, modules or event blocks |
High | Use Read With Binary Search If With Key | OPT.ABAP.APFR.UseReadWithBinarySearchIfWithKey | UseReadWithBinarySearchIfWithKey: Use BINARY SEARCH with WITH KEY when reading tables |
High | Warn Scroll | OPT.ABAP.AWD.WarnScroll | WarnScroll: Avoid Web Dynpro elements with scrollingMode {} |
Low | Warn Without Adobe Print Form | OPT.ABAP.ADR.WarnWithoutAdobePrintForm | WarnWithoutAdobePrintForm: Warning if Print Forms is not in use Adobe as form |
High | Weak Hash Algorithm | OPT.ABAP.SEC.WeakHashAlgorithm | WeakHashAlgorithm: Weak cryptographic hashes cannot guarantee data integrity |
Low | Where Clauses Without Not Or | OPT.ABAP.ASR.WhereClausesWithoutNotOr | WhereClausesWithoutNotOr: Avoid NOT / OR operators inside WHERE clauses in database operations |
Low | Working With Report | OPT.ABAP.AGR.WorkingWithReport | WorkingWithReport: Avoid dynamic operations (READ, INSERT or DELETE) with reports |
Low | Working With Text Pool | OPT.ABAP.AGR.WorkingWithTextPool | WorkingWithTextPool: Avoid read, insert or delete textpools |
Select | Generate | Header | Row |
---|---|---|---|
But don't use a table title | |||
Use a table as a table |