I bet Rich Heilman didn’t know what he was getting himself into. You see, writing a book is a crazy amount of work; all of which takes place after you finish your normal work day. It has a negative effect on your family, your health and your general well being. I, on the other hand, have absolutely no excuse. I had been down this path once before and I knew exactly what I was getting into. So the question you might be asking is, “Why an ABAP Book?”
There are already many good ABAP books offered by SAP Press. Our decision to add to this collection is by no means a statement against the quality of the work of those that came before us. Just to be included in the same small group of authors as the likes of Horst Keller is a great honor. The story surrounding the birth of this book and the reasons for both Rich and myself to undertake this endeavor are central to the very reason of why most readers of this blog should even care that another ABAP book is available.
The Incubation Process
The story of how this book got started dates back two years to June of 2005. I was still working at an SAP customer – Kimball International. We were in the middle of our ERP system upgrade from R/3 4.6C to SAP ERP 2004 (NetWeaver 2004). The central concern on my mind was how to help update the team’s development skills in order to take advantage of all the new capabilities in NetWeaver. ABAP is amazingly backwards compatible. That is both one of its greatest blessings and curses. This is so important to ABAP’s continued existence because it allows companies, not the least of which being SAP itself, to continue to leverage its existing investments in business applications. No one talks about massive rewrites to update existing applications so that they can simply survive an upgrade. As ABAP developers we have come to expect a high degree of backwards compatibility.
SAP has only been able to make major changes to ABAP syntax at critical points, like the introduction of Object Orientation or conversion to Unicode. For the most part, developers working on the latest releases can continue to code exactly as they have always done utilizing syntax and techniques that date back to a time before most currently popular programming languages even existed.. They can still create List based output in dialog modules. They never have to write a single line of OO code. However in doing so, they cut themselves off from so many of the possibilities that the new ABAP tools offer and limit the value they bring to their employer. This isn’t even about just making the shift to ABAP Objects – this is about thinking about application design and structure in new ways. This is about better separation of layers of your application so that they are easier to maintain. This is about making sure that the code you write today can be service enabled.
So these were the thoughts that were keeping me awake late at night. How best could I teach existing ABAP developers the new development tools as well as the new design approaches? It just so happens that at the time that this problem was keeping me awake at night, I was also in the processing of working with Brian McKellar on the SAP Press book, Advanced BSP Programming. I was excited about that project and already thinking ahead to future projects. So it was late one night that the two thoughts crossed paths. I lay in bed and envisioned a book that would be rooted in a rich, real-world example – a single example project that would run through the entire book. This way in addition to explaining new technologies, like persistent objects and Web Dynpro, in a vacuum, readers could also see how the planning and design phases of a project have evolved as well.
Readers could explore the thought processes that go into building around the ideas of Model View Controller and planning ahead for Enterprise Services instead of tacking them onto existing developments. They would also see how different technologies interact with one another. I was so excited by the idea that I got out of bed at 3:00AM and scratched down a rough table of contents on a piece of paper. But as fate would have it, I didn’t immediately jump into this project and that piece of paper remained untouched on my desk for sometime.
Fast forward one year to August of 2006. My focused had shifted quite a bit. I now worked for SAP as a NetWeaver Product Manager. I still was kept up late at night by thoughts of how best to help update ABAP developer’s skills sets. Now, thought, instead of worrying about how to help 3 or 4 developers make the transition I was concerned about the entire ABAP development community. I hadn’t had time to even work on the original idea that spawned the table of contents up to this point. SDN days, the community sponsored day of sessions at the beginning of TechEd, was approaching and I really wanted to use this opportunity to return to that idea. I wanted to create a session that would spark discussion around these very topics. I also didn’t want to present this session alone. I wanted it to be firmly rooted in real world experiences – but not just my experiences.
So I created a blog, explained my proposal and asked the community if anyone was interested in co-presenting such a session with me. First to come forward was Rich Heilman. Anyone who claims to spend any time on SDN and doesn’t know Rich obviously isn’t telling you the truth. This was wonderful. Rich is Mr. ABAP and although I didn’t personally know him all that well I assumed (correctly) that anyone that active on SDN must be a good person to work with. Now a 45 minute presentation isn’t really enough time to cover all the topics that I jotted down that night in my table of contents and that Rich had added to the mix.. Even so, we were able to cover a lot of good material in our short session. Just as important however might be one other thing that we were able to reuse from my original sleepless night – the session title. We called our session – Next Generation ABAP Development.
A few weeks after TechEd, Rich was approached by SAP Press. They had seen the abstracts from SDN Days and they were particularly attracted to the session titled – Next Generation ABAP Development. They asked Rich if he was interested in turning the session into a book. Rich came to me and since we had collaborated on the SDN Days session, he wanted to know if I was interested in turning the session into a book. I was delighted that the original idea had come full circle.
So what we ended up with was something amazingly close to the original table of contents. We adjusted it some to include some of the very good ideas that Rich had brought to the table during our work on the SDN Days session. But more important than the technical topics covered, Rich and I really wanted to take our 20+ years of combined ABAP development experience from a customer’s standpoint and bottle it up in an easy to digest format. The structure of this book reflects the workflow of a development project. The first half of the book focuses on creating the data and application logic layers and then service-enabling them. The second half of the book focuses on creating the user interface layers.
Chapter 1: Workbench Tools and Package Hierarchy Before we begin our project, we will review some of the changes and enhancements to the ABAP Workbench. In this chapter, we will look at the new ABAP Editor, the Refactoring Assistant, the new development tools perspectives in transaction SE80, and the new debugger. Lastly, we will create the packages and package hierarchies for the project.
Chapter 2: Data Dictionary Objects In this chapter, we will model the data relationships and build the corresponding Data Dictionary objects. We’ll study the tools for generating table maintenance, creating lock objects, and utilizing foreign keys. We’ll also explore the new technology of strings and binary strings within transparent tables.
Chapter 3: Data Persistence Layer In this chapter, we’ll build the logic that controls the persistence of application data. We’ll start by generating persistent object classes for the underlying data dictionary tables created in Chapter 2. Then, we’ll build a set of business object classes to hide the inner technical details of the Persistent Objects. In addition to the new technology of Persistent Objects, we’ll show you how to use ZIP compression on large strings.
Chapter 4: Consuming a Web Service Not all project data will originate from one centralized system. For example, in the sample application, some data will be stored in a legacy system and accessed remotely via Web Services. In this chapter, we will examine the process for generating a Web Service proxy object and integrating this proxy into the data persistence layer.
Chapter 5: Shared Memory Objects After some analysis, it will become apparent that the sample application has some static data that will be accessed repeatedly. In this chapter, we will describe how you can provide the best performance by structuring the data access for this type of data into an ABAP Shared Memory Object.
Chapter 6: Model Class In this chapter, we will begin to implement the core application logic, which is implemented as a Model Class. This same class will later be used as the business logic layer of all the UI technology examples. This chapter focuses primarily on object-oriented design patterns while introducing techniques for sending email and manipulating XML.
Chapter 7: ABAP and SAP NetWeaver Master Data Management This is the first of our “What-If” chapters. Here, we look at an alternative approach to the project where our master data is modeled and stored in SAP NetWeaver Master Data Management (SAP NetWeaver MDM), instead of the local Data Dictionary. This chapter will focus on how we would alter the data persistence layer to read this data via the SAP NetWeaver MDM ABAP application programming interface (API) instead of directly from the local database.
Chapter 8: ABAP Unit Before building any additional objects on top of the existing application logic, this is a good point in the project to unit test what has been completed. In this chapter, we’ll look at the built-in unit test tool, ABAP Unit, and examine how unit test classes can be integrated directly into the model class.
Chapter 9: Exposing a Model as a Web Service Not all the logic from the sample model class will be exposed via a user interface. Instead, some of the data was designed to be exposed as a Web Service so that it can be accessible to external systems as well. In this chapter, we’ll examine the Inside-Out approach for generating Web Services.
Chapter 10: Exposing a Model as a Web Service Using SAP Net-Weaver Process Integration This is the second of the two “What-If” chapters. In the previous chapter, we looked at the Inside-Out approach of generating Web Services via remote enabled function modules. In this chapter, we’ll look at the world of Enterprise Service Modeling. We’ll show you how the same logic could be modeled in SAP NetWeaver Process Integration (SAP NetWeaver PI) and then implemented as a server proxy in ABAP using the Outside-In approach.
Chapter 11: Classic Dynpro UI/ALV Object Model In this chapter, we turn our attention to user interface logic. In the sample application requirements, there are a group of internal users who are full time SAP GUI users and who need powerful reporting tools. Therefore, we’ll learn how to build a classic Dynpro screen on top of the Model View Controller (MVC), which uses the ALV Object Model for its reporting output.
Chapter 12: Web Dynpro ABAP Since most of the sample application’s users are not SAP GUI users, we’ll look at how you can build a Web Dynpro user interface for these users. This chapter will focus on real world Web Dynpro applications that contain multiple component usages, ALV integration, and table popins.
Chapter 13: Business Server Pages The next user interface use case is for an Internet-facing application. This user interface needs to be highly customized and stateless for scalability. Therefore, in this chapter, we will use Business Server Pages (BSP) in order to show the flexibility they provide for highly customized style sheets and AJAX integration.
Chapter 14: Adobe Forms Adobe Forms technology offers an interesting paper-like alternative user interface. In this chapter, we’ll look at each of the major types of Adobe Forms—print forms, online interactive forms, and offline interactive forms.
Chapter 15: SAP NetWeaver Portal Although we have focused on ABAP as the primary development environment until now, it is also important to see how some of the SAP NetWeaver Portal technologies can be used with the best aspects of ABAP. In this chapter, we’ll explore how to wrap each of our user interface examples in iViews within the SAP NetWeaver Portal and how portal eventing can be used for cross iView communication. We’ll also look at how we can use SAP NetWeaver Visual Composer to build code-free applications that consume ABAP services.
Chapter 16: RSS Feed Using an ICF Service Node In this chapter, we’ll examine how Internet Communication Framework (ICF) Service Nodes can be combined with XML processing in ABAP to produce interesting Web 2.0 type projects. As the final example of the book, we’ll implement an RSS Feed using these technologies.
Chapter 17: The Closing In the final chapter we will look back on the completed project and re-view the most important points of what has been discussed.
After months of work and a journey of nearly two years, our little project is finally ready to go out into the world on its own. We hope that we have created a book that ABAP developers will find useful as well as easily approachable. Rich and I are both very passionate about ABAP in general and we have poured that passion into this book. We hope you enjoy.