1 2 3 4 10 Previous Next

thomas.jung

144 Posts
The other morning I was listening to Episode 17 the RIA Weekly Podcast. The RIA Weekly Podcast is always an excellent show that produces some of the most interesting content on the topic of Rich Internet Applications. This episode in particular caught my attention during the discussion on Enterprise scale applications.  The guest for this episode was Richard Monson-Haefel of Curl, Inc.  If you haven't heard of Curl; it is a programming language and RIA development environment that is focused on the Enterprise. 
Now I don't want to get into some detailed comparison of SAP's development tools to Curl's but Richard brought up a particular topic that resonated with me.  He was discussing how Enterprise RIA applications need to be able to handle very large datasets - his example was 100,000 rows - with very good performance. Looking back on my own experience as an SAP customer for 10 years, I can remember writing more than a few reports that had to chunk through 100,000+ records - usually destined to be ran by accountants. Although there are tools specifically designed to help process very large data sets in real time (for example BIA or Polestar), it is still nice to see just how far you can push the UI framework itself.
So without really wanting to draw comparisons to other tools, I simply wanted to see just how far I could push Web Dynpro ABAP and what kind of performance numbers I could get from it. Interestingly enough, just the other day Todor Petrov of IBSolution GmbH posted a Web Dynpro Java Context – Speed test. I had started building the examples for this blog a day before this blog was posted, so the similarities are pure coincidence - although I do wonder if perhaps we both listened to the RIA weekly podcast.
So I set out to test a large number of records in the Web Dynpro ABAP table UI element.  I wanted to be able to test how long it took to load the records, scroll through the table and sort the table.  I used the performance monitor built into Web Dynpro ABAP (activated by pressing CTRL-ALT-SHIFT-P). The response times are then broken down by roundtrip, server and client rendering.
I recorded videos of all my experiments which are posted below - but not to keep anyone in suspense let's just say that WDA didn't even break a sweat with 100,000 rows so I needed to push things harder and decided to add an option to test with 1,000,000 rows.
After you have watched the video, you will see that even 1,000,000 rows resulted in a really nice user experience - sorting in around 3 seconds.  However the only drawback to this approach is that it does result in a large user session state - since the data is sorted in memory. The second option I decided to try out was using an ABAP Shared Memory object.  ABAP has a very nice technique for table sharing and copy on change that makes it easy to access and use
shared memory objects without expanding your session memory footprint.
Now the only drawback to this approach was that once you sort the table, it still has to be copied into the session memory of the user.  My final experiment was to try and use Context Paging. This Web Dynpro technique allows you to send small chunks of data to the Table UI element and have a server event triggered when more data is needed. This way I can go back to the database and read only small sections of data - yet the user can still sort and navigate through the entire dataSet. The response time was a bit longer for sorts since this option relies on SQL ORDER BY commands, but keeps the response time at quite usable levels while maintaining a tiny session memory footprint.

Since the TechEd 2008 Las Vegas Hands-On Workshop registration opened up today, I thought it was an excellent opportunity to detail one of the sessions that we have been preparing for the event: COMP277 ABAP Development: Update Your Skills to SAP NetWeaver 7.0.

The core idea of this session remains the same as last year's session by the same title (CD251).  We want to create a hands-on session designed for ABAP developers that already have a pretty good 4.6C level of development skill, but have yet to really begin to take advantage of some of the new techniques and technologies in NetWeaver 7.0.  We do this, not just by covering a series of delta features but also by building an integrated exercise from the data model to the service layer and then finally applying a User Interface to it.

What we struggled with last year was being able to fit everything into the 4 hour time slot, but giving the session again this year provided an interesting opportunity.  First of all, we have recorded eLearning versions of last years CD251 materials:
Update Your ABAP Development Skills to SAP NetWeaver 7.0

This really freed us up this year to streamline the materials and cover a lot of extra ground. We had to make a few sacrifices, so I cut out the chapter on Exception Classes and we turned the two exercises on Central Services Class and Service Classes into Instructor Demos/Walkthroughs only.  However even at trimming out these topics, you can still access them from last year's eLearning.  But this makes room to really expand the Enterprise Services and Web Dynpro ABAP sections of the workshop.

So what are some of the new things we were able to add to the Workshop.  Well first of all the session was able to focus on NetWeaver 7.0 Enhancement Package 1. That means plenty of new functionality around Enterprise Services and Web Dynpro ABAP that you will never have seen before even if you have been working on NetWeaver 7.0.

For the Enterprise Services section of the workshop, you will have the opportunity to use the new SOAMANAGER tool that replaces the old WSADMIN, WSCONFIG and LPCONFIG transactions.
SOAMANAGER

The other exciting new exercises come in the Web Dynpro ABAP section of the workshop.  We kept in the basic WDA exercise for anyone who is still just getting introduced to Web Dynpro ABAP.  However we added some new exercises that showcase some of the new features of WDA in NetWeaver Enhancement Package 1.  We will use an Adobe Flex Component within Web Dynpro by using a Web Dynpro Island.  The Island technology allows Web Dynpro developers to easily integrate technologies from other vendors (like Adobe) without having to learn anything specific  around the other technology.  You will get to see just how easy it is to integrate this animated chart into your Web Dynpro ABAP application.
Islands

Finally for Web Dynpro ABAP we will also look at how you can use the Floorplan Manager configuration tool to build complex, real-world Web Dynpro ABAP applications.
Floorplan

The other thing we did with this session, was to leave all the hands-on exercise solutions from last year in the hand-out materials.  So you will get 10 exercises in total, not all of which we will have time to do in the workshop but that gives you something to study when you return home as well. We have a few other surprises in store for this session, but you will have to sign up and attend to learn what they are. 

