From 0db36495aa4f2c159ef42fdf6dbf87ade58dbe1b Mon Sep 17 00:00:00 2001
From: danrega <16720986+danrega@users.noreply.github.com>
Date: Thu, 11 Apr 2024 16:35:36 +0200
Subject: [PATCH] Update
---
06_Dynamic_Programming.md | 8 ++++----
07_String_Processing.md | 28 ++++++++++++++++++++++++++++
16_Data_Types_and_Objects.md | 6 +++++-
22_Misc_ABAP_Classes.md | 4 ++--
23_Date_and_Time.md | 27 +++++----------------------
24_Misc_Builtin_Functions.md | 14 +++++++-------
6 files changed, 51 insertions(+), 36 deletions(-)
diff --git a/06_Dynamic_Programming.md b/06_Dynamic_Programming.md
index 7bf9884..acaed21 100644
--- a/06_Dynamic_Programming.md
+++ b/06_Dynamic_Programming.md
@@ -1639,7 +1639,7 @@ DATA(s2) = |{ some_string WIDTH = 10 ALIGN = (right) }<---|. "' ##<---'
"The following example uses method chaining with methods of the class
"cl_abap_random_int to get a random integer value (in the range of 1 - 3).
-"The get_next method has a returning parameter, and returns and integer value.
+"The get_next method has a returning parameter, and returns an integer value.
DO 5 TIMES.
DATA(s3) = |{ some_string WIDTH = 10 ALIGN = cl_abap_random_int=>create( seed = cl_abap_random=>seed( )
min = 1 max = 3 )->get_next( ) }<---|.
@@ -1821,9 +1821,9 @@ DATA elemdobj TYPE elemtype.
DATA strucdobj TYPE structype.
DATA tabledobj TYPE strtabtype.
-DATA(tdo_by_data_elem) = cl_abap_typedescr=>describe_by_data( 'ELEMTYPE' ).
-DATA(tdo_by_data_struc) = cl_abap_typedescr=>describe_by_data( 'STRUCTYPE' ).
-DATA(tdo_by_data_itab) = cl_abap_typedescr=>describe_by_data( 'STRTABTYPE' ).
+DATA(tdo_by_data_elem) = cl_abap_typedescr=>describe_by_data( elemdobj ).
+DATA(tdo_by_data_struc) = cl_abap_typedescr=>describe_by_data( strucdobj ).
+DATA(tdo_by_data_itab) = cl_abap_typedescr=>describe_by_data( tabledobj ).
"... using the cl_abap_typedescr=>describe_by_data_ref method
"In this case, a data reference variable is used.
diff --git a/07_String_Processing.md b/07_String_Processing.md
index 89215d6..6f3de22 100644
--- a/07_String_Processing.md
+++ b/07_String_Processing.md
@@ -258,6 +258,7 @@ embedded ABAP
[expressions](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenexpression_glosry.htm "Glossary Entry")
within a pair of delimiters (`|...|`) if these expressions can be converted to `string`.
- To embed expressions, you enclose them in curly brackets: `{ ... }`.
+- Among the expressions that can be specified in the curly brackets are data objects and [functional method calls](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenfunctional_method_call_glosry.htm) that have a [return value](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenreturn_value_glosry.htm). The expression result must be convertible to type `string`.
> **💡 Note**
> - String templates form a [string
@@ -278,6 +279,33 @@ DATA(s3) = |{ s1 } { s2 }|. "Hallo NAME! How are you?
"Chaining of string templates using &&
DATA(s4) = |{ s1 }| && ` ` && |{ s2 }|. "Hallo NAME! How are you?
+
+"Selection of possible expressions:
+"Data objects, as in the examples above
+DATA(dobj1) = `Hallo`.
+DATA(dobj2) = '!'.
+
+"Hallo!
+DATA(s5) = |{ dobj1 }{ dobj2 }|.
+
+"NOT INITIAL
+DATA(s6) = |{ COND #( WHEN s5 IS INITIAL THEN `INITIAL` ELSE `NOT INITIAL` ) }|.
+
+"Functional method calls, built-in functions
+"Your user alias: XXXX...
+DATA(s7) = |Your user alias: { cl_abap_context_info=>get_user_alias( ) }|.
+
+"Some random number: 39 (example)
+DATA(s8) = |Some random number: { cl_abap_random_int=>create( seed = cl_abap_random=>seed( ) min = 1 max = 100 )->get_next( ) }|.
+
+"Length of string s5: 6
+DATA(s9) = |Length of string s5: { strlen( s5 ) }|.
+
+"Current UTC time stamp: 2024-01-11 14:27:54.1514090 (example)
+DATA(s10) = |Current UTC time stamp: { utclong_current( ) }|.
+
+"HALLO!
+DATA(s11) = |{ to_upper( s5 ) }|.
```
- String templates interpret certain character combinations as [control
diff --git a/16_Data_Types_and_Objects.md b/16_Data_Types_and_Objects.md
index 0ec3879..0305c61 100644
--- a/16_Data_Types_and_Objects.md
+++ b/16_Data_Types_and_Objects.md
@@ -1471,6 +1471,10 @@ Typed literal:
- Literal whose data types is defined by specifying a [built-in dictionary type](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenddic_builtin_types.htm) explicitly.
- Available for most but not all ABAP Dictionary data types.
- Can be used in ABAP SQL and in ABAP CDS.
+- Advantages of typed literals over untyped literals
+ - Allow type-safe use of literals
+ - Eliminate the need for (implicit type) conversions and casts, which can lead to surprising or erroneous results; also consider the conversion costs in terms of performance (typed literals are passed to the database and evaluated there without ABAP-specific type conversions).
+ - For better readability (you can immediately see what type is being used)
- More information: Typed literals in [ABAP SQL](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_sql_typed_literals.htm) ([cast expressions in ABAP SQL](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abensql_cast.htm)) and [ABAP CDS](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abencds_typed_literal_v2.htm)
```abap
@@ -1512,7 +1516,7 @@ SELECT SINGLE
"Untyped literal
'ABAP' AS txt
WHERE fldate = dats`20240102`
- INTO @DATA(wa_misc_typed_literal).
+ INTO @DATA(wa_misc_typed_literals).
```
⬆️ back to top
diff --git a/22_Misc_ABAP_Classes.md b/22_Misc_ABAP_Classes.md
index b88aafe..416acda 100644
--- a/22_Misc_ABAP_Classes.md
+++ b/22_Misc_ABAP_Classes.md
@@ -476,7 +476,7 @@ DATA(random_num1) = cl_abap_random_int=>create( seed = cl_abap_random=>seed( )
min = 1
max = 100 ).
DO 3 TIMES.
- APPEND random_num1->get_next( ) TO int_tab.
+ APPEND random_num1->get_next( ) TO int_tab.
ENDDO.
"Getting a random integer in one go using method chaining
@@ -788,7 +788,7 @@ DATA(comp) = xco_cp=>string( `some_value` )->split( `_` )->compose( xco_cp_strin
"some_value
DATA(decomp) = xco_cp=>string( `someValue` )->decompose( xco_cp_string=>decomposition->camel_case )->join( `_` )->value.
-"------ Processing Base64 Representations of Raw Binary Data ------
+"------ Processing Base64 representations of raw binary data ------
DATA(a_string) = `Hello world`.
"string -> xstring
"Result: 48656C6C6F20776F726C64
diff --git a/23_Date_and_Time.md b/23_Date_and_Time.md
index 97832db..6bf2c16 100644
--- a/23_Date_and_Time.md
+++ b/23_Date_and_Time.md
@@ -29,10 +29,7 @@
- [`CL_ABAP_TSTMP`: Calculating and Converting Time Stamps in Packed Numbers](#cl_abap_tstmp-calculating-and-converting-time-stamps-in-packed-numbers)
- [Excursion: Unix Time Stamps](#excursion-unix-time-stamps)
- [Date, Time, and Time Stamps in String Templates](#date-time-and-time-stamps-in-string-templates)
- - [Excursions](#excursions)
- - [Typed Literals in ABAP SQL](#typed-literals-in-abap-sql)
- - [Date and Time Functions in ABAP SQL](#date-and-time-functions-in-abap-sql)
- - [Date and Time Functions in ABAP CDS](#date-and-time-functions-in-abap-cds)
+ - [Excursion: Date and Time Functions in ABAP SQL and ABAP CDS](#excursion-date-and-time-functions-in-abap-sql-and-abap-cds)
- [More Information](#more-information)
- [Executable Example](#executable-example)
@@ -1152,14 +1149,11 @@ tz_str = |{ utclong_current( ) TIMEZONE = 'EST' COUNTRY = 'US ' }|. "12/30/2024
⬆️ back to top
-## Excursions
-### Typed Literals in ABAP SQL
+## Excursion: Date and Time Functions in ABAP SQL and ABAP CDS
-The following code snippets use [typed literals](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abentyped_literal_glosry.htm). For more information, refer to the [ABAP Keyword Documentation](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_sql_typed_literals.htm) and the [Typed Literals in ABAP SQL](/16_Data_Types_and_Objects.md#typed-literals-in-abap-sql) section of the *Data Types and Data Objects* cheat sheet.
-
-### Date and Time Functions in ABAP SQL
-
-More information: [Date Functions and Time Functions](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_sql_date_time_functions.htm)
+> **💡 Note**
+> - Date and time functions are available for both [ABAP SQL](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_sql_date_time_functions.htm) and [ABAP CDS](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abencds_date_time_functions_v2.htm). They have the same names. See the [overview](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenddic_date_time_functions.htm) to find out which functions are available. The followig code snippet uses ABAP SQL.
+> - The following code snippets use [typed literals](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abentyped_literal_glosry.htm) to have self-contained examples. For more information, refer to the [ABAP Keyword Documentation](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_sql_typed_literals.htm) and the [Typed Literals in ABAP SQL](/16_Data_Types_and_Objects.md#typed-literals-in-abap-sql) section of the *Data Types and Data Objects* cheat sheet.
```abap
"The following demo ABAP SQL SELECT statement selects from a
@@ -1253,17 +1247,6 @@ INTO @DATA(wa).
⬆️ back to top
-### Date and Time Functions in ABAP CDS
-Date and time functions are available for [ABAP CDS](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenabap_cds_glosry.htm). They have the same names as the functions in ABAP SQL. See the [overview](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenddic_date_time_functions.htm) to find out which functions are available.
-
-More information:
-- [Date and time functions](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abencds_date_time_functions_v2.htm)
-- [Overview of date and time functions for ABAP SQL and ABAP CDS](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abenddic_date_time_functions.htm)
-
-Find examples in the ABAP Keyword Documentation and a small selection of functions in the examples of the CDS view entities cheat sheet in [this example artifact](src/zdemo_abap_cds_ve_sel.ddls.asddls).
-
-⬆️ back to top
-
## More Information
- [Date and Time Processing](https://help.sap.com/doc/abapdocu_cp_index_htm/CLOUD/en-US/index.htm?file=abendate_time_processing.htm)
diff --git a/24_Misc_Builtin_Functions.md b/24_Misc_Builtin_Functions.md
index 8b3fe13..67c06ba 100644
--- a/24_Misc_Builtin_Functions.md
+++ b/24_Misc_Builtin_Functions.md
@@ -1308,7 +1308,7 @@ DATA(line_index2) = line_index( itab_em[ comp2 = 'd' ] ).
"Note: A hashed table does not have a primary table index. The result is -1.
DATA(line_index3) = line_index( itab_sec[ KEY primary_key comp1 = 1 ] ).
-"Hashed tables can be assigned a secondary table index using a seoncary
+"Hashed tables can be assigned a secondary table index using a secondary
"table key.
"4
DATA(line_index4) = line_index( itab_sec[ KEY sk comp2 = 'd' ] ).
@@ -1415,7 +1415,7 @@ SELECT SINGLE
"case-sensitive by default (case_sensitive parameter can be specified)
"Notes on the 1 = found, 0 = not found
"1
- like_regexpr( pcre = '\..', "Period that is followed by any character
+ like_regexpr( pcre = '\..', "Period that is followed by any character
value = url ) AS like_regex,
"Returns position of a substring in an expression,
@@ -1427,15 +1427,15 @@ SELECT SINGLE
"Searches a PCRE pattern, returns offset of match;
"many optional parameters: occurrence, case_sensitive, start, group
"21
- locate_regexpr( pcre = '\..', "Period followed by any character
+ locate_regexpr( pcre = '\..', "Period followed by any character
value = url,
- occurrence = 2 ) "2nd occurrence in the string
+ occurrence = 2 ) "2nd occurrence in the string
AS locate_regexpr,
"Searches a PCRE pattern, returns offset of match + 1;
"many optional parameters: occurrence, case_sensitive, start, group
"2
- locate_regexpr_after( pcre = '.', "Any character
+ locate_regexpr_after( pcre = '.', "Any character
value = url,
occurrence = 1 ) AS locate_regexpr_after,
@@ -1446,7 +1446,7 @@ SELECT SINGLE
"Counts all occurrences of found PCRE patterns
"2
- occurrences_regexpr( pcre = '\..', "Period that is followed by any character
+ occurrences_regexpr( pcre = '\..', "Period that is followed by any character
value = url ) AS occ_regex,
"Replaces the 2nd argument with the 3rd in an expression
@@ -1456,7 +1456,7 @@ SELECT SINGLE
"Replaces a found PCRE expression;
"more parameters possible: occurrence, case_sensitive, start
"http://www#ufthansa#om
- replace_regexpr( pcre = '\..', "Period that is followed by any character
+ replace_regexpr( pcre = '\..', "Period that is followed by any character
value = url,
with = '#' ) AS replace_regex,