CharlieShen

新人,大家多关照啦@_@

  博客中心 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  3994 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks
Cached @ 2025/4/26 16:15:57Control ASP.skins_cogitation_controls_blogstats_ascx
<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

留言簿(14)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

Cached @ 2025/4/26 16:15:57Control ASP.skins_cogitation_controls_singlecolumn_ascx

2007年9月6日 #

Introduction

Last week Alvaro Tejada (Blag) posted a weblog posing the requirement to flip a bitmap using ABAP. 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.

posted @ 2007-09-06 19:31 CharlieShen| 编辑 收藏

Introduction

Last week Alvaro Tejada (Blag) posted a weblog posing the requirement to flip a bitmap using ABAP. 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.

posted @ 2007-09-06 19:31 CharlieShen| 编辑 收藏

Introduction

Last week Alvaro Tejada (Blag) posted a weblog posing the requirement to flip a bitmap using ABAP. 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.

posted @ 2007-09-06 19:30 CharlieShen| 编辑 收藏

Just a short time ago, Craig announced the introduction to the next evolution of SDN TV. 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. 

Thomas Jung is an SAP NetWeaver Product Manager focusing on Custom Development - including ABAP, MDM APIs, and NetWeaver Voice.

posted @ 2007-09-06 19:29 CharlieShen| 编辑 收藏

Just a short time ago, Craig announced the introduction to the next evolution of SDN TV. 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. 

Thomas Jung is an SAP NetWeaver Product Manager focusing on Custom Development - including ABAP, MDM APIs, and NetWeaver Voice.

posted @ 2007-09-06 19:28 CharlieShen| 编辑 收藏

Premise

When we launched the SDN 4 years ago, we didn't quite know what to expect and whether we would be successful in creating a vibrant community. The line that we knew we had to keep was to enable you - our community - and to give you - our partners and customers - the opportunity to succeed with SAP software through SDN. And this can only be done by providing you with the collaborative online tools through our platform and by allowing you to address issues, to share your thoughts, to express your wishes, and in return to show you that we care.

Thanks to your contributions, your enthusiasm and your feedback, we have today two communities with more than 800,000 registered users that help each other, make projects successful, answer forum questions within a few minutes, build up FAQs, How-to papers or just hang out at Community days and TechEds in the SDN clubhouse (and drink tons of coffee at our expenses).

This is also the time to think of where the communities are heading and what more of value we can add. Seeing the original SDN as the stage 1.0 of our community network, the launch of the BPX community a year ago and the technical separation brought us to community version 2.0. Even though there were the occasional bumps, we still cannot believe seeing the communities working so well. Each day working with the community is differently enjoyable and remunerating. It would be wrong to sit back and just watch and get into a routine. We need to continue improving, to make your job easier and more fulfilled. And after all, though we all earn money with our work, we also want to keep this work fun and exciting.

Next stages of our community

What's next? How would the next stage of a maturing community network look like? We talked a lot to you, our users, partners, customers and analysts about how they see the SDN/BPX communities and what they would like being offered through the community network.

The overwhelming wish was something like a software subscription program, where you can subscribe to software for an annual fee for development, for testing and for evaluation.

Subscription program

Well, we complied, and bring you a very interesting program and - just to give you the full honest picture - the so far most sophisticated project for the colleagues on the community network and adjacent teams: we introduce the SDN NetWeaver Subscriptions program.

Through this subscription program we give you access to the full NetWeaver stack - for an annual and as we believe pretty reasonable subscription fee. When we say full NetWeaver stack, we really mean full. Developer Studio, Development Infrastructure, ABAP stack, BI, XI, MDM, Portal, VC etc. are all included. Once you subscribe, you'll not only get a box with the DVD ROMS, but also access to the Service Marketplace, the OSS, the Enterprise Services Workplace and the Virtual TechEd sessions, as well as some other goodies like premium presence in the forums.

This program is a signal to the changes the community faces. We are reaching out to the strongly growing segment of small and midsize partners, creating an opportunity to realize their business ideas in the SAP environment with SAP tools.

Feel free to register now, so that you are under one of the front runners in this program.

We need your opinion

And don't hesitate to give us your feedback. In fact, we welcome feedback about this program. Is this what you need? Is there something you'd want us to add to the program? Is there something that we screwed up? Let us know. Without you telling us, we won't know. You can directly email me, I take the task of listening to you and compiling your feedback.

But first: enjoy and discover the new program. Stay tuned for the next days...

Mario Herger Was a developer and product manager for the Composite Application Framework. Worked for 2 years as development manager for the Analytics team in Palo Alto, respondible for UDI and Visual Composer BI Kit. Is now a member of the SDN/BPX Community team.

posted @ 2007-09-06 19:26 CharlieShen| 编辑 收藏