You might be asking yourself what exactly is the SDN Day Mentors’ Hands-On Workshop (or SDNDMHOW for short). Well to answer that question we really have to back up a few months to Sapphire in Orlando. A group of SAP Mentors were sitting around and discussing the TechEd Community Day with Mark Finnern. We wanted to do something special and new for the Community Day this year.

 

Our discussion quickly turned to ask the question – what is really the most valuable part of the TechEd experience overall? What is it that really sets TechEd apart from any other event throughout the year? Although there is always one jokester in the group that claims the best part of TechEd is the concert/open bar, the consensus was that the truly unique feature of TechEd is the Hands-On Workshops.  It is great to be able to hear an expert talk about a subject and maybe even see a demo, but nothing really compares to the value of being able to use the technology yourself and then ask questions that come to mind out of that usage. The only downside is that you can only reserve a maximum of 2 Hands-On sessions during TechEd. That is at most 8 hours of hands-on experience; assuming you pick two, four hour sessions.

 

And so the SDN Day Mentors' Hands-On Workshop was born.  The idea was to take this best aspect of TechEd and let people have the opportunity to engage in 4 extra hours of hands-on materials!  There will be four mentors – Rich Heilman of SAP, Ed Herrmann of Colgate, Dan McWeeney of Adobe, and myself – each leading one hour of this 4 hour hands-on session.  Each section of the hands-on will be self contained and will cover one major topic.  However if you are able to stay for all 4 of the one hour sessions, by the end you will see how all the pieces begin to fit together.  In the end you get to pick the brains of 4 SDN mentors and have the software in hand while you do it.

 

The four of us all have pretty solid ABAP development backgrounds, so that will be the overall focus of this workshop. But we aren’t going to focus on anything old here.  In fact the majority of the content in this session will be based upon as yet unreleased new functionality for ABAP developers.  We are going to build a basic Sales Order processing transaction – but the technology we are going to explore is going to be anything but basic.

 

So to breakdown the 4 parts of the workshop:

Persistent and Service Objects – Rich Heilman

  • See the latest techniques for build the data access and business logic layers in ABAP        
  • Preview new ABAP development tools 

Adobe Flex Builder – Dan McWeeney

  • Install and run Adobe Flex Builder for creating Flex Components
  • Learn some tricks and tips for Flex Component Development from someone who is also an ABAP developer 

Web Dynpro Islands – Thomas Jung

  • With the new Islands functionality in Web Dynpro, you can embed Adobe Flex Components seamlessly into Web Dynpro
  • We will take one of the Flex Components that Dan detailed in the previous hour and embed it within Web Dynpro ABAP 

Floorplan Manager for Web Dynpro ABAP – Ed Herrmann

  • Learn how to use the new Floorplan Manager to create consistent user interfaces
  • Take the Web Dynpro components from the previous exercise (which contains the Flex Component from the exercise before that) and wrap them altogether with the business logic from the very first session to create one finished application 

As you can see we are going to pack a heck of lot into those four hours.  So if you want to give yourself the development edge by being one of the first people to try out new ABAP development techniques like the Floorplan Manager, Islands, and Web Dynpro Drag and Drop – then this is the session for you. And don’t worry if you have already registered for TechEd, but didn’t add on the community day.  You can always go back and add the community day into your existing registration.  If you are already signed up to attend community day, then you just need to add your name to this wiki page:

https://wiki.sdn.sap.com/wiki/display/Community/SDN+Day+Las+Vegas+2008

 

Unlike the regular TechEd sessions, we can’t provide laptops for everyone, so this will be a bring your own laptop event.  We will be bringing the servers, and the network.  You only need to worry about bringing a laptop that has the SAPGUI installed on it.  Heck, we will even have a few DVDs with the SAPGUI on it floating around the room just in case. It is really important that you sign up in advance on the WIKI so that we can size the session for the number of interested people.  We need to make sure that we have enough room, network connections, server capacity, etc.  If only 20 people sign up on the WIKI and then 100 show up the day of the event and want to attend, then there are going to be people who won’t be able to get a logon to the system.

And now before I finish this blog, I have the promised preview of the workshop exercise that we will be building. All the steps that I discussed above spread out over the 4 hours will result in the application that you see in this video.

Thomas Jung

Community Day Australia

Posted by Thomas Jung Jun 10, 2008

As someone that has been hanging out in the SAP world for a good number of years now, it has been interesting to see the growth and expansion of the community.  Look at SCN - what was started as a website has grown into a real world community. Nothing provides a better example of that than the explosion of SAP Community Days around the world.

Community Day Australia

This upcomming weekend (Sunday June 15th) I get the opportunity to participate in the latest SAP Community Day.  This one will take place in Australia as part of the Mastering SAP Technologies Conference.  So if you are already planning to attending the conference (which takes place at the Hotel Conrad - Gold Coast, Australia) be sure to join us at the Community Day. If you aren't attending in person, we will still have some opportunities for you to see what took place - but more on that in a minute.

Although Mark Finnnern won't be able to be in attendance for this particular Community Day, we wanted to keep close to the Unconference Spirt that Mark has implanted so well into the TechEd Community Days.  So after a short kick off, we will go right into the Speed Networking that Mark is so famous for.  This will give people a chance to get to know each other and hopefully spark some nice, on the spot Birds of a Feather session ideas.

Birds of a Feather

