Skip to Content

Dear community, after a sunny weekend, I can happily announce that spring has arrived in Germany. Suitable for that event I would like to talk about feelings. In particular about the feelings for the programming language we use every day, the 6502 assembly language. Just a joke, of course it’s ABAP 🙂

I hope you love it as I do. A lot of time has passed since the first report I saw. ABAP has changed and has always surprised me. Compared to some bad moments, there were an incredible number of great moments and always something new to discover. I think everyone of you knows this feeling very well when you write your source code and it works. Or the pleasure of having searched for an error for hours and finally found it. Of course this does not just apply to ABAP but to any programming language (especially if you spend some time with brain<censored>). In the case of ABAP, it definitely helped me a lot to understand the SAP ERP software because I could take a look behind the scenes. In short, it’s great to work with it. By the way, one can also live from his work as ABAP developer 🙂

So here is my idea: Show your enthusiasm for ABAP in any creative way. Draw a picture, write a little program, work with LEDs, use LEGO bricks or whatever you can think of. Alone or in a team. The most important thing is you have fun. And please share your artworks here (thank you in advance).

Here is my contribution made of HAMA beads (not only LEGO is now for adults):

 

 

 

To report this post you need to login first.

30 Comments

You must be Logged on to comment or reply to a post.

  1. Jelena Perfiljeva

    Saying I love ABAP feels like coming out of the closet these days. 🙂

    I’ll have to take a picture of my old Mentor shirt when I get home. Last year, I replaced “ABAP 4EVER” with my name but perhaps I should get it back next year. It didn’t stop anyone from confusing me with Tammy Powlas anyway, so what the heck. 🙂

    (8) 
    1. Michael Keller Post author

      Yeah, don’t mix “I love ABAP” with phrases like “object-oriented”, “test driven development” or something similar. Well that escalated quickly … 😉

      (6) 
  2. Enno Wulff

    ABAP´s in the air everywhere I look around.

    ABAP´s in the air every bit and every  byte

    And I don’t know if I’m doing rubbish

    Don’t know if I’m using CASE

    But it’s something that I must debug in

    And it’s there when I look in your code.

     

    http://abap.rocks

    (7) 
  3. Michelle Crapo

    Still Loving ABAP. I have a great job and do what I love. What more could I ask for? Oh yes, to be a billionaire. But that isn’t happening in this lifetime.

    Whatever else – ABAP is still being used in SAP code. So….  You still have to know it. Along with everything else. No being ashamed of liking ABAP. It is a “sweet”, “cool”, “wicked”, Language.

    Nice well thought out blog. With everything else going on – it’s great to see an ABAP blog.

    Michelle

    (1) 
  4. Former Member

    I love #ABAP too, but it’s getting more and more difficult to do it in the US.  In many cases contract rates are on par or below salary levels!!  There are some good gigs and projects out there but they are harder to find.  Some roles that are getting more popular are requirements gathering/spec writing, managing offshore teams and doing fixes in hypercare.  Of course this does not offer the satisfaction of doing rich development.

    Right now I’m performing an odd role of test lead / cutover coordinator / anything that’s needed.  I’ve only had some minimal ABAP work.  Hopefully there will be opportunities for more.

    Feel free to reach out to me on social media.

    Best,

    Glenn Allen
    <private information removed by moderator>

     

    (0) 
  5. Enno Wulff

    What could I have done in the time for doing this…? ::D

    I LOVE ABAP

    dedicated to Stefan Schnell 😉

    REPORT z_draw_heart_with_autoit2.
    
    CLASS draw DEFINITION.
      PUBLIC SECTION.
        DATA autoitx TYPE ole2_object.
        DATA current_x TYPE i VALUE 100.
        DATA current_y TYPE i VALUE 400.
        METHODS constructor.
        METHODS is_activex RETURNING VALUE(result) TYPE boolean_flg.
        METHODS oleflush.
        METHODS up.
        METHODS down.
        METHODS moveto IMPORTING x TYPE i OPTIONAL y TYPE i OPTIONAL.
        METHODS draw_a.
        METHODS draw_b.
        METHODS draw_p.
        METHODS draw_i.
        METHODS draw_space.
        METHODS draw_heart.
    ENDCLASS.
    
    CLASS draw IMPLEMENTATION.
      METHOD constructor.
        "-Begin-----------------------------------------------------------------
    
        "-TypePools---------------------------------------------------------
        TYPE-POOLS ole2.
    
        "-Variables---------------------------------------------------------
        DATA result TYPE i VALUE 0.
        DATA strtext TYPE string.
    
        "-Main--------------------------------------------------------------
        IF is_activex( ) = 1.
    
          CREATE OBJECT autoitx 'AutoItX3.Control'.
          IF autoitx-type = 'OLE2'.
    
            "-Set AutoItX option------------------------------------------
            CALL METHOD OF autoitx 'Opt'
              EXPORTING
                #1 = 'SendKeyDelay'
                #2 = 50.
            oleflush( ).
    
            "-Start paint via Windows run menu----------------------------
            CALL METHOD OF autoitx 'Send' EXPORTING #1 = '{LWIN}'.
    *            Call Method Of AutoItX 'Send' Exporting #1 = 'u'.
            CALL METHOD OF autoitx 'Send' EXPORTING #1 = 'mspaint'.
            oleflush( ).
            CALL METHOD OF autoitx 'Send' EXPORTING #1 = '{ENTER}'.
            oleflush( ).
            CALL METHOD OF autoitx 'WinWaitActive'
              EXPORTING
                #1 = 'Unbenannt - Paint'
                #2 = ''
                #3 = 10.
    
            "-Maximize the window-----------------------------------------
            CALL METHOD OF autoitx 'Send'
              EXPORTING
                #1 = '{ALTDOWN}{SPACE}{ALTUP}'.
            CALL METHOD OF autoitx 'Send' EXPORTING #1 = 'x'.
            oleflush( ).
            up( ).
            moveto( ).
    
          ENDIF.
    
        ENDIF.
      ENDMETHOD.
    
      "-SubRoutines---------------------------------------------------------
    
      "-Function IsActiveX------------------------------------------------
      "-
      "- Get the possibility of ActiveX on the presentation server
      "-
      "-------------------------------------------------------------------
      METHOD is_activex.
    
        "-Variables-----------------------------------------------------
        DATA hasactivex(32) TYPE c.
    
        CALL FUNCTION 'GUI_HAS_OBJECTS'
          EXPORTING
            object_model         = 'ACTX'
          IMPORTING
            return               = hasactivex
          EXCEPTIONS
            invalid_object_model = 1
            OTHERS               = 2.
    
        IF sy-subrc = 0 AND hasactivex = 'X'.
          result = 1.
        ELSE.
          result = 0.
        ENDIF.
    
      ENDMETHOD.
    
      "-OLEFlush----------------------------------------------------------
      "-
      "- Automation controler flush
      "-
      "-------------------------------------------------------------------
      METHOD oleflush.
        CALL FUNCTION 'AC_SYSTEM_FLUSH' EXCEPTIONS OTHERS = 1.
      ENDMETHOD.
    
      METHOD up.
        CALL METHOD OF autoitx 'MouseUp' EXPORTING #1 = 'left'.
      ENDMETHOD.
    
      METHOD down.
        CALL METHOD OF autoitx 'MouseDown' EXPORTING #1 = 'left'.
      ENDMETHOD.
      METHOD moveto.
        ADD x TO current_x.
        ADD y TO current_y.
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = current_x
            #2 = current_y.
    
        oleflush( ).
    
      ENDMETHOD.
    
      METHOD draw_a.
    
        DATA(old_x) = current_x.
        DATA(old_y) = current_y.
    
        down( ).
        moveto( x =   0 y = -180 ).
        moveto( x =  20 y =  -20 ).
        moveto( x =  10 y =    0 ).
        moveto( x =  20 y =   20 ).
        moveto( x =   0 y =  200 ).
        moveto( x =   0 y = -100 ).
        moveto( x = -50 y =    0 ).
        up( ).
    
        current_x = old_x + 100.
        current_y = old_y.
        moveto( ).
    
      ENDMETHOD.
    
      METHOD draw_b.
    
        DATA(old_x) = current_x.
        DATA(old_y) = current_y.
    
        down( ).
        moveto( x =   0 y = -200 ).
        moveto( x =  40 y =    0 ).
        moveto( x =  10 y =   10 ).
        moveto( x =   0 y =   80 ).
        moveto( x = -10 y =   10 ).
        moveto( x = -40 y =    0 ).
        moveto( x =  40 y =    0 ).
        moveto( x =  10 y =   10 ).
        moveto( x =   0 y =   80 ).
        moveto( x = -10 y =   10 ).
        moveto( x = -40 y =   0 ).
    
        up( ).
    
        current_x = old_x + 100.
        current_y = old_y.
        moveto( ).
    
    
      ENDMETHOD.
    
      METHOD draw_p.
        DATA(old_x) = current_x.
        DATA(old_y) = current_y.
    
        down( ).
        moveto( x =   0 y = -200 ).
        moveto( x =  30 y =    0 ).
        moveto( x =  20 y =   20 ).
        moveto( x =   0 y =  80 ).
        moveto( x = -20 y =   20 ).
        moveto( x = -30 y =    0 ).
        up( ).
    
        current_x = old_x + 100.
        current_y = old_y.
        moveto( ).
    
      ENDMETHOD.
    
      METHOD draw_i.
        DATA(old_x) = current_x.
        DATA(old_y) = current_y.
    
        down( ).
        moveto( x =  -10 y =  0 ).
        moveto( x =   20 y =  0 ).
        moveto( x =  -10 y =  0 ).
        moveto( x =   0 y = -200 ).
        moveto( x =  -10 y =  0 ).
        moveto( x =   20 y =  0 ).
        moveto( x =  -10 y =  0 ).
        up( ).
    
        current_x = old_x + 100.
        current_y = old_y.
        moveto( ).
    
      ENDMETHOD.
    
      METHOD draw_space.
    
        current_x = current_x + 100.
        moveto( ).
    
      ENDMETHOD.
    
      METHOD draw_heart.
    
        DATA(old_x) = current_x.
        DATA(old_y) = current_y.
    
        "Select "more forms"
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = 615
            #2 = 110.
        down( ).
        up( ).
    
        "Select "heart"
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = 490
            #2 = 130.
    
    
        down( ).
        up( ).
    
        current_x = old_x.
        current_y = old_y.
        moveto( ).
    
        down( ).
        moveto( x = 150 y = -200 ).
        up( ).
    
        "Select "red"
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = 945
            #2 = 60.
        down( ).
        up( ).
    
    
        "Select "draw"
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = 450
            #2 = 70.
        down( ).
        up( ).
    
        "Select "black"
        CALL METHOD OF autoitx 'MouseMove'
          EXPORTING
            #1 = 880
            #2 = 60.
        down( ).
        up( ).
    
        current_x = old_x + 150.
        current_y = old_y.
        moveto( ).
    
      ENDMETHOD.
    ENDCLASS.
    
    
    
    START-OF-SELECTION.
      DATA(logo) = NEW draw( ).
    
      logo->draw_i( ).
      logo->draw_heart( ).
      logo->draw_space( ).
      logo->draw_a( ).
      logo->draw_b( ).
      logo->draw_a( ).
      logo->draw_p( ).
    
    
      "-End-------------------------------------------------------------------
    (5) 
  6. Shivam Shukla

    Hi ,

     

    Just read it & i can’t imagine this how much powerful abap lang is ?  great to see such kind of implementation thanks for sharing.

     

    Thanks,

    Shivam

    (2) 
  7. Horst Keller

     

    DATA(nogo) = `I don't like ABAP`.
    
    cl_demo_output=>new(
      )->write_html(
        replace( val = nogo
                 regex = nogo
                 with = `$0, ` && replace( val = nogo
                                           sub = cl_abap_codepage=>convert_from( 
                                             `646F6E2774206C696B652041424150` )
                                           with = ' &hearts;  it!' ) )
      )->display( ).​
    (2) 

Leave a Reply