[{ALLOW view All}]
[{ALLOW edit Authenticated}]

[{TableOfContents }]

! Links
[SAP ABAP Technology|http://help.sap.com/saphelp_nw2004s/helpdata/en/74/f72707c850b6489e32614108e38ecb/frameset.htm]

[New ABAP Keyword Documentation for SAP|http://www.sdn.sap.com/irj/scn/weblogs;jsessionid=%28J2EE3414800%29ID0451757950DB10507301263077410235End?blog=/pub/wlg/1603]

[ABAP-Programmierung|http://lingua-eurana.de/abap.htm]

[Program Samples|http://www.guidancetech.com/people/holland/sap/abap/]

[Load Excel into table|http://www.sapdev.co.uk/file/file_upexcel.htm]

! Run Time Type Services (RTTS)
Types according to CL_ABAP_ELEMDESCR
|KIND_CLASS|C
|KIND_ELEM|E
|KIND_INTF|I
|KIND_REF|R
|KIND_STRUCT|S
|KIND_TABLE|T
|TRUE|X
|TYPEKIND_ANY|~
|TYPEKIND_CHAR|C|CHAR
|TYPEKIND_CLASS|*
|TYPEKIND_CLIKE|&
|TYPEKIND_CSEQUENCE|?
|TYPEKIND_DATA|#
|TYPEKIND_DATE|D|DATS
|TYPEKIND_DECFLOAT|/
|TYPEKIND_DECFLOAT16|a
|TYPEKIND_DECFLOAT34|e
|TYPEKIND_DREF|l
|TYPEKIND_FLOAT|F
|TYPEKIND_HEX|X
|TYPEKIND_INT|I
|TYPEKIND_INT1|b
|TYPEKIND_INT2|s
|TYPEKIND_INTF|+
|TYPEKIND_IREF|m
|TYPEKIND_NUM|N
|TYPEKIND_NUMERIC|%
|TYPEKIND_OREF|r
|TYPEKIND_PACKED|P|CURR,DEC
|TYPEKIND_SIMPLE|$
|TYPEKIND_STRING|g
|TYPEKIND_STRUCT1|u
|TYPEKIND_STRUCT2|v
|TYPEKIND_TABLE|h
|TYPEKIND_TIME|T
|TYPEKIND_W|w
|TYPEKIND_XSEQUENCE|!
|TYPEKIND_XSTRING|y
|TYPEKIND_BREF|j
|TYPEPROPKIND_DBMAXLEN|D
|TYPEPROPKIND_HASCLIENT|C
|UNDEFINED|-

! Character conversion (codepage)
See [here|http://wiki.scn.sap.com/wiki/display/Snippets/ABAP+Code+Page+Conversions]
and [here|http://wiki.scn.sap.com/wiki/display/ABAP/Character+encoding+conversion]
or [Abap-xstring]
|fb.SCP_REPLACE_STRANGE_CHARS|Change German special chars (Umlaute)
|CL_XMS_PART_UTIL| 
|CL_ABAP_CONV_IN_CE|Code Page and Endian Conversion (External -> System Format)
|CL_ABAP_CONV_OUT_CE|Converts ABAP data objects to an external binary format
|CL_ABAP_CONV_X2X_CE|Converts of ABAP data objects between two external binary formats
|CL_ABAP_CHAR_UTILITIES|Various attributes and methods for character sets and byte order
|CL_NLS_STRUC_CONTAINER|Corrects alignment of structures in containers of type C (or STRING). You need to make this correction if East-Asian characters ("full-width" characters in Chinese, Japanese, and Korean) are to be copied from a non-Unicode to a Unicode system or vice versa. You do not need to make the correction if you use the method CONVERT_STRUC from this class.

{{{
DATA: l_xstring_input   TYPE xstring,
        l_string_output   TYPE string,
        l_encoding        TYPE abap_encoding,  "see table TCP00
        l_r_converter     TYPE REF TO cl_abap_conv_in_ce.
 
      " Convert file data to string
      TRY.
          CALL METHOD cl_abap_conv_in_ce=>create
            EXPORTING
              input       = l_xstring_input
              encoding    = l_encoding
              replacement = '#'
              ignore_cerr = abap_false
            RECEIVING
              conv        = l_r_converter.
 
          CALL METHOD l_r_converter->read
            IMPORTING
              data = l_string_output.
 
        CATCH cx_root.
           " Conversion error
          EXIT.
      ENDTRY.
}}}
! General system information
{{{
CL_HRCE_MASTERSWITCHES=>IS_CLIENT_PRODUCTIVE( ) = 'X'/' '
}}}

!Shortcuts

|Ctrl + <| comment out all marked line
|Ctrl + Shift + <| uncomment all mrkes lines

!Search in Reports
|RPINCL10|Standard
|RPR_ABAP_SOURCE_SCAN|Scan ABAP Report Sourcen
|x.CODE_SCANNER|ABAP Search (=r.AFX_CODE_SCANNER)
|RSRSCAN1|
|RKCTSEAR|

!Append
There is a weird shortcut for APPEND.\\
When you record a session, the code is generated like
{{{
CLEAR bdctab.
bdctab-program = 'SAPMSSY0'.	
bdctab-dynpro = '120'.
bdctab-dynbegin = 'X'.
APPEND bdctab.
}}}
The first CLEAR and the field assignments refer to a __structure__ bdctab. \\
This structure is the header line (deprecated) from itab bdctab. So bdctab is used in different contexts.\\
If an ABAP command needs a structure, the header line "bdctab" is automatically taken. \\
If an ABAP command need an itab, the table "bcdtab" is taken, you can use 
{{{ APPEND bdctab[] }}} to indicate that the table should be used. \\
APPEND bdctab is a shortcut and should at least be
{{{ APPEND bcdtab to bdctab[] }}}
But this is outdated also, though still generated from SAP ECC 6.0. \\
See more explanations [here|http://www.sapdb.info/append-abap-keyword-a-day/].

! Execute OS commands on the server

* function module SXPG_COMMAND_EXECUTE in connection with SM49/SM69
* WS_EXECUTE
* CL_GUI_FRONTEND_SERVICES=>EXECUTE
* TH_POPUP
* call 'SYSTEM' id 'COMMAND' 

! Remote Execution

{{{
   SUBMIT {rep|(name)} ...
}}}

! Text Manipulation

|class CL_ABAP_CHAR_UTILITIES|
|concatenate|
|strlen|describe field

Note: 
{{{replace all occurrences of ' ' in p_filen with '_' in character mode.}}}
will raise an exception REPLACE_INFINITE_LOOP, use the following:
{{{replace all occurrences of regex '\s{1}' in p_filen with '_'.}}}
(or use TRANSLATE)

! Using XSTRING

see [xstring|abap-xstring]

! File Handling
* CL_GUI_FRONTEND_SERVICES=>FILE_*
* OPEN/GET DATASET
* FB EPS_GET*
* FB SCMS*

! Date Handling
Vormonat:
{{{
DATA: ultimo TYPE d.
ultimo      = sy-datum. 
ultimo+6(2) = '01'.          " = erster Tag dieses Monats
ultimo      = ultimo - 1.    " = letzter Tag dieses Monats
}}}
Achtung: Funktioniert nicht beim Jahreswechsel, hier muss extra geprüft werden.

! Import Excel to SAP
|f.TEXT_CONVERT_XLS_TO_SAP|Fastest
|f.ALSM_EXCEL_TO_INTERNAL_TABLE|Standard
|f.KCD_EXCEL_OLE_TO_INT_CONVERT|limited to 9999 rows
|f.FILE_READ_AND_CONVERT_SAP_DATA|6x slower
|Per OLE|CREATE OBJECT H_EXCEL 'Excel.Application' + CALL METHOD OF H_EXCEL 'Workbooks' = H_WRKBK ...


! Dynamic / Generic SQL
Native SQL, see reports
|ADBC_DEMO
|RSDU_EXEC_SQL

Open SQL
{{{
REPORT  z_bi_blogdyn1.
PARAMETERS: p_tab TYPE tabname DEFAULT 'T001'.
START-OF-SELECTION.
  DATA:          dref    TYPE REF TO data,
                 tref    TYPE REF TO data,
                 gt_fcat TYPE lvc_t_fcat.

  FIELD-SYMBOLS: <wa>    TYPE ANY,
                 <itab>  TYPE STANDARD TABLE.

  CREATE DATA dref TYPE (p_tab).
  ASSIGN dref->* TO <wa>.

  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name       = p_tab
       CHANGING
            ct_fieldcat            = gt_fcat[]
       EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
     EXPORTING
       it_fieldcatalog           = gt_fcat
     IMPORTING
       ep_table                  = tref
     EXCEPTIONS
       generate_subpool_dir_full = 1
       OTHERS                    = 2.

  ASSIGN tref->* TO <itab>.

  SELECT * FROM (p_tab) INTO TABLE <itab>.

  LOOP AT <itab> INTO <wa>.
    WRITE: / <wa>.
  ENDLOOP.
}}}

!Gray out selection parameters
{{{
 AT SELECTION-SCREEN OUTPUT.
      LOOP AT SCREEN.
        IF SCREEN-NAME = 'STEP080'. " name is upper case always
             SCREEN-input = 0.      " grau out
             MODIFY SCREEN.
         ENDIF.
      ENDLOOP.
}}}

! Cluster tables
[HR Clusters|http://wiki.sdn.sap.com/wiki/display/ERPHCM/HR+Payroll+Clusters] |
[Cluster Discussion|http://scn.sap.com/thread/974261]
|x.PECLUSTER|HR-Cluster bearbeiten
|v.V_T52RELID|Pflegeview für die Beschreibung der Cluster in PCLx
|t.T52RELID|HR: Beschreibung der Cluster in den Tabellen PCLx
|p.PCAL|Paket PCAL (all cluster stuff)
|t.T52B5|Zuordnung von Werten zu Objekten (CLST,PDP,1)
|t.HRDCT_D_TABLES|Index Table for Declustering Transparent Tables


!ABAP Objects / Class

|t.SEOCLASS|Classes
|t.SEOCOMPO|Components (Methods)
|v.VSEOCLASS|view on class
|t.SEOMETAREL|Meta-Beziehung (see RELTYPE: Interface, Vererbung, Erweiterung)
|t.TMDIR|Classes and its methods
|cl.CL_OO_CLASS|Class Reflection Helper class



Loop through table of objects with keyword TABLE_LINE:
{{{
DATA: gt_records type standard table of ref to zhrzxx_mig_tabledata,
      lo_record type ref to zhrzxx_mig_tabledata.
LOOP AT gt_records INTO lo_record
      WHERE table_line->mv_infty = '0001'.
      [...]
ENDLOOP.
}}}

Tabellen DD0*

!ABAP Dictionary
|f.DDIF_FIELDINFO_GET
|f.DDIF_FIELDLABEL_GET
|fm.DDIF_DOMA_GET
|fm.RSD_DTEL_GET 
|CL_ABAP_TYPEDESCR 


! Wildcards

| |SQL|Selektion Screen
|0 to many|%|*
|single char|_|+


!Business Application Log (BAL)

|SLG0|Anwendungs-Log: Objektpflege (Objekt+Unterobjekt ist nötig, um auf DB zu sichern)
|SLG1|Anwendungs-Log: Protokolle anzeigen
|SLG2|Anwendungs-Log: Protokolle löschen
|SLGN|Anwendungs-Log: Nummernkreispflege
|SLGT|Anmelden zentraler Objektkatalog

Für die Protokollierung sollten die von SAP vorgesehenen Funktionsbausteine in
der Funktionsgruppe SBAL verwendet werden. 
Die Beispielprogramme „SBAL_DEMO*“ bieten einen guten Einstieg und Überblick.

[SAP Application Log – Leitfaden für Anwender|http://help.sap.com/saphelp_nw70ehp2/helpdata/de/3a/c8263712c79958e10000009b38f936/frameset.htm]

|r.SBAL_DOCUMENTATION
|CL_HRPAY00_MESSAGE_HANDLER

|BAL_AMODAL  |Anwendungs-Log: INDX-Tabelle für amodale K
|BAL_INDX    |Anwendungs-Log: INDX-Tabelle
|BALC        |Anwendungs-Log: Kontext des Prokolls bzw.
|BALDAT      |Anwendungs-Log: Daten eines Protokolls
|BALHANDLE   |Anwendungs-Log: Dummy-Tabelle für Sperrobj
|BALHDR      |Anwendungs-Log: Protokollkopf
|BALHDRP     |Anwendungs-Log: Protokollparameter
|BALM        |Anwendungs-Log: Protokollnachrichten
|BALMP       |Anwendungs-Log: Nachrichtenparameter
|BALOBJ      |Anwendungs-Log: Objekte
|BALOBJT     |Anwendungs-Log: Texte zu den Objekten
|BALSUB      |Anwendungs-Log: Unterobjekte
|BALSUBT     |Anwendungs-Log: Unterobjekttexte
|CIFBALSEL   |Anwendungs-Log: CIF-Erweiterung für Protok