We also already have 3 Birds of a Feather sessions submitted via the WIKI. Check out the page here for more details. But don't worry, there is room for several more BOF.  If you have an idea please add it to the WIKI.  However we will have a whiteboard at the the Community Day so in the best spirit of Unconference we can add sessions right up until the last minute. 

How you can join in (without having to fly to Australia)

Now we all obviously can't drop what we are doing and hop down to Australia for the weekend to join into the fun of the Community Day. However we don't want to leave out community members in other parts of the world.  To that end I'm going to try a couple of different things to share the Community Day Australia experience with the world.

First I'm going to take plenty of pictures.  I will get those pictures uploaded to Flickr just as soon as I can.  You will be able to find them in the SDN and BPX Flickr Groups.

Next I will do my best to live blog the event via Twitter. Now given the stability of Twitter lately, the chances that the website will actually be up is not a given. But with a little luck, Twitter will hold out over the weekend.  You can follow my twitter stream here. I will also start an EventTrack item for the Community Day once I arrive.

Finally, I was very impressed by the quality of the SAP Developer Challange Demo Jam 2008 Webcast from the developer challenge demo jam the other night. It has encouraged me to give Ustream a try.  I'm going to bring my camera equipment and will try to setup something that can run unmanned as I will be busy participating in the day and not running the camera. Given the time difference to Australia and the fact that the event takes place on Sunday, I'm not sure how many viewers I will get.  Then again, I'm not sure I can even get the thing running on site. So this avenue is probably the most questionable. If I can get everything setup and the quality of the stream is good, I will post the URL to this blog on Saturday or Sunday morning.  At the least, I can record the video and post it at a later date.

Update: Sunday June 15th.

We will live stream the Community Day on Kyte.tv in the SDN Channel:

http://www.kyte.tv/ch/9638-sap-developer-network

Introduction 

After a long time away, the ABAP Freak Show returns to SDN. Now we high resolution video - as well as alternative downloads for lower bandwidth and mobile devices. I had asked Craig Cmehil for a suggestion of a video hosting site that would allow for all of these features. He suggested blip.tv.  Shortly after I got the recomendation, I also noticed that Michael Cote of Redmonk was using blip.tv with very nice results for his excellent RIA Weekly podcasts. Let me know how the quality and options work out for everyone.

In this return video we explore the open source library jQuery - which simpliifies JavaScript and AJAX coding.  It turns out this is a perfect fit for BSP and we demo its use in a nice AJAX enabled input autocompleter.  This research was a long time coming as Dan McWeeney had mentioned jQuery to me almost a year ago. I've been wanting to try it out ever since then.  After playing with jQuery for only a short time, I'm already wish I had tried it out sooner.

image

The Video

Supporting Links

Here are some of the links mentioned in the episode as well as the locations where you can download the source code. You can also download the video for offline viewing and access different bandwidth versions of the video.

If the title of this blog sounds familiar, then chances are good that you have attended session CD251 at one of the TechEds this year. This session focuses on introducing new development technologies (Persistent Objects, Enterprise Services, Model Classes, Web Dynpro ABAP), but in a connected, practical example. This way the session could touch on cross-technology topics like transactionality, cross-component usage, and model re-use. The session was designed for developers who have a good 4.6C level of ABAP development skills, but who want to update those skills to the SAP NetWeaver 7.0 world.

So "delta training" for ABAP developers has long been an interest of mine.  I have ABAP 46C to 640 Delta Training in the past and wrote something Next Generation ABAP Development Book as well. I also thought it would make a useful TechEd session - leading to the creation of CD251.  Now I would like to extend much of that same content to a wider audience by offering it as an on-line E-Learning.

There are some obvious advantages to attending a session at TechEd.  You get to participate in the hands-on exercises directly and you can ask questions of your lab partner and of the instructors.  However the main disadvantage is the time limit.  So even if you had a chance to attend CD251, I encourage you to have a look at this E-Learning.  Not restricted by the 4 hour time frame, I was able to dig deeper into certain topics.

This series I did was designed to provide different content than the TechEd session it was built upon; however don't forget that many sessions during TechEd were recorded and are available on the Virtual TechEd 07 page within SDN.

Eventually each chapter of this E-Learning will be added to the SDN E-Learning Catalog.  Once the videos are hosted on SDN I will place links to them here as well.  Until that time, I offer them in a downloadable format.

Introduction
75Mb 1 hour 13 minutes
View Link

Chapter 1 - Persistent Objects
62Mb 1 hour 9 minutes
View Link

Chapter 2 - Class Based Exceptions
27Mb 35 minutes
View Link

Chapter 3 - Advanced ABAP
50Mb 59 minutes
View Link

Chapter 4 - Enterprise Services
40Mb 45 minutes
View Link

Chapter 5 - Web Dynpro ABAP
106Mb 1 hour 50 minutes
View Link

Part 6 of Blog Series: An in depth look at enterprise SOA  Consuming Services with ABAP

Continuing in the second week of the An in depth look at enterprise SOA blog series, we will focus today on the ABAP capabilities to discover and create an application from ESR and Registry.

This video starts off with the process to create a Service Consumer object (former called a client proxy) in NetWeaver 7.1.  We will then perform the same process in NetWeaver 7.0 so that you can study the differences and improvements that have been made. The main area of differences is in the new tool - SOAMANAGER - you use in NetWeaver 7.1 to create  the Logical Port. We will also discuss some of the new capabilities of ABAP 7.1 to work with Asynchronous services and Reliable Messaging. The video will close out with some sample applications that use this Service Consumer object to call the service from within different types of ABAP programs.  Special focus will be paid to using Web Dynpro ABAP and its Service Call Wizard.

