Skip to content

Latest commit

 

History

History
187 lines (147 loc) · 15.3 KB

19_ABAP_for_Cloud_Development.md

File metadata and controls

187 lines (147 loc) · 15.3 KB

ABAP for Cloud Development

This ABAP cheat sheet briefly outlines the terms ABAP Cloud and classic ABAP to get an idea about ABAP for Cloud Development. It provides references to more detailed information on the topic.

Terms

  • ABAP Cloud
  • Classic ABAP
    • Progamming paradigm for legacy solutions
    • Based on an ABAP Platform without restrictions regarding ABAP language versions (i.e. you can use Standard ABAP - the unrestricted ABAP language version - and also ABAP for Cloud Development there), usage of tools (ADT and/or SAP GUI) or access to repository objects (also objects provided by SAP).
    • Supported in SAP S/4HANA

💡 Note

⬆️ back to top

Excursions

  1. If available to you, you have accessed an SAP BTP ABAP environment using ADT.

    Access to SAP-provided repository objects is restricted to objects that have been released for ABAP for Cloud Development (released APIs). You can find the released repository objects in the Project Explorer view in ADT under Released Objects:

    Released APIs

    As an example of a released API, consider the CL_ABAP_RANDOM_INT class (computes random integers). In ADT, once you have opened the class, check the Properties tab. Click API State on the left to display information about the release contracts. In this case, it is C1. As mentioned above, see here for more information on C1, and so on. This is also true for ABAP repository objects in classic ABAP.

    Release contract

    For deprecated and invalid syntax in ABAP for Cloud Development, see the following code. For example, create a demo class and insert the code contained in the implementation into the if_oo_adt_classrun~main method. You will see several syntax errors.

    💡 Note

    • The IF_OO_ADT_CLASSRUN interface is a released API. As the name implies, you can implement this interface to run an ABAP class. In ADT you can do this with F9. Of course, the example below will not run. The class cannot be activated because of the syntax errors. Note: To output the content of data objects, you can use out->write( ... ). in the main method.
    • About the errros/warnings:
      • The first two ABAP SQL statements select from demo database tables. The first is a demo table provided by SAP. This table is not directly accessible in ABAP Cloud (unlike in classic ABAP) and therefore cannot be used as a data source to select from. The second one is a database table from the ABAP cheat sheet GitHub repository. If you have imported the repository into the system, you can use it as a data source.
      • The next set of ABAP SQL statements are dynamic statements. This is just to emphasize that you should be careful with dynamic statements. You will not get a syntax error at compile time. You can try out the following: Comment out all code except the lines with the dynamic statements, activate the code and run the class with F9. The result is a runtime error because you cannot select from the data source.
      • Examples for deprecated and invalid syntax in ABAP for Cloud Development are included. Among them, the invalid statement MOVE ... TO and others which are just included for demonstration purposes. To set breakpoints in ADT, double-click the area to the left of the code line number.
    CLASS zcl_demo_abap_temp DEFINITION
      PUBLIC
      FINAL
      CREATE PUBLIC .
    
      PUBLIC SECTION.
        INTERFACES if_oo_adt_classrun.
    ENDCLASS.
    
    CLASS zcl_demo_abap_temp IMPLEMENTATION.
      METHOD if_oo_adt_classrun~main.
        "ABAP SQL statements using database tables as data sources
        "Data source that cannot be accessed in ABAP Cloud
        SELECT carrid, connid FROM spfli WHERE carrid = 'LH' INTO TABLE @DATA(it1).
        
        "Data source that can be accessed in ABAP Cloud if you have imported 
        "the ABAP cheat sheet repository objects
        SELECT carrid, connid FROM zdemo_abap_fli WHERE carrid = 'LH' INTO TABLE @DATA(it2).
        
        "Dynamic ABAP SQL statements
        "No syntax error will be displayed for the dynamic statements. 
        "However, a runtime error will occur when running the class (in ABAP Cloud). 
        "Note: Check out the CL_ABAP_DYN_PRG class, which supports dynamic programming 
        "by checking the validity of dynamic specifications.
        SELECT SINGLE carrid, connid FROM ('SPFLI') WHERE carrid = 'LH' INTO NEW @DATA(ref_a).
        "No runtime error if you have imported the ABAP cheat sheet repository objects.
        SELECT SINGLE carrid, connid FROM ('ZDEMO_ABAP_FLI') WHERE carrid = 'LH' INTO NEW @DATA(ref_b).
    
        "Examples for deprecated and invalid syntax in ABAP for Cloud Development  
        DATA(num1) = 1.
        DATA(num2) = 1.
        DATA(num3) = 2.
        "Invalid statement
        MOVE num3 TO num1.
        "Alternative that can be used
        num2 = num3. 
    
        "Note: This table type is released.
        DATA(it3) = VALUE string_table( ( `a` ) ( `b` ) ( `c` ) ).
        "Invalid statement
        DESCRIBE TABLE it3 LINES DATA(num_lines1).
        "Alternative that can be used
        DATA(num_lines2) = lines( it3 ).
    
        DATA: ref1 TYPE REF TO i,
              ref2 TYPE REF TO i.    
        "Deprecated statement
        GET REFERENCE OF num1 INTO ref1.
        "Alternative that can be used
        ref2 = REF #( num1 ). 
    
        DATA str_itab TYPE string_table. 
        "The following statements are invalid. The pointless WRITE statement here
        "just represents invalid classic ABAP UI-related statements.
        READ REPORT 'ZCL_DEMO_ABAP_UNIT_TEST=======CCAU' INTO str_itab.
        WRITE 'hi'.
        BREAK-POINT.
      ENDMETHOD.
    ENDCLASS.
  2. If available to you, you have accessed an on-premise ABAP system using ADT. It is assumed that the latest ABAP release is available.

    a) Checking API status information

    • Choose CTRL + SHIFT + A to open the search in ADT. Search the class CL_ABAP_RANDOM_INT. Once you have opened the class, check the Properties tab and find the API status information.

    b) Creating an example class

    • Create a global class and insert the code from above. Depending on the name of the class you created, replace the class name in the snippet. For the example class created, check the information in the Properties tab. Choose General. The ABAP Language Version is maintained as Standard ABAP: Standard ABAP
    • If you have not imported the ABAP cheat sheet GitHub repository, remove the lines of code using artifacts from that repository, i.e. remove the statements using objects starting with Z.... You should not see any syntax errors. Activate the class.
    • Run the class with F9. The code should have been processed up to the BREAK-POINT statement and the debugger should have started. You may want to check the content of the variables in the debugger. Choose Terminate to exit the debugger.
    • So, unlike in the case of ABAP Cloud above, you should be able to activate and run the code (which does not represent a meaningful code example).

    c) Verifying cloud-readiness of your code in classic ABAP

    • You have walked through b), created a class, inserted the code from above, and activated the class. The ABAP Language Version is maintained as Standard ABAP in the Properties tab.
    • Verifying if your code is cloud-ready
      • You can use ATC check variant ABAP_CLOUD_READINESS for this purpose.
      • For example, in your class, right-click and choose Run As4 ABAP Test Cockpit With.... Enter ABAP_CLOUD_READINESS in the pop-up window and choose Ok. The ATC check run is started.
      • As a result of the ATC check run (note that it may take a while to complete), the ATC Problems tab in ADT should display results. In this case, these are the errors and warnings mentioned above, indicating that the code is not cloud-ready in various places. Double-click on the findings for more detailed information.

    d) Cloud-ready development in classic ABAP

    • You have walked through b), created a class, inserted the code from above, and activated the class. The ABAP Language Version is maintained as Standard ABAP in the Properties tab under General.
    • Suppose you want to do cloud-ready development and use ABAP for Cloud Development, i.e. the restricted ABAP language version, in classic ABAP (e.g. an on-premise ABAP system that allows the unrestricted ABAP language version).
    • Open the Properties tab and choose General for this purpose.
    • Choose the Edit... button to the right of the ABAP Language Version property.
    • Select ABAP for Cloud Development in the pop-up window and choose Ok.
    • You will then be able to work with a repository object with the restrictions mentioned above. As a result, the example class with the code snippets will have syntax errors and cannot be activated. In more meaningful, productive development contexts, appropriate refactoring is required.

⬆️ back to top

More Information

⬆️ back to top

Executable Example

zcl_demo_abap_cloud_excursion

💡 Note

  • The executable example ...
    • does not focus - unlike other ABAP cheat sheet examples - on ABAP syntax as such (the other non-Standard-ABAP cheat sheet examples focus on ABAP syntax available in ABAP for Cloud Development), but rather emphasizes released APIs and libraries that provide predefined functionality and can be used in ABAP for Cloud Development. In particular, the Extension Components Library (XCO) is used.
    • covers an arbitrary selection for you to explore. For more detailed information and code snippets, see the SAP Help Portal documentation here and here about XCO. In most cases, the example covers a selection of classes and methods for retrieving information about repository objects. It is more of a "playground" for exploring the APIs with a few snippets of code, and should be seen as an invitation to more in-depth exploration.
  • The steps to import and run the code are outlined here.
  • Disclaimer