15. Logical Expressions & Operators IF statements may be joined using the AND, OR or NOT operators. Logical expressions may use the following comparative operators : eq = ne <> >< gt > ge >= lt < le <= between co, ca, cs, cp (string comparisons) Examples.
Input Parameters A Parameter is a special type of variable. It requires the value of the variable to be input from a selection screen. Parameters are defined using the parameters statement. Parameter names can be no more than 8 characters. Why is ABC on the selection screen? (It has been set as the default of PAR2) What will be printed as a result of the write statement? (whatever values the user has input) How can the appearance of the screen be improved? ==> use meaningful labels. HOW? ==> assign the attributes of a table field to the parameter. HOW WILL THIS IMPROVE THE SCREEN? ==> The data element of the table field will give the parameter a label and F1 help, also if a check table is involved it will ensure data integrity of input.
Input Parameters parameters: carr like spfli-carrid default ‘LH’. What is the effect of the “like” clause? >> carr is assigned the same field attributes as spfli-carrid - field type and length (CHAR & 3 from domain) - label (from data element - note extra steps required to assign DD field label to parameter - steps outlined in workshop ex. ) - F1 help (from data element) - if check table used in spfli-carrid then a n icon appears at the end of the parameter’s input field - if you click, a list of valid values for the field is displayed
What is a CONSTANT? Note: Type s_carr_id reference has been made to the Data Element so that the variable is assigned the DD object attribute (type & length). Each elementary field comes as standard with an initial value appropriate to its type. You can set an start value for an elementary field yourself using the VALUE addition. After VALUES you may only specify a fixed data object. If you want to copy the field contents of variable var1 to a second variable var2 , you can choose one of two syntax variants: MOVE var1 TO var2. var2 = var1. If the two data objects have different types, the type is automatically converted if there is a conversion rule. You can find detailed information about copying and about the conversion rules in the keyword documentation for MOVE The CLEAR statement resets the field contents of a variable to the initial value for the particular type. You can find detailed information about the initial values for a particular type in the keyword documentation about CLEAR .
Assignment statements: clear What is the result of the write statement? a1 bb where b is a blank a2 0 a3 0 a4 000 a5 00000000 a6 000000 g1-a1 XXX g1-a2 0
Note: TYPE statement in slide example references a STRUCTURE called SBC400FOCC and defined in the Data Dictionary. (Emerald does not have SBC400FOCC but has structure YCHSTRUK_SFLIGHT ) You can precede calculations with the COMPUTE statement. This statement is optional.
Calculations COMPUTE is optional See online documentation for COMPUTE for further explanation of functions and DIV & MOD. Note the brackets have spaces except the first when used with a function. What is unusual about the compute lines for SUM, RESULT, ROOT? ==> use of a data field type c What has happened? ==> ABAP/4 automatically carries out a conversion based on a set of conversion rules.
Conversion Rules: Elementary Types Conversion rules exits for all combinations of elementary types. A comprehensive overview of conversion rules is contained on the online documentation for the DATA statement. Type c fields are saved left justified. When you convert to type c fields, the field is filled up with blanks if it is too short, and truncated if it is too long. See example 1 & 2 above When you convert a type c field to a type p field, only digits, a plus or minus sign and a decimal point are permitted. (see example 3 above) When you convert a type p field to a type c field, the leading zeros are converted to spaces. (see example 4 above)
Calculations with dates What is the result of the program above? today’s day = no of days e.g. 19990113 as sy-datum then DIFF = 13 Why not just display DATEREC-DAY as answer? Program illustrates how dates can be used in calculations. For example, How would you work out the number of days in the current month? Or the number of days from a particular date until today?
Other control commands : LOOP ….. ENDLOOP for reading internal tables. AT ….. ENDAT for control level processing within a LOOP statement. Covered later?
Logical expressions can be linked with NOT, AND, and OR. You can nest parenthetical expressions as deeply as you want. The parentheses which denote sub-expressions always count as one word. They must therefore be separated by spaces. If you compare two type C fields with unequal length, the shorter field is lengthened to match the length of the longer one when the comparison is made. It is filled from the right-hand end with spaces.
The ELSE and ELSEIF statements are optional. Examples : i) if value1 = 22. add 25 to value1. endif. ii) if value1 = 22. add 25 to value1. else. write value1. endif. iii) if w_year1 > w_year2. write ‘Year1’. elseif w_year1 < w_year2. write ‘Year2’. else. write ‘Equal’. endif.
co - contains only <f1> co <f2> (case sensitive) is true if <f1> contains only chars from <f2>. ‘ BD___’ co ‘ABCD_’ True ‘ BD___’ co ‘ABCDE’ False ca - contains any <f1> ca <f2> (case sensitive) is true if <f1> contains at least one char from <f2>. ‘ ABcde’ ca ‘Bd___’ True ‘ ABcde’ ca ‘bD___’ False cs - contains string <f1> cs <f2> (not-case sensitive) is true if <f1> contains the char string in (trailing spaces ignored) <f2>. ‘ ABcde’ cs ‘bC___’ True ‘ ABcde’ cs ‘ce____’ False cp - contains pattern <f1> cp <f2> (not-case sensitive) is true if <f1> contains the pattern in <f2>. (* any char, + single char) ‘ABcde’ cp ‘*b*’ True
IF and CASE statements allow you to make case distinctions: CASE ... ENDCASE: Only one of the sequences of statements is executed. The WHEN OTHERS statement is optional. IF ... ENDIF: The logical expressions that are supported are described in the documentation about IF . The ELSE and ELSEIF statements are optional. If the logical expression is fulfilled, the following sequence of statements is executed. If the logical expression is not fulfilled, the ELSE or ELSEIF section is processed. If there is no ELSE or no further ELSEIF statement, the program continues after the ENDIF statement. You can include any number of ELSEIF statements between IF and ENDIF . A maximum of one of the sequences of statements will be executed. data: w_year type i. w_year = 1997. case w_year. when 1996. write ‘The year is 1996’. when 1997. write ‘The year is 1997’. when 1998. write ‘The year is 1998.’ when others. write ‘The year is undefined.’ endcase.
Examples : i) data n type i, square type i, count type i. n = 100. count = 0. do n times. count = count + 1. square = count ** 2. write square. enddo. ii) n = 100. do n times. square = sy-index ** 2. write square. enddo.
Example : A binary search. min = 0. max = 1000. while key <> search_key. key = ( min + max ) div 2. (integer division) if key > search_key. max = key - 1. else. min = key + 1. endif. endwhile.
Examples : do 4 times. If sy-index = 2. Continue. Endif. Write sy-index. Enddo. This produces the following output: 1 3 4 The system terminates the second loop pass without processing the write statement. do 4 times. Check sy-index between 2 and 3. Write sy-index. Enddo. This produces the following output: 2 3 The system terminates the first and fourth loop pass without processing the write statement because sy-index does not fall between 2 and 3. do 4 times. If sy-index = 3. exit. Endif. Write sy-index. Enddo. This produces the following output: 1 2 The system terminates the entire loop processing in the thirdloop pass without processing the write statement or the fourth loop pass.
Debugging can be invoked by : Start a program by calling the Debugging function from the ABAP Editor initial screen. Enter /h in the command field, press ENTER and choose Execute. From the Object Browser access debugging mode by right-clicking program name and selecting: Execute >> Debugging. When in debugging mode, the program lines appear in the upper half of the screen with the contents of the fields in the lower half. Breakpoints can be line-oriented, field-oriented (watchpoint) or command oriented.
Starting the program in the debugging mode allows you to execute the program line by line using the 'Single Step' icon. You can display up to eight variables. To trace the variable values, enter the field names in the left input field. You can also see this entry by double-clicking on the field name in the code displayed.
You can set a breakpoint by double-clicking in front of a line of source code in the debugging mode. If you then click on the 'Continue' icon, the program will be executed up to the point where the next breakpoint is defined. You can find information on content-related breakpoints in the ABAP Statements and Data Declarations unit.