Consuming Services with ABAP

This morning, I noticed a twitter post by @monkchips  (http://twitter.com/monkchips) that Google had just released a new Charting API.  I had a little time to kill before my first meeting of the day, so I decided to check this out.
You can of course read all about the new API on Google's website directly:
http://code.google.com/apis/chart/

Here is the short summary, though.  Basically Google is using a URL based interface to allow you to very simply create graphs and charts. This makes it incredibly simple to embed the chart generation directly into your website since it is all URL based. For example you can embed the dynamic URL with all the data to create the chart's data points right into an Image Tag.
Now the chart formatting and data range options are not the most robust. SAP's own IGS (Internet Graphics Server) has a much wider range of options.  However the Google approach does have advantages in its simplicity.  Because the URLs and charts could be accessed from anywhere, you could imbed them in emails and not worry about having to place an IGS server outside your firewall.  Also you don't have to send the actual GIF or PNG file in the email, just the URL.  The actual image will be generated when needed.  Also because of the way the details are embedded in the URL, you get a nice caching mechanism built right into the browser.
On the negative side however, the URL based approach does make some things more difficult.  It means that you have to some strange encoding to your data points to place into the URL.  Also if you mess up any of the parameter names in the URL, you might just end up with a broken image link.  It can make debugging the chart generation a bit of a nightmare.
So what I wanted to do is to make it easier to use the Google Charting API from ABAP.  I wanted to do several things.  First I wanted to make it easier to take an ABAP Internal Table and turn it into the encoded data point format that the API expected in the URL.  For that I create an ABAP class that has two static methods.  The first will take in any ABAP internal table. It lets you specify the column that you want and it will generate a data series off of that column.  The second method loops through a data series and supports the process to encode the data into the three different types of encodings that Google understands - simple, text, and extended.
So these methods make it easy enough to format the data, but you still have a lot of room for errors. To help with that I create a class full of constants to represent all the parameter names and many of the enumerations.  For instance I used thse constants when I created a BSP Extension Wrapper around the API calls. This way the input parameter values get validated at Compile Time.
  
These two elements come together in BSP or Web Dynpro ABAP to make it much easier to generate a Google Chart.  Here is the code that it takes from BSP:
%@page language="abap" %
%@extension name="htmlb" prefix="htmlb" %
%@extension name="zgoogle" prefix="zgoogle" %
<htmlb:content design="design2003" >
  <htmlb:page title=" " >
    <htmlb:form>
    <%
      data: l_data type zgoogle_chart_series_tbl,
            l_sflight type standard table of sflight,
            l_ref type ref to data.
      select * from sflight into table l_sflight where carrid = 'AA'.
      get REFERENCE OF l_sflight into l_ref.
      zcl_google_chart_api_gen=>abap_table_to_api(
        exporting
          I_DATA = l_ref
          I_DATA_COLUMN = 'SEATSOCC'
       changing
         e_CHART_DATA = l_data ).
    %>
      <zgoogle:chart chartType    = "<%= zcl_google_chart_api_const=>chart_type_line %>"
                     encodingType = "<%= zcl_google_chart_api_const=>encoding_type_extended %>"
                     height       = "200"
                     table        = "<%= l_data %>"
                     width        = "300" />
    </htmlb:form>
  </htmlb:page>
</htmlb:content>
And very similar logic could be used from Web Dynpro ABAP.  The main difference here is that you just put the URL into the Context and then bind this context attibute to an image UI element.
method wddoinit .
  data: l_data type zgoogle_chart_series_tbl,
           l_sflight type standard table of sflight,
           l_ref type ref to data.

  select * from sflight into table l_sflight where carrid = 'AA'.
  get reference of l_sflight into l_ref.
  zcl_google_chart_api_gen=>abap_table_to_api(
    exporting
      i_data = l_ref
      i_data_column = 'SEATSOCC'
   changing
     e_chart_data = l_data ).

  data: l_parameters type zgoogle_chart_parameter_tbl.
  field-symbols: <wa_param> like line of l_parameters.
  data: l_url type string.

  try.
      l_url =  zcl_google_chart_api_gen=>generate_url(
           i_parameters = l_parameters
           i_data       = l_data
           i_encoding   = zcl_google_chart_api_const=>encoding_type_extended ).
    catch zcx_google_chart_api.
 endtry.

  data lo_el_context type ref to if_wd_context_element.
  data ls_context type wd_this->element_context.
* get element via lead selection
  lo_el_context = wd_context->get_element(  ).
* get single attribute
  lo_el_context->set_attribute(
    exporting
      name =  `URL`
      value = l_url ).

endmethod.

So if you are intested any of this coding, it is all available for download.I have it listed on its own google code website:

https://cw.sdn.sap.com/cw/docs/DOC-149108

 

I listed the code as a transport file and as SAPlink.  The SAPlink is broken down so you can grab just the core classes, the BSP example, or the Web Dynpro ABAP example.

Have fun!

 

Introduction

In this blog I would like to introduce you to a new community project called - FLOB (Flex on BSP). The purpose of this project is to make it incredibly easy for BSP and ABAP developers to create Adobe Flex based web applications from within SE80 without having to know anything about Flex Builder, ActionScript, or MXML.  

The concept of FLOB is to build a series of BSP Extension Elements (like the SAP delivered HTMLB, XHTMLB, and PHTMLB libraries), except that this new extension will output Adobe Flex instead of HTML and JavaScript. This approach hides any of the differences between Flex and normal BSP development.  This also makes the Flex rendering technology accessible to BSP on WebAS 6.20, NetWeaver 6.40 and NetWeaver 7.0.

Flob Example

Figure 1: FLOB in action

Disclaimer

Before I jump into the detailed description of what FLOB is and what technologies it contains, I have to get one big disclaimer out of the way.  FLOB is NOT an official SAP Product or Project!  It is a community driven Open Source project and not supported or delivered by SAP - in other words don't even think about opening an OSS problem ticket for question about it :).

Although I am an SAP employee, I have been working on FLOB in my own personal time just because I enjoy tinkering with technology.  The source code that I have built has all been done in the customer name range and is now given to the community.  Although I started the project (just out of curiosity around RIAs in general), my hope is that others in the community will participate.

My work on this project also has nothing to do with SAP's strategy for the use of Flex in Web Dynpro.  SAP has a very strong strategy around Web Dynpro as their primary UI technology moving forward.  Web Dynpro is designed to be very flexible in its channel delivery mechanisms.  Already SAP has demonstrated how they are going to offer a full Flex Client and the concept of Flex Islands for Web Dynpro in the near future (actually the flex client for NetWeaver CE 1.0 Visual Composer built Web Dynpro applications is already available).

SAP is correctly putting its resources around its future UI technology.  My experimentation with BSP and Flex is in no way meant to be contradictory to the overall SAP UI strategy of moving to Web Dynpro.  With that said, there are still many customers who are getting value from their existing BSP applications and who may not upgrade to the latest NetWeaver release for some time (in order to have access to Web Dynpro).  This is where a community project like FLOB can help fill this gap and provide a little more value to those existing applications.

Architecture

The whole idea of FLOB was to map the concepts of FLEX development right into BSP.  We start by taking each of the FLEX UI elements and exposing them as BSP Extension Elements.  The UI attributes are mapped to BSP Extension Element attributes. 

Flob at Design Time

Figure 2: FLOB at Design Time inside the BSP Editor

This mapping of concepts doesn't stop with the basics, however.  FLOB also supports BSP Model Binding and Server Side Events. This makes converting an existing BSP application to render Flex almost as easy as doing a find and replace on the Extension Name.

If you have experience with Flex development already, you might be wondering how this is possible from BSP.  Normally in Flex you design applications using a combination of ActionScript and MXML.  These objects are compiled into a binary SWF file and this is what is consumed by the Flash Player in the browser at runtime.

But with FLOB there is no need to work with ActionScript, MXML or to have to compile your development to a SWF.  FLOB uses a small library provided by Adobe called the Flex Ajax Bridge (or FABridge for short). The FABridge makes it possible to interact with a SWF file running in a browser via JavaScript.  Normally people would use the FABridge to adjust the properties of an already rendered Flex application.  For FLOB however we needed to take the FABridge in a little different direction.

You see with FLOB we wanted to control all the UI rendering from BSP Extensions (and within those extensions JavaScript Code).  What we did for FLOB was to build a single SWF file that is actually empty.  It only contains the forward declaration for all libraries that might be referenced by FLOB, but doesn't contain any UI layout or logic. This single, empty SWF (called ABAP_Bridge) is then shared by all BSP applications using FLOB.  It is loaded as a MIME file and then cached by all BSP applications referencing it.  This works just fine because the SWF's contents never really need to change.

With the empty SWF file loaded, all the UI elements are then added according to their description within BSP via JavaScript Code and the FABridge Library.  All of this may sound rather overwhelming.  You have ABAP code that generates JavaScript Code which in turn generates ActionScript which then renders Flex UI elements.  The good news is that I provide this information here mostly as background.  When you work with FLOB and the FLOB BSP Extensions all of this work is done for you and rarely have to see anything of it.  Even if you want to extend the rendering by interacting with the Flex UI elements in your own code, you can do this with simple JavaScript thanks to the FABridge.

Where can you get it

If you have read the blog this far, then you might be wondering where you can get FLOB.  The first Beta of FLOB has been released as an Open Source (MIT Licensing) project on Google Code. You can download the ABAP Transport Files and the first few patches (which added a few critical UI elements and fix a bug specific to FireFox support) from the Google Code Project Page.

Right now we only have transport files, but hopefully with the next Beta release in a few weeks we will had SAPLink Nuggets.  There hit a small problem when we tried to export some of the classes via SAPLink and that is being worked on as we speak.

The Google Code Project site has a place where you can document bugs (remember no OSS problem tickets) and report suggestions.  I would also encourage people to discuss FLOB in the User Interface Technology.

The first release that is available now is an early Beta.  There are still plenty of things that need to be implemented as well as some of the error handling is lacking. Here is a list of the UI elements that are currently supported:

  • Accordion
  • Alert
  • ApplicationControlBar
  • Blur
  • Box
  • Button
  • Canvas
  • CheckBox
  • ColorPicker
  • ComboBox
  • ControlBar
  • DataGrid
  • DataGridColumn
  • DataGridColumns
  • Dissolve
  • Fade
  • FileUpload
  • Form
  • FormHeading
  • FormItem
  • Glow
  • HBox
  • HDividedBox
  • Image
  • Iris
  • Label
  • LinkButton
  • Move
  • NumericStepper
  • Panel
  • PopupWindow
  • RadioButton
  • RadioButtonGroup
  • Reflection
  • Resize
  • RichTextEditor
  • Rotate
  • Slider
  • Spacer
  • StringValidator
  • TabNavigator
  • Text
  • TextArea
  • TextInput
  • VBox
  • VDividedBox
  • Wipe
  • Zoom

Also delivered with the FLOB Extensions are a series of example applications. The main one, zbspext_flex, provides a sample solution for each UI element.  These examples will hopefully help people get started using FLOB right away.

The Future

So what does the future of FLOB hold?  First of all I would really like to release an updated Beta during TechEd Bangalore.  The current plans for this new release are some critical fixes as well as Flex 3.0 Beta 2 support.

Looking farther out I would like to focus on more "pattern elements".  For instance I would like to take some of the popular Custom BSP Extensions (like Value Help and F1 help) and port them over to FLOB.  I would also like to add more functionality to the Data Grid (built in AJAX scrolling) and look at using the Advanced Data Grid.  Also I haven't touched the Graphing and Charting capabilities yet.

Introduction

Last week Alvaro Tejada (Blag) posted a The specified item was not found.. Well I got all caught up in the fun challenge and now here are the results for your downloading pleasure.

What Blag wanted to do was simply flip an existing Bitmap that he was reading out of the BDS (Business Document Store).  The problem that he was facing is that there is no easy method for doing this in ABAP. He tried just reversing the Byte Stream, but quickly found out that this corrupted the image.  A bitmap isn't just stored as a simple data stream - it has header information and a complex structure that must be taken into consideration when doing any manipulations on it.

But many other languages have simple processes for working with Bitmaps - what was wrong with ABAP.  Well these other languages just have libraries that have already been created that abstract the actual process of working with the Bitmap.  These libraries directly expose attributes like the bitmap height and width, so that programmers don't have to know the detailed structure of the Bitmap header.  They also usually have methods to allow for basic manipulation of the Bitmap.

To my best knowledge, no one in ABAP had created such a library.  So while it was perfectly possible to manipulate the Bitmap at a low level in ABAP, it was more tedious than necessarily because it didn't have one of these helper libraries.  Historically ABAP has been all about processing business data, so it hasn't been a big issue that you couldn't flip bitmaps or convert them to grey scale.  But with ABAP being used increasingly for forms output and web pages, this is functionality that might be useful from time to time.  So I decided to take the rough solution that I built for Blag and turn it into a reusable bitmap class.

Bitmap Processing

Before we get into the actual solution of the ABAP Bitmap Library, I thought I would cover some basics of the processing that is going on within the library.  If you are interested in how Bitmaps are stored and processed then keep reading this section. If you really couldn't care less and just want to get started using the library, then skip down to the next section (after all the purpose of creating this library was so people wouldn't have to care how a bitmap works internally).

