Skip to Content
Author's profile photo Michael Keller

I <heart> ABAP

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):

 

 

 

Assigned Tags

      30 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Jelena Perfiljeva
      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. 🙂

      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

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

      Author's profile photo Rashid Javed
      Rashid Javed

      Thanks, this sums up the situation perfectly

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

       

       

       

      Author's profile photo Colleen Hebbert
      Colleen Hebbert

      you could always do something like "STILL ABAP"

       

       

      Author's profile photo Jelena Perfiljeva
      Jelena Perfiljeva

      I'd do "Desperately seeking ABAP" but that would go over the number of characters limit. 🙂

       

      Author's profile photo Colleen Hebbert
      Colleen Hebbert

      "Back to the... ABAP"  (I am stealing Denise's SITkids t-shirt idea)

      Author's profile photo Rashid Javed
      Rashid Javed

      Or better if you end it with a question mark

      "STILL ABAP ???" 🙂

      Author's profile photo Enno Wulff
      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

      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

      For those who need some background music ...

      Author's profile photo Florian Henninger
      Florian Henninger

      So, just posting my twitter handle might be not enough. My son(2) and I are working on a LEGO Duplo solution to jumop into the contest:-)

      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

      Great! I look forward to it 🙂

       

      Author's profile photo Matthew Billingham
      Matthew Billingham

      I did quite a bit of 6502 and Z80A programming in my youth... Ah, nostalgia.

      Author's profile photo Steve Rumsby
      Steve Rumsby

      Z80? Ewww 🙂

      But the 6502, now that was a *nice* instruction set...

      Author's profile photo Matthew Billingham
      Matthew Billingham

      Yeah. Z80 was for the true techy. 😉

      Author's profile photo Michelle Crapo
      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

      Author's profile photo Matthew Billingham
      Matthew Billingham

      SAP wants to go for an object oriented programming model.

      ABAP Objects

      But SAP goes ahead anyway.

      Author's profile photo Former Member
      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>

       

      Author's profile photo Enno Wulff
      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-------------------------------------------------------------------
      Author's profile photo Stefan Schnell
      Stefan Schnell

      Hello Enno,

      I am honored, many thanks.

      Cheers
      Stefan

      Author's profile photo salvi dutta
      salvi dutta

      Amazing Artwork!!!

      Great post at ABAP!

       

      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

      Wonderful artwork! And something to learn ... two things at once ... many thanks  🙂

       

      Author's profile photo Jelena Perfiljeva
      Jelena Perfiljeva

      Wow, this is epic! 🙂

       

      Author's profile photo Wolfram Knan
      Wolfram Knan

      Hello Enno,

      nice post about ABAP!

      With ABAP I always think of Advanced Business Application Language.

      Regards,

      Wolfram

       

      Author's profile photo Shivam Shukla
      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

      Author's profile photo Nabheet Madan
      Nabheet Madan

      Once an ABAPer always an ABAPer.

      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

      Here is a little 8bit inspired work (made with https://make8bitart.com and IrfanView). Have fun.

      Author's profile photo Jelena Perfiljeva
      Jelena Perfiljeva

      There ya go, 3 vintage Mentor shirts. 🙂

       

      Author's profile photo Christopher Solomon
      Christopher Solomon

      "vintage" haha

       

      Author's profile photo Horst Keller
      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( ).​
      Author's profile photo Michael Keller
      Michael Keller
      Blog Post Author

      Sorry for the long time my answer needed. Very nice idea 🙂