When I started looking into Blag's problem, I had no real experience with how bitmaps are structured.  So I started my investigation via the internet.  I found lots of good articles on Bitmaps, but probably the best summary of information I found was on Wikipedia.

The linked Wikipedia article does an excellent job of describing the inner layout of the Bitmap - how you have a section for the header information and then a separate section for the data.  It also describes for each pixel is stored.  The color of the pixel (in 24 bits per pixel) is stored as three separate integers - one each for Red, Green, and Blue.  It is important to understand that you can't just manipulate data within the Bitmap at the byte level, but instead the pixel level so you can keep from altering the RGB color as you move bytes around.

The second complexity is that bitmaps are not stored top to bottom within the data area.  Instead the first visible row of data on the screen is stored as the list "line" in the bitmap data area.  All the data is also stored together in a single stream. Therefore for easier processing you generally break the stream down by horizontal row. But because processing is easier if divisible by 4, null-bytes are added to the end of the line to pad the file.  All of these aspects are especially important when trying to rotate a bitmap.

The final complexity that I faced in my processing was that much of the data in the bitmap header was stored as either 2 or 4 byte DWORDs. This meant that I couldn't just cast these byte values into ABAP Integers.  Instead I had to create small macros to change the byte order.

The ABAP Bitmap Library

OK, enough of the deep stuff.  Now it is time to see just how easy we can make working with Bitmaps in ABAP.  For that purpose I have created a Class called ZCL_ABAP_BITMAP.


As you can see there are plenty of methods in this class.  Let's start with the Static methods.  You see the class is marked as Private Instantiation only, therefore the static methods are the only way to create an instance of the class.

Each of the static methods is a path to provide the bitmap source and return an instance of the class.  We have the basic create from bitmap methods like CREATE_FROM_BYTESTEAM (type XSTRING) and CREATE_FROM_BYTETABLE (type standard table of line 255 x). These are generic and support reading the bitmap content from outside the library - providing flexibility.

But I also wanted to make it easy to read the bitmap content from the most common locations. Therefore we have the CREATE_FROM_MIME_REPOSITORY, CREATE_FROM_BDS_GRAPHIC, and CREATE_FROM_FRONTEND_UPLOAD methods. These methods contain the necessarily logic to process images from their various sources.  But many of these sources also support graphic formats other than bitmaps.  Internally this class must process everything in bitmaps, but I wanted to support the conversion from other popular formats (like GIFs and JPEGs).  Luckily this functionality already is provided by the IGS and I just reused the existing class, CL_IGS_IMAGE_CONVERTER, to do the processing.

The method CREATE_FROM_EXT_FORMAT provides the logic to interact with the IGS and perform the conversion.  It supports conversions to/from JPEG, TIFF, PNG, GIF, and of course Bitmap. There is one common static method than can be used inside the class and by calling programs named CHECK_IGS_SETUP to test to see if the IGS is present, configured and of a late enough release level to support image conversion.  That way if there is any problem with the IGS setup, exceptions can be thrown gracefully and the alternative image types simply aren't supported.

There are also similar methods for outputting the bitmap image - including outbound format conversion and Zip compression- GET_CONTENT_ZIP_BYTESTREAM, GET_CONTENT_BYTESTREAM, GET_CONTENT_EXT_FORMAT, and GET_CONTENT_BYTETABLE.

Next are the methods that help to display the bitmap in different environments.  First is the method DISPLAY_IN_SAPGUI.  This is designed for Classic Dynpro. You can pass in the hosting container element - or if you want the ZCL_ABAP_BITMAP to control the image, it can provide its own Dialog Container Control.  This was very helpful for debugging, because it makes it possible to test the class and display the results without any wrapper program. 

The other display helper method is the PUSH_CONTENT_INTO_ICM_CACHE.  This places the content for the image into the ICM content cache for the specified amount of time and returns the unique URL to this cached object.  This is a great way to manipulate the image, and then display it in an image element using BSP or Web Dynpro ABAP without ever having to permanently store the image.

We have one method, GET_HEADER_INFORMATION, that reads the Bitmap header and returns all the most important information (like width, height, color depth, etc). 

Finally we have the really fun methods: the transformations. These are the methods that directly manipulate the Bitmap Content.  The names of the methods do a rather good job of describing exactly what they do to the image: TRANSFORM_ROTATE_CLOCKWISE, TRANSFORM_ROTATE_COUNTER_CLOCK, TRANSFORM_FLIP, TRANSFORM_MIRROR, TRANSFORM_INVERSION, TRANSFORM_GREYSCALE.

Test Applications

No library would really be complete without some nice test and demo applications. For this purpose I built two different test suites.  The first is classic dynpro based.  The application lets you load images from the Frontend.  It displays the results using the DISPLAY_IN_SAPGUI method and has buttons to activate the Transformations.

Just to demonstrate how (hopefully) easy this class is to use, here is the source code of the classic dynpro test application:

REPORT zabap_bitmap_test.
DATA bitmap TYPE REF TO zcl_abap_bitmap.
DATA custom_container TYPE REF TO cl_gui_custom_container.
DATA okcode TYPE syucomm.
START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'MAIN'.
SET TITLEBAR '100'.
IF custom_container IS INITIAL.
CREATE OBJECT custom_container
EXPORTING
container_name = 'CUSTOM_CONTAINER'.
ENDIF.
IF bitmap IS INITIAL.
TRY.
bitmap = zcl_abap_bitmap=>create_from_frontend_upload( ).
bitmap->display_in_sapgui(
i_container = custom_container ).
CATCH zcx_abap_bitmap .
ENDTRY.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
TRY.
CASE okcode.
WHEN 'BACK' OR 'CANCEL' OR 'EXIT'.
LEAVE PROGRAM.
WHEN 'NEW'.
bitmap->free( ).
CLEAR bitmap.
WHEN 'CLOCK'.
bitmap->transform_rotate_clockwise( ).
bitmap->refresh_sapgui_display( ).
WHEN 'COUNTER'.
bitmap->transform_rotate_counter_clock( ).
bitmap->refresh_sapgui_display( ).
WHEN 'GRAY'.
bitmap->transform_greyscale( ).
bitmap->refresh_sapgui_display( ).
WHEN 'INVERSE'.
bitmap->transform_inversion( ).
bitmap->refresh_sapgui_display( ).
WHEN 'MIRROR'.
bitmap->transform_mirror( ).
bitmap->refresh_sapgui_display( ).
WHEN 'FLIP'.
bitmap->transform_flip( ).
bitmap->refresh_sapgui_display( ).
ENDCASE.
CATCH zcx_abap_bitmap .
CLEAR okcode.
ENDTRY.
CLEAR okcode.
ENDMODULE. " USER_COMMAND_0100 INPUT

But the more full featured test application is actually the Web Dynpro ABAP version.  It has all the same functionality to load existing images, display them, and perform transformations:

However it also has functionality to export the manipulated image in several formats (as well as zip compression):

Downloads

Now for the downloads.  I have broken them out into separate parts and pieces so people can grab just what they need.

Just a short time ago, Craig announced the introduction to SDN TV - the next evolution! This new version uses Kyte.tv as the tool to produce and share video blogs and other multimedia content. It is easy to view the content for SDN or BPX directly on Kyte or directly here on the SAP Network via the SDN TV page.

So with such an easy way to produce and host content, it seemed that I no longer had any excuse not to work on something that I had in mind for a while.  I've wanted to do some sort of regular podcast or video blog around ABAP for some time.  Now seems like the perfect time.  So this past weekend I posted the first episode of the ABAP Freak Show.

The idea is to produce a regularly scheduled show (hopefully weekly) where we just discuss anything ABAP.  In the first episode I give a little introduction to what ABAP is. I then pick one of the questions that I received during the week and share the answer.  This week I talked about Change Objects. Just about any ABAP related topic is fair game.

Although I didn't use it in the first episode, I like the idea that we can mix screen captures (although low resolution) in with the episode.  I promise to use this in the next episode as we take a sneak peak at some of the cool ABAP content that we are going to be showing at the SDN Community Day in TechEd Las Vegas and Munich.

Since I'm going for a regular show schedule, I going to try to create and post the each episode on the weekends. You can always subscribe to the SDN Channel RSS Feed if you want to know when new episodes are available.  I will also "announce" new episodes on Twitter.

Now is the part where I need your help. I want to know what everyone would like to see on future episodes.  Let me know what topics or questions you would like to see. Also if you are interested in hosting an episode of the show yourself, that can be easily arranged. 

image

 

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.

 

SDN Days

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. 

 

Book Content

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.

 

Closing

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.

Thousands of SDN and BPX members will be arriving in Atlanta in just a little over a week for Sapphire/ASUG Spring Conference. For anyone local to the Atlanta area or arriving to the event a bit early (Saturday Night), perhaps you would be interested in joining a little unoffical SDN Meetup.  We knew that once the Conference gets started on Sunday that everyone's schedules will fill up real fast.  That is why we thought a Saturday night gathering might work out nice.  We aren't talking about anything fancy or official (meaning everyone pays their own bar tab); just something along the lines of what Tobias was suggesting in this Local Community Meetings?.  I've already added the event to the SAPcamp page on the WIKI.   So far I know that Rich Heilman and I will be there Saturday night because we presenting earily Sunday morning at one of the Pre-Conference Seminars.  It also looks like Craig Cmehil will also be there and joining us.   If you are interested in participating, feel free to contact any one of the three of us.  All of our contact information is in our SDN Business Cards.  We are also open to suggestions as to a good meeting place that is close to the convention center/hotel area. 
Thomas Jung

Trying out AJS

Posted by Thomas Jung Mar 13, 2007
After seeing the first blog on BSP Meet your AJAX Framework: AJS, the cool new AJAX framework that was posted by Daniel McWeeney; I just had to drop what I was doing and give it a try.  I had gotten a little sneak peak at the tool from Dan and Ed last week, but I was still really excited to finally get my hands on it.  Although I have done AJAX from BSP before, having a nice framework to make things easier and hide some of the nasty JavaScript is certainly a welcome addition.    The first thing I did was build a little test application of my own so that I could try out the drag and drop and then some of the visual effects.   The next thing I got thinking about was how this project was great, but I would also love to have an additional layer of BSP Extension Elements written on top of the helper methods.  That is the beauty of the open source model thought isn't it -  if there is something you would like to add on top of a project there is no reason not to start a new project to do so.  Some of the advantages of having a BSP Extension Library in addition to what has already been created is that you would get syntax checks on the element attributes right in the BSP editor:image If your support package level in your system is fairly up to date, you would also get completion help on the extension elements and their attributes:image So just to start to play around I created a single BSP Extension Element wrapper for the Visual Effects section of the library.  It is really just a start, but I figure why wait until the whole thing is done to post it.  I put this one Extension Element out in a Google Project via SAPlink and then maybe other interested people might want to add their own wrapper elements.    I also put my test application for the element wrapper out there.  It lets you try out all the visual effects.  It even applies the effects to a HTMLB:tableView:image I know this only scratches the surface of what is possible with the library these guys have built, but this is just the first day it was released.  I'm sure the community is going to come up with all kinds of cool ways to put this to use.  Here is a link to the google code project where you can download this first test SAPlink Nugget or contribute elements of your own:http://code.google.com/p/abapjs-extensions/
Think back to what life was like before SDN. As developers/technology workers, how many contacts did you have that also worked with SAP. You might have know a few workers for other regional companies using SAP. If you were really active in one of the national level user groups, you might also have picked up a few good contacts there.    But for the most part, we worked in a vacuum.  If you couldn't find an answer to a question within your company, your small circle of contacts or OSS; you were pretty much out of luck.  Of course that all changed once SDN came along.  The interconnectivity that we all take for granted thanks to SDN is its single greatest gift to the SAP Community.  But why be limited to just the virtual connectivity that we get via the SDN Website.  SDN can be so much more than just a website, or a forum or a blog; and SDN Days at TechEd is the opportunity to get out and experience what SDN is like in the physical world. image Mark has posted (SDN Day Sessions in Amsterdam October 17 the session topics.  If you look through them you will find that there is a little something for everyone. There are opportunities for networking and open discussions about technical topics. Even if you aren't in the social networking aspects of SDN, there are some pure educational sessions as well.  After having been to SDN Days in Las Vegas, I am personally really looking forward to attending again in Amsterdam.  SDN days has a very different feel overall when compared to the rest of TechEd.  From the opening networking opportunities to the way that new sessions can be added throughout the day on the whiteboard schedule; you can see that this isn't you typical conference event.  Let me give you a personal example.  In Las Vegas I hosted an MDM Roundtable discussion session.  Going into the day I wasn't really sure what to expect.  Sure I'm used to giving presentations and teaching hands-on sessions by now, but this was really an unknown.    I ended up having quite a diverse crowd for the session. I had people currently implementing MDM, some who were about to get an implementation started, and a few people who were just curious about MDM.  After I gave my 10 minute song-and-dance PowerPoint to kick things off, the real fun started.  The audience participation kicked in and attendees started sharing experiences and questions.  This is the kind of experience that you just aren't going to get elsewhere.  But SDN Days isn't just about learning, networking, or even seeing cool demos.  It is also about having a little bit of fun.  We all work hard, right.  Why shouldn't take an evening to relax just a little before the start of the hectic TechEd week?  SDN Days in Las Vegas gave us just such an opportunity.    Whether you were tired from the day and just wanted a good meal or if you were adventurous and wanted to try your hand at some dancing, the Hofbraeuhaus in Las Vegas sure did rise to the occasion.  I have included a few pictures of the fun that was had by all at the end of this weblog.  I'm sure that equal amounts of fun will be had at "boom" Amsterdam!.   Perhaps we can even get Craig to entertain us:image Finally those of you who are planning to make the trip to Amsterdam and SDN Days - if you are like me and this will be your first trip to Amsterdam, might I suggest a very nice resource that I found on the web with lots of information about the city for travelers:http://homepages.cwi.nl/~steven/amsterdam.htmlimage imageimageimageimageimageimageimage

Filter Blog

By date:
By tag: