<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6297557</id><updated>2025-10-22T07:58:22.545+01:00</updated><category term="atp"/><category term="abap"/><category term="development"/><category term="sap"/><category term="fun"/><category term="apo"/><category term="code"/><category term="sdn"/><category term="tpvs"/><category term="pal"/><category term="book"/><category term="debug"/><category term="quote"/><category term="rant"/><category term="oss"/><category term="python"/><category term="bop"/><category term="dp"/><category term="life"/><category term="macros"/><category term="mobile"/><category term="web2.0"/><category term="SOA"/><category term="analytics"/><category term="apolemia"/><category term="blogs"/><category term="hotoss"/><category term="interview"/><category term="news"/><category term="rfc"/><category term="usability"/><category term="Funny SAP"/><category term="android"/><category term="badi"/><category term="concept"/><category term="control"/><category term="data visualization"/><category term="django"/><category term="enterprise2.0"/><category term="excel"/><category term="gardena"/><category term="geocoding"/><category term="google"/><category term="java"/><category term="javascript"/><category term="jquery"/><category term="lego"/><category term="mashup"/><category term="microsoft"/><category term="modeling"/><category term="onsap"/><category term="optimizers"/><category term="osx mac"/><category term="pass"/><category term="perl"/><category term="phonegap"/><category term="ppds"/><category term="rails"/><category term="saplink"/><category term="scm"/><category term="screen"/><category term="tip"/><category term="training"/><category term="transaction"/><category term="userland"/><title type='text'>Apolemia</title><subtitle type='html'>On SAP SCM/APO, life and tech</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>160</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6297557.post-3928360994086449411</id><published>2018-03-24T15:51:00.001+00:00</published><updated>2018-03-24T15:51:13.722+00:00</updated><title type='text'>My wrap-up after a NLP machine learning competition</title><content type='html'>&lt;p&gt;I recently participated in a natural language processing (NLP) machine learning competition, and there were some interesting learning’s that I think are worth sharing. NLP is a bit different from my usual topics but I think machine learning is the most interesting thing currently happening in supply chain software and working with text is an important part of machine learning.&lt;/p&gt;

&lt;p&gt;The competition was &lt;a href=&quot;https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge&quot;&gt;Jigsaw Toxic Comment&lt;/a&gt;, with over 4500 teams competing and my team got a great 5th place. The goal was to build a classification system able to classify different comments with given types &quot;toxic/insult/obscene/etc&quot; or as clean.&lt;/p&gt;

&lt;p&gt;The best results were 0.9885 AUC which is impressive, it is another task were the machine is at the same level as humans.&lt;/p&gt;

&lt;p&gt;To achieve these results all top teams used deep learning, the best models were almost always recurrent neural networks (LSTM or GRU) using pre-trained word vectors. In case you don&#39;t know, word vectors are mappings between words and large dimensional vectors (300 dimensions is common), where these vectors result from training in very large collections of text (like wikipedia). In the word vector space, words with similar meaning have close vectors and to some extend the distance between words in the space relate to the concepts. One typical example is that if we take the vector for the work &quot;King&quot; and we add the vector for &quot;Woman&quot; we get a vector that is the closest to the word &quot;Queen&quot;. This last example is known to be a bit cherry-picked and word vectors are not yet so perfect but it is for sure one of the best tools in NLP. And there are &lt;a href=&quot;https://fasttext.cc/&quot;&gt;many&lt;/a&gt; &lt;a href=&quot;https://nlp.stanford.edu/projects/glove/&quot;&gt;good&lt;/a&gt; &lt;a href=&quot;https://radimrehurek.com/gensim/models/word2vec.html&quot;&gt;vectors&lt;/a&gt; to choose from, so as always in machine learning, combining all of them leads to a better result.&lt;/p&gt;

&lt;p&gt;One interesting fact from the data is that even though some word vectors have more then 2 million words, we could find in the comments texts a very large number of words missing in the vectors (around 30%). It is because of bad spelling, using foreign language words and in many cases it is on purpose that people write &quot;heeeyyyy&quot;, &quot;d0n&#39;t&quot; or &quot;bs&#39;ing&quot;. One thing that helps for these cases are subword embeddings like &lt;a href=&quot;https://fasttext.cc/&quot;&gt;Fasttext&lt;/a&gt; that do training in parts of words and based on that can build vectors for unknown words by using the smaller pieces.&lt;/p&gt;

&lt;p&gt;Since the comments are full of misspelled words and non-letter characters it could be thought that doing a lot of pre-processing to clean the text and fix the misspellings would improve the results. This was not the case in my experience and other teams also reported the same conclusion. Combination of subword embeddings and the ability of neural networks to internally learn the necessary filtering seem to be better.&lt;/p&gt;

&lt;p&gt;Deep learning systems are hungry for data, and if we give them more data we will probably get better results. An interesting trick I learned was that we could easily use the translation technology to get some small variations of the texts. For example using the &lt;a href=&quot;http://textblob.readthedocs.io/en/dev/&quot;&gt;TextBlob&lt;/a&gt; Python package it is as easy as doing&lt;/p&gt;

&lt;pre&gt;
new_text = TextBlob(text).translate(to=&quot;de&quot;).translate(to=&quot;en&quot;)
&lt;/pre&gt;

&lt;p&gt;And we get a new text that resulted from translating the original English text to German, and then translating it back to English (using Google webservice). In few cases the result is exactly the same but in most cases there is some small change, different words but hopefully the same meaning.&lt;/p&gt;

&lt;p&gt;Data generated this way can be used for additional training of models or can be used for what is called test time data augmentation. This last concept is quite simple to explain, it is often used in image classification where rotating an image sometimes makes it easier for the model to make better predictions. So doing several rotations and then averaging predictions will lead to a better result. With text it also worked quite well by using the different translations variants.&lt;/p&gt;

&lt;p&gt;From my experience the language that worked best for this trick was German, then next one was Spanish. I also tried a few other European languages like Portuguese, French or Swedish and also something much different as Japanese.&lt;/p&gt;

&lt;p&gt;I did not try it but other teams reported that just doing translations and training with the word vectors for the other language also improved the results.&lt;/p&gt;

&lt;p&gt;It was great fun this competition. My team was absolutely amazing.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/3928360994086449411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/3928360994086449411?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/3928360994086449411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/3928360994086449411'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2018/03/my-wrap-up-after-nlp-machine-learning.html' title='My wrap-up after a NLP machine learning competition'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2947903659430478478</id><published>2017-09-13T12:51:00.004+01:00</published><updated>2017-10-08T18:14:39.486+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sap"/><title type='text'>Testing SAP in the age of the robot</title><content type='html'>&lt;p&gt;Like everywhere else in software industry, in SAP testing is the key factor to have things working in a stable and robust way. The main difference is that while some evolve their systems based on a large set of automated tests, in SAP projects it is common to depend on people performing tests.

&lt;p&gt;We can try to dig some historical and technical reasons for doing things manually in SAP, but that is just looking for excuses. Reality is that we can and we should build testing robots for SAP.

&lt;p&gt;I believe the best way to explain how this can be so effective is to show some examples. I will start with a master data test example.

&lt;pre&gt;
    def test_atp_group(self):
        wrong = marc[(marc. != &#39;X1&#39;)&amp;amp;(marc.matnr.isin(mara[mara.mtart==&#39;FERT&#39;].matnr))]
&lt;/pre&gt;

&lt;p&gt;So what is it so special here. First the code is very short, it takes advantage of python data science tools to write very compact code. Being able to write tests in very few lines allows not only to create large number of tests but also to be easy to rewrite tests as many times as needed. Most of my tests are 1 to 5 lines of code and that is important. With a big screen I can see a few hundred tests without much need to scrolling and that makes it much easier to go back from test failures to the testing rules. Also it does not feel bad to delete a line of code when a rule changes, while deleting 100 lines would feel a bit depressing.

&lt;p&gt;And why testing master data is good? My experience shows that master data tests have the best return of investment. Tests take little time to write (5 or 10 minutes) and  will run dozens of times and will find hundreds (or thousands) of errors. Same tests will run in development, regression, pre-prod and production systems. Most projects will create master data in waves, so tests will also run for multiple waves. And sometimes we need to ask others more than once to get something properly fixed. All this multiplied makes many checks, many errors found and a lot of saved time. During a project making master data tests early is like investing in bitcoins when it  started, we get a huge return on the time invested.

&lt;p&gt;In the code above it shows mara and marc variables, you may wonder how it gets there. These two database tables for material master and stored as a special data structure called data frames. To get these data frames from SAP data I use an API inspired on &lt;a href=&quot;https://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt;, that we built at &lt;a href=&quot;http://www.cognitiva.com/&quot;&gt;Cognitiva&lt;/a&gt;, that works like this:

&lt;pre&gt;
    marc = ReadTable(con).table(&#39;marc&#39;).filter(&#39;werks&#39;,[&#39;P001&#39;,&#39;P002&#39;]).all()
    mara = ReadTable(con).table(&#39;mara&#39;).filter(&#39;matnr&#39;,marc.matnr.unique()).all()
&lt;/pre&gt;

&lt;p&gt;Again it takes only one line of code for each table, so quite easy to get data from 50 tables or more.

&lt;p&gt;After master data I think the next most useful test robots (larger ROI) are the ones that test large calculation that depend on complex master data setups. One such example is delivery scheduling that dependes on multiple condition tables and calendars. Another is pricing calculation when there are multiple and complex discounts schemes. Whenever these complex tasks can be isolated, it is easier to build a specific test robot than to try to test as part as end to end testing. This is how it looks like a test on delivery scheduling, where the call to schedule is just wrapper call on BAPI_APO_SCHEDULING. It is also very quick to write tests so it is easy to have an extensive coverage.

&lt;pre&gt;
    def test_std_10_03(self):
        &quot;&quot;&quot;standard request before cut-off on Wednesday
           GI Wednesday at 18h, delivery Friday at 18h
        &quot;&quot;&quot;
        items = [(&#39;ZDMODE&#39;,&#39;STD&#39;),(&#39;LOCFR&#39;,&#39;7309&#39;),
                 (&#39;ALAND&#39;,&#39;DE&#39;),(&#39;ZCARRIER&#39;,&#39;0100530000&#39;)]
        times = self.schedule(20140423100000, items)
        self.assertSchedEqual(times[&#39;WADAT&#39;], 20140423180000)
        self.assertSchedEqual(times[&#39;LFDAT&#39;], 20140425180000)
&lt;/pre&gt;

&lt;p&gt;And finally end-to-end (E2E) test robots are also quite useful. Some years ago E2E testing was mainly about testing the GUI that users would use to perform the actions on the system. But nowadays what we see in SAP is that large usage of the system happens through interfaces (EDI, ecommerce, point of sales, external warehouse systems, etc) so automated testing the interfaces and batch jobs exactly as in production and replacing the GUI with some equivalent RFC calls is a good strategy. An example of this would be replacing the action the user would take in VA02 to remove the delivery block of a sales order with a call to the sales order BAPI to do the same change in delivery block. The last option is technically simpler to automate and good enough to catch errors.

&lt;p&gt;To build E2E test robots some time is spent to create building blocks, like a DESADV IDOC for external warehouse, or a TLB queue for orders created from APO transport load builder. But after having these building blocks writing E2E tests is also quick, a example test looks like:

&lt;pre&gt;
    def vmi_sales(self, plant, mats, country, routedays=2, channel=&#39;04&#39;):
        transport_size = self.data.transport_size(country)
        sold_to, ship_to = self.data.get_customer(country)
        items = self.data.get_items(mats, transport_size)
        mdoc = self.load_stock(items, plant)
        self.check_material_mov(mdoc, plant, country)
        order_id = self.create_tlb(sold_to, plant, items, ship_to=ship_to, 
                   routedays=routedays,channel=channel)
        time.sleep(15) # wait for CIF processing
        self.check_sales(plant, country, order_id)
        dlv = self.create_delivery(order_id)
        self.check_delivery(dlv, plant, country)
        self.delivery_pgi(dlv, plant)
        return {&#39;order_id&#39;:order_id, &#39;dlv&#39;:dlv, &#39;mdoc&#39;:mdoc, &#39;plant&#39;:plant, 
                &#39;country&#39;:country}
&lt;/pre&gt;

&lt;p&gt;This test would load stock, create a VMI sales through the CIF queue, check sales correctness, create and check the delivery and PGI the delivery by creating an external WMS IDOC. Then finally invoice is created by a batch job. The extension to more complex E2E with transfers between plants and multiple invoices is just a few more lines of code. Then for each E2E writing variants can be just one line of code.

&lt;pre&gt;
    def vmi_sweden(self):
        return self.vmi_sales(&#39;P001&#39;,[123,321,112,221],&#39;SE&#39;,routedays=14)
&lt;/pre&gt;

&lt;p&gt;Because it is so quick to build variants, robots can test multiple plants, combinations of transfers between sequence of plants and final sales, multiple types of materials, partial deliveries, batch splits, etc.

&lt;p&gt;Although the time investment in E2E test robots is higher, in my opinion it is well worth. Running hundreds or thousands of E2E tests is the best way to be sure we have a robust system or to know which areas need improvement.

&lt;p&gt;Robots are good. We need more robot testing in SAP projects.</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2947903659430478478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2947903659430478478?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2947903659430478478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2947903659430478478'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2017/09/testing-sap-in-age-of-robot.html' title='Testing SAP in the age of the robot'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-6359489744927763100</id><published>2017-06-03T12:43:00.001+01:00</published><updated>2017-06-03T12:43:36.288+01:00</updated><title type='text'>Using Machine Learning in a SAP project</title><content type='html'>&lt;p&gt;SAP projects can be a very complex task of data mapping and data cleaning. People in data science spend most of their time doing this task called &lt;a href=&quot;https://en.wikipedia.org/wiki/Data_wrangling&quot;&gt;data wrangling&lt;/a&gt;. There is no doubt a lot of effort is needed at this stage. Most times in SAP projects this task is done manually using extractions and Excel files in a process that is very likely to be poluted by human errors. As data size and complexity increases final data quality decreases. This happens always, no matter how strong people are with Excel.

&lt;p&gt;I think there is a lot from data science that can be very effective in SAP projects. Not only the tools for building the data wrangling tasks but also the machine learning tools that can be used to extract knowledge from data.

&lt;p&gt;In a recent project the product pricing master data consisted of about 50 thousand entries. This is still a small dataset, but already too large for the user to validate line by line.

&lt;p&gt;With machine learning it was possible to identify the errors in the data using algorithms for outlier detection. These methods work quite well when there is a lot of data. In this pricing data there were many very similar prices for the same material and different customers, and many similar prices for products from same product group. This allows the algorithm to identify areas in space with high density of entries and outliers are elements outside those areas.

&lt;p&gt;The picture below illustrates what the algorithm does, the areas with high density of points are what the algorithm sees as normal values and everything else outside are the outliers.

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLAEantUk5yQUfywNnRiMfhky8LThIDkpYnISnHHQLsFrLXGxk_wKBrcamp-gFb6UrDDgqHYFIATXsoc88jUJTsbFHveZHu_Sqrz4ng6ujeSs5JQC7wBZLfL7G2dQvdTHwLI-/s1600/outlier_detection.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLAEantUk5yQUfywNnRiMfhky8LThIDkpYnISnHHQLsFrLXGxk_wKBrcamp-gFb6UrDDgqHYFIATXsoc88jUJTsbFHveZHu_Sqrz4ng6ujeSs5JQC7wBZLfL7G2dQvdTHwLI-/s400/outlier_detection.png&quot; width=&quot;400&quot; height=&quot;387&quot; data-original-width=&quot;486&quot; data-original-height=&quot;470&quot; /&gt;&lt;/a&gt;&lt;/div&gt; 

&lt;p&gt;In this specific case machine learning unconvered a large number of outliers and after analysis it was possible to identify several reasons:
&lt;ul&gt;
&lt;li&gt; prices can be maintained with quantity factor (eg. it can be a price for 1 unit, or a price for 100 units); wrong quantity factors originated prices that were order of magnitude different
&lt;li&gt; prices can be maintained in different currencies (which were all converted to a base currency before using the algorithm) and there were cases where the price was calculated in a currency but then maintained in a different currency
&lt;li&gt; there were software bugs in reading the upload data format
&lt;/ul&gt;

&lt;p&gt;Using machine learning allowed to quickly extract the few hundred cases of errors from the dataset and this simplified the correction activity. Because it is such a generic tool it can be used with any data to find entries that are outliers. If after inspection the outliers are correct entries, then we can have more confidence on the data quality.

&lt;p&gt;Master data quality is a big problem. Machine learning will not magically solve all master data issues, but it is a strong tool to help on that.</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/6359489744927763100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/6359489744927763100?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6359489744927763100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6359489744927763100'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2017/06/using-machine-learning-in-sap-project.html' title='Using Machine Learning in a SAP project'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoLAEantUk5yQUfywNnRiMfhky8LThIDkpYnISnHHQLsFrLXGxk_wKBrcamp-gFb6UrDDgqHYFIATXsoc88jUJTsbFHveZHu_Sqrz4ng6ujeSs5JQC7wBZLfL7G2dQvdTHwLI-/s72-c/outlier_detection.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-186167527399482324</id><published>2016-08-20T19:39:00.003+01:00</published><updated>2016-08-20T19:45:34.563+01:00</updated><title type='text'>Using deep learning models on Nespresso images</title><content type='html'>One great resource in machine learning is pre-trained neural networks for image processing. While training a deep network is complex and needs large amounts of data, using pre-trained models is as easy as using functions from a software library.&lt;br /&gt;&lt;br /&gt;

Just for some fun I picked a few images from the Nespresso webshop and used the &lt;a href=&quot;http://www.robots.ox.ac.uk/~vgg/research/very_deep/&quot;&gt;VGG19&lt;/a&gt; pre-trained network with the goal of finding a way to sort the images by similarity. This just needs two steps, the first is to get the network layer outputs for each image.&lt;br /&gt;&lt;br /&gt;

&lt;pre&gt;    base_model = VGG19(include_top=True, weights=&#39;imagenet&#39;)
    model = Model(input=base_model.input,
            output=base_model.get_layer(&#39;block5_pool&#39;).output)
    img_features = np.vstack([model.predict(img).flatten() for img in imglst])
&lt;/pre&gt;
&lt;br /&gt;
The network returns a vector for each image, then using &lt;a href=&quot;https://en.wikipedia.org/wiki/Principal_component_analysis&quot;&gt;PCA&lt;/a&gt; the vector is reduced to a single dimension, which is then the sort order.&lt;br /&gt;&lt;br /&gt;

&lt;pre&gt;    pca = PCA(n_components=1)
    img_score = pca.fit_transform(img_features)
&lt;/pre&gt;
&lt;br /&gt;
The result is the following sort order for the images (sorted from top to bottom, left to right).&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA_1FV9-i3CSETAGdybMqpmd6NmEqOvufMLL010mnzosUQy7wFdXfTcrfSzRGabXnMG37kHp-6z-3w0UsasOrAYHLWYRJfZgDiJZG6DZsEG5aXWx8TVLh4D-aawG86U8TSIcf-/s1600/sorted_nespresso_images.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;397&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA_1FV9-i3CSETAGdybMqpmd6NmEqOvufMLL010mnzosUQy7wFdXfTcrfSzRGabXnMG37kHp-6z-3w0UsasOrAYHLWYRJfZgDiJZG6DZsEG5aXWx8TVLh4D-aawG86U8TSIcf-/s400/sorted_nespresso_images.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
Not perfect but very close, don&#39;t you think?</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/186167527399482324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/186167527399482324?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/186167527399482324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/186167527399482324'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2016/08/using-deep-learning-models-on-nespresso.html' title='Using deep learning models on Nespresso images'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjA_1FV9-i3CSETAGdybMqpmd6NmEqOvufMLL010mnzosUQy7wFdXfTcrfSzRGabXnMG37kHp-6z-3w0UsasOrAYHLWYRJfZgDiJZG6DZsEG5aXWx8TVLh4D-aawG86U8TSIcf-/s72-c/sorted_nespresso_images.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-1851683918747844891</id><published>2016-01-19T11:18:00.000+00:00</published><updated>2016-01-19T17:06:36.928+00:00</updated><title type='text'>SAPYard</title><content type='html'>

&lt;p&gt;I recently published a post in &lt;a href=&quot;http://www.sapyard.com&quot;&gt;SAPYard&lt;/a&gt; about the &lt;a href=&quot;https://academy.onsap.com/courses/onsap/SP225/2015_T1/about&quot;&gt;SAP Debugging course&lt;/a&gt; that I created for &lt;a href=&quot;http://academy.onsap.com&quot;&gt;Academy OnSap&lt;/a&gt;. The SAPYard is a great site, full a useful information for SAP consultants and users. I am very grateful for their help spreading the word about the SAP debugging course and I also want to highlight they have great content. &lt;/p&gt;

&lt;p&gt;For example, they have a series of &lt;a href=&quot;http://www.sapyard.com/lets-web-dynpro-part-i/&quot;&gt;tutorials about Web Dynpro&lt;/a&gt;, a topic that nowadays is fundamental for programmers. Still on ABAP, you will also find interesting this more advanced post about &lt;a href=&quot;http://www.sapyard.com/deleting-rows-of-the-internal-table-within-the-loop-is-it-a-taboo-a-big-no-no/&quot;&gt;delete on internal tables&lt;/a&gt;. And they also have a lot of content and expertise on SAP HANA (eg, &lt;a href=&quot;http://www.sapyard.com/view-the-hana-views-from-different-angles/&quot;&gt;HANA Views&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;There are amazing SAP resources outside the walls of the SAP company. Official SAP portals are good and important but in my opinion the quality of the independent community is what makes the SAP ecosystem so great.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/1851683918747844891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/1851683918747844891?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1851683918747844891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1851683918747844891'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2016/01/sapyard.html' title='SAPYard'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-6303145312996607830</id><published>2015-06-15T23:05:00.000+01:00</published><updated>2015-06-15T23:18:04.576+01:00</updated><title type='text'>An online course on SAP debugging</title><content type='html'>&lt;p&gt;I think debugging is one of the most important skills to do advanced work on SAP. At least from my experience, when things get hard it is either the debugger or data analysis that will help find the solution. As far as I know there are not many resources to learn and improve the practice of debugging. So, as an attempt to improve this, I worked on assembling a mini course on SAP Debugging, following the patterns of the modern MOOCs. &lt;/p&gt;

&lt;p&gt;I think it turned out quite OK and it was fun, probably I will be doing more of these. You can find the &lt;a href=&quot;http://academy.onsap.com&quot;&gt;debugging course here&lt;/a&gt;.&lt;/P&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://academy.onsap.com&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; style=&quot;border: none&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiygLWhAP5Iwy7JnbEx6gCC0-F0GONt1CFZ-rNswNfA1us4W2-zN3ys_3RWC18ck_39eVOl_OX7cLiRgZ1cFnU_LOC3NNnw0gBi8Evq5arfDah2mw3yj1oaN7G5hign_5JNafs6/s1600/academy_small.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;The course is for beginners, but it also includes some advanced topics that can be interesting to experienced people. And it has some assignments that should not take much time and (hopefully) will be fun.&lt;/p&gt;

&lt;p&gt;Looking forward to see you in the class!&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/6303145312996607830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/6303145312996607830?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6303145312996607830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6303145312996607830'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2015/06/an-online-course-on-sap-debugging.html' title='An online course on SAP debugging'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiygLWhAP5Iwy7JnbEx6gCC0-F0GONt1CFZ-rNswNfA1us4W2-zN3ys_3RWC18ck_39eVOl_OX7cLiRgZ1cFnU_LOC3NNnw0gBi8Evq5arfDah2mw3yj1oaN7G5hign_5JNafs6/s72-c/academy_small.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-8690359350666102515</id><published>2015-05-18T18:01:00.000+01:00</published><updated>2015-05-18T18:07:00.704+01:00</updated><title type='text'>SAP Unit Tests actually exist, report of a sighting</title><content type='html'>&lt;p&gt;One of most impressive things in SAP, and impressive in a bad way, is the huge effort of people executing tests to validate the software after upgrades or some larger developments. It should not be like this. We now look back and we think it is funny a room full of people performing calculations like in this picture from the 40s.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiHkH_zWAxv2jgbwCaTq5sdu0w1mSJXDxMFbzcO5SJXqs6XzJGZMfk9j17UvKsqgS9SWMKo-Hu9ueTPO9qW3g-k-10FOPGMtOnetUKDToB-sjw1atYnTuRGSYbXS1NftNn3cOZ/s1600/HumanComputers.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiHkH_zWAxv2jgbwCaTq5sdu0w1mSJXDxMFbzcO5SJXqs6XzJGZMfk9j17UvKsqgS9SWMKo-Hu9ueTPO9qW3g-k-10FOPGMtOnetUKDToB-sjw1atYnTuRGSYbXS1NftNn3cOZ/s400/HumanComputers.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;But almost 100 years later this is more or less how a SAP upgrade is tested.&lt;/p&gt;

&lt;p&gt;The reason is historic. The &quot;old&quot; SAP code is large, monolithic and highly integrated (a nicer way to describe a crazy web of dependencies). Not surprisingly this older code comes without automated tests, these would be hard to implement in such architecture. But not all SAP is coded the same way. Components developed in the last 10-15 years follow the typical object-oriented modular software best practices. And SAP also includes a complete framework for unit tests. My expectation was that SAP would start shipping more and more unit tests, and this would help reduce the need of manual testing and reduce the risk of regressions when installing SAP updates.&lt;/p&gt;

&lt;p&gt;So for many years I asked myself: Where are the SAP unit tests???&lt;/p&gt;

&lt;p&gt;Many times I tried the option to see the unit tests in SAP objects, just to find out ... there was none.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1ldSi8bG6KP1tKMig1zmpiHglie9x-Q2RwTGuhri5Trgczp7qJAgzYSvgZh7fx3rnTFFiGBuX3tumh76JJZl5FfcngpG0M7EsIDgDQkT27YUaJ0G-ML2Urrc2P3AGGNczxA_/s1600/local_test1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC1ldSi8bG6KP1tKMig1zmpiHglie9x-Q2RwTGuhri5Trgczp7qJAgzYSvgZh7fx3rnTFFiGBuX3tumh76JJZl5FfcngpG0M7EsIDgDQkT27YUaJ0G-ML2Urrc2P3AGGNczxA_/s400/local_test1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Anyone remembers something similar? This documentation option in functions. At least the experience is consistent, it almost never shows any documentation.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLFNaPvnSmTLy-GYtk-69g4imWUXU-O2aHRxdXZMA_IVW6yLHFM12EOBm1dSTMyMNyku5kS2FLpAiqX2vNFNC7MgdLBf9xxv6D04a0uT2dwBm8r_jgAV3R7Jiqq2RsV8w_aiSM/s1600/local_test3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLFNaPvnSmTLy-GYtk-69g4imWUXU-O2aHRxdXZMA_IVW6yLHFM12EOBm1dSTMyMNyku5kS2FLpAiqX2vNFNC7MgdLBf9xxv6D04a0uT2dwBm8r_jgAV3R7Jiqq2RsV8w_aiSM/s400/local_test3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;It actually shows a message to make you feel there could be something in other language. But, of course, there was nothing.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9CP_OQkZeLsqgYH7gjWuux_L-ndpBaHMR4ofp-bU-z7cz7g_dnh39qVyTrR_ONtg_pDx7orW-uO13bhJ0Fdndal_jJsnIq-4yaLv5PwJjvYt-DbEcqkKgpSZWlVnHrnhdgUto/s1600/local_test4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9CP_OQkZeLsqgYH7gjWuux_L-ndpBaHMR4ofp-bU-z7cz7g_dnh39qVyTrR_ONtg_pDx7orW-uO13bhJ0Fdndal_jJsnIq-4yaLv5PwJjvYt-DbEcqkKgpSZWlVnHrnhdgUto/s400/local_test4.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;But now I finally saw some unit tests in SAP code. It was in /SAPAPO/CL_ALL_LOCK_DELTA class (in SAP SCM software). &lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrSeoA2sBQN4YBgl8D2KR9p7XkCH23mxctTQv1GRkI9fWeUXar3tcndv0HDwogrTVX8RghMOWLSnsenG_pHLQXbztBG_R_Nc3e2gZrQZsPXe02eMd7R70oN8ZjusL9VNq0OalR/s1600/local_test2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrSeoA2sBQN4YBgl8D2KR9p7XkCH23mxctTQv1GRkI9fWeUXar3tcndv0HDwogrTVX8RghMOWLSnsenG_pHLQXbztBG_R_Nc3e2gZrQZsPXe02eMd7R70oN8ZjusL9VNq0OalR/s400/local_test2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;So unit tests exists, it is worth searching for them. Looking at the unit tests is also a good way to understand how to use that part of the code.&lt;/p&gt;

&lt;p&gt;And now I have some SAP example to show when trying to bring unit testing best practices to the custom developments world. SAP recommends using unit tests. You know those words can take you a long way.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/8690359350666102515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/8690359350666102515?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/8690359350666102515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/8690359350666102515'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2015/05/sap-unit-tests-actually-exist-report-of.html' title='SAP Unit Tests actually exist, report of a sighting'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiHkH_zWAxv2jgbwCaTq5sdu0w1mSJXDxMFbzcO5SJXqs6XzJGZMfk9j17UvKsqgS9SWMKo-Hu9ueTPO9qW3g-k-10FOPGMtOnetUKDToB-sjw1atYnTuRGSYbXS1NftNn3cOZ/s72-c/HumanComputers.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-6198391508053842895</id><published>2015-02-08T22:40:00.000+00:00</published><updated>2015-02-08T22:44:44.766+00:00</updated><title type='text'>SAP S/4</title><content type='html'>Last week SAP released S/4, the evolution of their most important product the R/3. &lt;br /&gt;
&lt;br /&gt;
I think this is a good occasion to talk about what makes SAP a successful software. Does S/4 have the magic ingredient that made R/3 so successful? So why was R/3 a success?&lt;br /&gt;
&lt;br /&gt;
When I started working with R/3 I was very impressed with the development environment, the tools in SAPGUI to develop the code running in the server, and how easy it was to start debugging a running program. At that time I thought SAP was great because it was based on this flexible development platform. &lt;br /&gt;
&lt;br /&gt;
But of course some time later I realized it was not the platform. The ABAP language is a pain and lacks in many areas, for example it is quite bad for numerical algorithms. Concurrency is not very efficient, the web layer is slow and the many web frameworks are obsolete even before having some real adoption. Forget it, it was not the platform.&lt;br /&gt;
&lt;br /&gt;
What is really cool in SAP is the applications, having so many applications, for so many areas, industries and processes. But usability is bad, performance also not so good, and there are so many custom applications in SAP projects that something must be wrong with what comes out-of-the-box.&lt;br /&gt;
&lt;br /&gt;
The applications helped a lot, but something else was very important in R/3, the expensive price tag. I&#39;m not joking here, a very expensive price is a powerful feature. When a software costs 1k either it works or it will be scrapped, no client will pay 10k or more in consulting time to adjust and integrate the software. But if the software costs 1000k then 100k in consulting is very reasonable. And if out-of-the-box things don&#39;t fit well, after 100k of consulting a lot can be done to make the client happy. &lt;br /&gt;
&lt;br /&gt;
Will S/4 will have the R/3 magic? Yes I think we can trust it will be quite expensive ;-)</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/6198391508053842895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/6198391508053842895?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6198391508053842895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/6198391508053842895'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2015/02/sap-s4.html' title='SAP S/4'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-4858625634414234964</id><published>2014-10-06T22:37:00.001+01:00</published><updated>2014-10-06T22:39:45.480+01:00</updated><title type='text'>SAP code base</title><content type='html'>Hasso Plattner, founder of SAP, is also a teacher in an open online course about &lt;a href=&quot;https://open.hpi.de/courses/imdb2014&quot;&gt;in-memory databases&lt;/a&gt;. In one of the lessons he mentions experiments done by SAP, that by moving some logic to database stored procedures (math logic as he calls it) it was possible to reduce as much as 80% of the code size in the application server. 

This is of course one more chapter in the SAP HANA is great story. But I cannot help but comment this from the other point of view. SAP was able to become world leader in enterprise software with up to 80% bloated code base. One more case where &quot;good enough&quot; was the best decision.</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/4858625634414234964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/4858625634414234964?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/4858625634414234964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/4858625634414234964'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2014/10/sap-code-base.html' title='SAP code base'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2532441289457692597</id><published>2013-12-06T22:07:00.001+00:00</published><updated>2013-12-06T22:08:20.403+00:00</updated><title type='text'>More values in SAP domains</title><content type='html'>&lt;p&gt;
Some many years working with the SAP server and it was just recently that I learned it was possible to add more values to standard domains that have a fixed list of values. It is not a big secret, it is just an option in the menu and then it is like append structures in tables. 
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibTrIT9ZV_oDYZCldRva9l40Yq4d5WfNqFJruI8325QTsfoHpi_AyTj0VgXsEDpnEgDQaKYbO-1t3NWzu_uqEnj-VxdlQdVd5XYy0oElhE30y9E5aWvkgYsFD70hEIBNlphF9M/s1600/domain_fixed_value_append.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibTrIT9ZV_oDYZCldRva9l40Yq4d5WfNqFJruI8325QTsfoHpi_AyTj0VgXsEDpnEgDQaKYbO-1t3NWzu_uqEnj-VxdlQdVd5XYy0oElhE30y9E5aWvkgYsFD70hEIBNlphF9M/s320/domain_fixed_value_append.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
This was useful to add the missing APO store location 1040 to the CRM domain used in the configuration of location/business partner mapping.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvE7l_KSJxVmOyDmJL-T3SWZdeZywspDMC7q_XOP9Kc0UOOU6UkLGkcD3Xd8InzFyh2g42gt24ItcuMyva3cyAZQ36uDgmqqkIt36_rocowmNngmxE3bQ9iR7dIbHY6J33X3Nr/s1600/domain_fixed_value_append-2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvE7l_KSJxVmOyDmJL-T3SWZdeZywspDMC7q_XOP9Kc0UOOU6UkLGkcD3Xd8InzFyh2g42gt24ItcuMyva3cyAZQ36uDgmqqkIt36_rocowmNngmxE3bQ9iR7dIbHY6J33X3Nr/s320/domain_fixed_value_append-2.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2532441289457692597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2532441289457692597?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2532441289457692597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2532441289457692597'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2013/12/more-values-in-sap-domains.html' title='More values in SAP domains'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibTrIT9ZV_oDYZCldRva9l40Yq4d5WfNqFJruI8325QTsfoHpi_AyTj0VgXsEDpnEgDQaKYbO-1t3NWzu_uqEnj-VxdlQdVd5XYy0oElhE30y9E5aWvkgYsFD70hEIBNlphF9M/s72-c/domain_fixed_value_append.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2336003099165627052</id><published>2013-12-04T22:42:00.001+00:00</published><updated>2013-12-06T22:10:33.464+00:00</updated><title type='text'>Nice SAPUI5 quick demo (for someone that knows js/html5)</title><content type='html'>&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;I found this demo from DJ Adams on SAPUI5 very useful. I know some HTML5 but I have yet to dig into the details of SAPUI5 and with this video it was possible for me to get some feeling of this framework.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;The first impression is not the best. The XML views, the long namespaces and many small files looks a bit like Java coded in JS.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;I still have the feeling that nobody has yet found &quot;the simple way&quot; of doing UI in the browser. Probably it still needs one more iteration of browser core technologies and maybe ideas like&amp;nbsp;&lt;/span&gt;&lt;a class=&quot;ot-anchor&quot; href=&quot;http://polymer-project.org/&quot; rel=&quot;nofollow&quot; style=&quot;-webkit-transition: color 0.218s; background-color: white; color: #427fed; cursor: pointer; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none; transition: color 0.218s;&quot;&gt;polymer-project.org&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&amp;nbsp;will do it. In any case SAPUI5 is by far the one of the most interesting SAP technologies.﻿&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;background-color: white; color: #404040; font-family: Roboto, arial, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;//www.youtube.com/embed/r-QszpA-HiI&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2336003099165627052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2336003099165627052?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2336003099165627052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2336003099165627052'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2013/12/nice-sapui5-quick-demo-for-someone-that.html' title='Nice SAPUI5 quick demo (for someone that knows js/html5)'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-4212246064899081375</id><published>2013-07-18T22:09:00.001+01:00</published><updated>2013-07-18T22:09:51.648+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><title type='text'>Just fill in the blanks</title><content type='html'>Reading the SAP source code is always full of surprises. In this case it was in the SCM system, after finding some useful functionality that was not documented, some additional search on how to maintain the values leads to the following procedure.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaWY7fPb9kAht-AbUwx0yPk1fGeqQaE8QHLPYkPK_TiCNvi4u8WkWErWkzzmsh2AZEHNEaikTfIe7EtuA2W7a_Jhq9XxWFyKiF1-0tkuHFRR1QfunfDYIS6DeE1NZ23A7FD55/s1600/fill_in_the_blanks.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaWY7fPb9kAht-AbUwx0yPk1fGeqQaE8QHLPYkPK_TiCNvi4u8WkWErWkzzmsh2AZEHNEaikTfIe7EtuA2W7a_Jhq9XxWFyKiF1-0tkuHFRR1QfunfDYIS6DeE1NZ23A7FD55/s320/fill_in_the_blanks.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It feels like the school books, one just needs to fill in the blanks :-)</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/4212246064899081375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/4212246064899081375?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/4212246064899081375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/4212246064899081375'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2013/07/just-fill-in-blanks.html' title='Just fill in the blanks'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmaWY7fPb9kAht-AbUwx0yPk1fGeqQaE8QHLPYkPK_TiCNvi4u8WkWErWkzzmsh2AZEHNEaikTfIe7EtuA2W7a_Jhq9XxWFyKiF1-0tkuHFRR1QfunfDYIS6DeE1NZ23A7FD55/s72-c/fill_in_the_blanks.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-7855831765939957144</id><published>2013-06-12T22:15:00.001+01:00</published><updated>2013-06-12T22:23:54.414+01:00</updated><title type='text'>Being gamified by &quot;Gamification At Work&quot;</title><content type='html'>I have received a pre-release copy of &quot;Gamification At Work&quot;. It is not the first time I am contacted to make a blog post about some new book. And so far this was the first time I actually bothered to do something. The marketing was well done, and I actually liked the trick of receiving the mail twice, the first time with some formatting problems and the second time with an apology and without formatting problems. True, it was very likely that I would delete the first email without reading (actually it was not the case). And receiving a &lt;a href=&quot;http://www.interaction-design.org/books/gamification_at_work.html?p=8336&quot;&gt;link to the online book&lt;/a&gt; with apolemia in the background was also a good trick.

&lt;br /&gt;&lt;br /&gt;

So I was gamified, but that is good. I like to be gamified and somehow I do it to myself every day (task lists with colors, targets in the number of commits, etc). If some number or visual thing helps me do more, then it is good. 

&lt;br /&gt;&lt;br /&gt;

Anyhow that is was not main the reason I started reading the book and wrote this blog post. The reason was that one of the authors is Mario Herger and I remember some of his work on the SAP community. For example &lt;a href=&quot;http://www.youtube.com/watch?v=rOQvn-ivthw&quot;&gt;this video&lt;/a&gt; (below) or &lt;a href=&quot;http://www.youtube.com/watch?v=EK5-Xdfv0ec&quot;&gt;this&lt;/a&gt;.

&lt;br /&gt;&lt;br /&gt;

&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/rOQvn-ivthw&quot; width=&quot;420&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;&lt;br /&gt;
OK those videos are nothing special in the context of the typical startup, but the SAP world 10 years ago was not like that. The SAP world was boring. It was efficient, it was rewarding, it was full of vapourware and it was completely boring. Nowadays it is still rewarding, efficient and full of vapourware but not so boring anymore. And some nonsense like those videos was quite important for that change.
&lt;br /&gt;&lt;br /&gt;
So my expectations of the book are quite high. And I hope there will be a movie release ;-)
&lt;br /&gt;&lt;br /&gt;
PS. No need search the torrents, the book is &lt;a href=&quot;http://www.interaction-design.org/books/gamification_at_work.html?p=8336&quot;&gt;freely available here&lt;/a&gt;.
</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/7855831765939957144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/7855831765939957144?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/7855831765939957144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/7855831765939957144'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2013/06/being-gamified-by-gamification-at-work.html' title='Being gamified by &quot;Gamification At Work&quot;'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/rOQvn-ivthw/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-1616707632052329475</id><published>2012-06-12T19:56:00.000+01:00</published><updated>2012-06-12T20:00:51.277+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><category scheme="http://www.blogger.com/atom/ns#" term="interview"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><title type='text'>Interview with Ole Andre Haugen and Njål Stabell</title><content type='html'>I recently got to know an interesting product for mobile SAP development from&amp;nbsp;&lt;a href=&quot;http://neptune-software.com/&quot;&gt;Neptune Software&lt;/a&gt;, a&amp;nbsp;Norwegian software shop. Two things caught my attention, they are a startup in the SAP ecosystem, and they are building &lt;a href=&quot;http://neptune-software.com/solution/&quot;&gt;SAP HTML5 designer&lt;/a&gt;, an&amp;nbsp;ABAP&amp;nbsp;development framework for mobile devices. I am quite interested in both topics so I asked Ole-Andre, the CEO of Neptune Software, if he would be interested in a short interview for the blog and he kindly accepted.&lt;br /&gt;
&lt;br /&gt;
[OAH] Ole Andre Haugen – CEO Neptune Software&lt;br /&gt;
[NST] Njål Stabell – CTO Neptune Software&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;Can you tell us more about you and how you started with SAP?&lt;/i&gt;

&lt;br /&gt;
&lt;br /&gt;
[OAH] I started with SAP back in 1995 after serving as an officer in the Norwegian armed forces as Instructor and Field Engineer. I have since worked with SAP either as consultant or manager in consultancy firms.
&lt;br /&gt;
[NST] Actually I started out as a Java developer in the late 90’s and was lured into the SAP world through integration projects and java development on the SAP Internet Sales solution. It took me some years to fully embrace and accept the ABAP language but I now cherish its performance, simplicity and suitability for enterprise business logic.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Can you tell us about your company products and goals?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[OAH] Neptune Software is the result of years and years of real-life SAP projects and experience and not a lab product. We have tried to make our product the optimal development tool that we ourselves would have wanted to use as project developers. The result is a tool that combines the best of the features of the SAP Developer Workbench with the functionality we have always desired. As an example we have reused the idea of data binding from Webdynpro and added far better language support in our solution.&lt;br /&gt;
&lt;br /&gt;
[NST] I would like to add that the trigger of this specific product was the emergence of HTML5 as the “code once run anywhere” de facto standard for mobile development. We could not have delivered the kind of quality we do without the open source development communities producing great frameworks like jQuery Mobile and Phonegap(Cordova).&lt;br /&gt;
&lt;br /&gt;
[OAH] So, our product is an SAP certified HTML5 designer within the SAP Netweaver platform. We provide a server, a “drag &amp;amp; drop” designer and tools for creating Apps for multiple devises based on existing SAP functionality. We have no ambitions to move out of this space - meaning we are not a MEAP but a MADP (Mobile development Application Platform)&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Is this your first venture in product development?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[NST] No, I started my career as a product developer for a Scandinavian e-procurement company called Proceedo. The move into project based development was quite a shock when I realized that object orientation and inheritance was kind of useless when you code a user-exit or similar “small” fixes within the SAP environment. Luckily I can capitalize on my former experience now that we have created a huge application in SAP and where ABAP Object really shines.&lt;br /&gt;
&lt;br /&gt;
[OAH] I started a company that delivered a procurement HUB between SAP installations (Customers) in 2002 called LogNet. Even if I have started a lot of SAP consultancy firms, it has always been my passion to create software products rather than just delivering manpower to SAP customers.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;I suppose it is not easy for you to market a solution outside the official SAP strategy. How do convince customers that is better to use a non-SAP solution to solve the mobile equation?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[OAH] Not being owned by SAP doesn’t mean we are not an SAP solution. We are actually the only ABAP SAP development product for mobility on the market. And I would like to stress that our solution is certified by SAP. In addition we do not provide a MEAP that is competing with the SAP Mobility platform but only a means for ABAP developers to capitalize on their existing skill sets moving into a more and more mobile reality.&lt;br /&gt;
&lt;br /&gt;
[NST] The new partnerships announced by SAP last month also shows that SAP wants more development options for their platform. Especially the Adobe Phonegap partnering was important for us. Now our customers can use applications built with our tool on the SAP Mobile Platform and benefit from the MDM, Security and functionality like push notifications.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Is SAP platform is a good foundation for building a company that develops applications? What major strengths and weaknesses did you find?&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[OAH] SAP has a great platform when it comes to performance. We are especially impressed with the ICF (Internet Communication Framework) for performance and scalability. We also utilize the standard transport system and security of the SAP system.&lt;br /&gt;
&lt;br /&gt;
[NST] We are of course limited to the SAP customers in the world, and as we use the ABAP stack the look and feel of the designer is based on the standard SAP GUI. We find that the familiarity between our product and standard SAP ABAP tools really helps ABAP developers getting started.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Do you code ABAP?&amp;nbsp;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[BOTH] Yes, a lot.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Have you tried SAPUI5? What do you think of it? Do you think it will be the building block for all new SAP user interfaces?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[NST] We actually imported the SAPUI5 framework into our solution and made a few SAPUI5 plugins to test how it would play along our solution. It worked perfectly and we are now in touch with the managers of SAPUI5 in Waldorf and are awaiting the licensing decisions before we move any further.&lt;br /&gt;
&lt;br /&gt;
[OAH] For desktop solutions it will definitely have a more appealing and modern look than Webdynpro. I believe that when the browsers in the enterprise have decent HTML5 support – HTML5 will be the preferred choice for most UI development.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;I can see you choose JQuery Mobile to use in your product. I also see that SAP uses JQuery Mobile in several places, at least in the SUP and in Portal on Devices (do you know more?). Do think SAP will also adopt JQuery Mobile more officially or it will move to SAPUI5 once this toolkit supports mobile?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[NST] SAPUI5 actually packages jQuery Mobile for mobility development. SAP made a partnering announcement with Sencha Touch so we’ll see what that means for jQuery Mobile in the SAP context in the coming year. For our solution, the jQuery Mobile framework is a better fit. It is more HTML oriented and less Java script dependent when it comes to development.&lt;br /&gt;
&lt;br /&gt;
[OAH] I believe SAPUI5 will have most impact on the desktop. SAP really needs a facelift for their portal and business client.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Are there some new SAP technologies do you think can be particularly interesting to independent developers?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[NST] Apart from the SAPUI5 the new Netweaver Neo is interesting. If we have had a push for mobility and HANA this year, my predictions is that Cloud computing will be the hot thing next year.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Can you tell us more about your marketing channels? Do you get many inquiries from the website?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[OAH] We get great help from SAP through the Eco Hub and they help with setting up webinars with SAP partners. Our trial version strategy has been a success and we have our solution installed on more than 200 SAP systems worldwide.&lt;br /&gt;
&lt;br /&gt;
[NST] Also channels like Linkedin are great for marketing. These days it is a lot easier to find the right audience than it was only a few years ago.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Have you participated in SAP events? Which kind of events you found better to show your products?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[OAH] We participated on Teched and Sapphire in Madrid last year and will attend Teched in Las Vegas in October. Other than that we have been to the local SAP user group events in Scandinavia which has resulted in actual contracts.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;How do you see the SAP independent developers space?&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
[NST] For ABAP developers we can highly recommend the Assembly kit that comes with the certification. It gives you the tool you need for packaging and delivering ABAP add-ons in a smooth and professional manner.&lt;br /&gt;
&lt;br /&gt;
[OAH] SAP provides their Software and Technology partners with both the tools and the marketing assistance you will need starting up. So if you&lt;br /&gt;
have a great idea and some means of funding I say go for it.&lt;br /&gt;
&lt;br /&gt;
Thanks guys for this interview. I think you are one of the coolest &amp;nbsp;startups in the SAP space and I hope you have a lot of success with your product.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/1616707632052329475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/1616707632052329475?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1616707632052329475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1616707632052329475'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2012/06/interview-with-ole-andre-haugen-and.html' title='Interview with Ole Andre Haugen and Njål Stabell'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-9042705303910115075</id><published>2012-04-04T19:24:00.002+01:00</published><updated>2012-04-04T19:31:11.897+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><category scheme="http://www.blogger.com/atom/ns#" term="phonegap"/><category scheme="http://www.blogger.com/atom/ns#" term="sap"/><title type='text'>Simple PhoneGap Logon App for SAP mobile applications</title><content type='html'>This post is to share a simple PhoneGap application that manages the logon before calling a Netweaver URL with basic authentication. This app can be used as a container to run any HTML5 application from Netweaver and it is also open-source, so it can be useful for other people working on the SAP mobility topic (&lt;a href=&quot;https://bitbucket.org/cogni/mobiweaver-sconnect-android&quot;&gt;direct link to the code&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;About PhoneGap&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://phonegap.com/&quot;&gt;PhoneGap&lt;/a&gt; is toolkit to build containers for running HTML5 mobile applications. With PhoneGap it is possible to access hardware APIs like GPS, accelerometer, camera, etc, and still code in cross-platform HTML5/Javascript. For example, PhoneGap has a very useful barcode reader plugin, and reading barcodes from standard browser based HTML5 apps is not possible.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;About the problem this app tries to solve&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The typical pattern for development of PhoneGap applications is to package the application with the HTML and Javascript code and when the application needs data from a server it requests that data using ajax. This pattern has some advantages, the files are in the mobile device so the app loads faster and needs less network transfers.&lt;br /&gt;But I don&#39;t think this is a good pattern for enterprise applications. With this pattern deployment is hard, because when code changes it needs to be synchronized to all devices. And because we cannot be sure that all devices get updated at the same time, the data APIs from the server needs to support the different versions of the applications that might be running. This is complex to maintain. Enterprise mobile solutions must be easy to change and deploy and that can be achieved by having all HTML5/Javascript code in the Netweaver server. For that to work the PhoneGap application needs to be enhanced to have configuration data for the login, since currently it does not have a login dialog like the one found in the mobile browsers. So this Logon App provides a way to connect PhoneGap directly to Netweaver using basic authentication.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;The Logon App&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The application is ultra simple. Starts with a username/password screen (screenshot left). In the menu there is a settings screen where the server connection details and the URL path to the starter application must be saved (screenshot middle). When the login button is pressed the app calls the Netweaver URL using the Basic Authentication credentials and displays the remotely loaded starter application (screenshot right). After the login all UI and logic is in the server side.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOpnxicPY4uSuoNENBCtVz29SQXbpxzscjhGInf8_GiRE6xeihmMm9J60vUCOUWuKfJUUDvYZRTTfDtVxQgcrPZ_39s8pZ9yANi4dflQoUsUmv-4gib-N8GRSjlZNUf3SWs1uM/s1600/sap_scn_sconnect.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 220px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOpnxicPY4uSuoNENBCtVz29SQXbpxzscjhGInf8_GiRE6xeihmMm9J60vUCOUWuKfJUUDvYZRTTfDtVxQgcrPZ_39s8pZ9yANi4dflQoUsUmv-4gib-N8GRSjlZNUf3SWs1uM/s400/sap_scn_sconnect.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5727614577179920674&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight:bold;&quot;&gt;Source code and instructions&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Code is available in this &lt;a href=&quot;https://bitbucket.org/cogni/mobiweaver-sconnect-android&quot;&gt;repository&lt;/a&gt; with some minimal build instructions. A binary apk is also available in the downloads section. Currently it is only for Android (doing for other PhoneGap platforms should be easy, at least an iOS version will be done sooner or later).&lt;br /&gt;&lt;br /&gt;Note: this blog entry was originally &lt;a href=&quot;http://scn.sap.com/people/pedro.lima/blog/2012/03/29/simple-phonegap-logon-app-for-sap-mobile-applications&quot;&gt;published in SCN&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/9042705303910115075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/9042705303910115075?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/9042705303910115075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/9042705303910115075'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2012/04/simple-phonegap-logon-app-for-sap.html' title='Simple PhoneGap Logon App for SAP mobile applications'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOpnxicPY4uSuoNENBCtVz29SQXbpxzscjhGInf8_GiRE6xeihmMm9J60vUCOUWuKfJUUDvYZRTTfDtVxQgcrPZ_39s8pZ9yANi4dflQoUsUmv-4gib-N8GRSjlZNUf3SWs1uM/s72-c/sap_scn_sconnect.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-5594878623974795484</id><published>2012-02-02T16:18:00.003+00:00</published><updated>2012-02-02T16:24:12.039+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="jquery"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile"/><title type='text'>SAP development with jQuery Mobile</title><content type='html'>&lt;p&gt;One of the hot topics for me last year was doing SAP development for mobile platforms. There is a huge quantity and quality of enterprise information inside SAP servers and the new wave of mobile devices opens so many new ways of interacting with that data and business processes. I did not write much on that topic in the blog but on &lt;a href=&quot;http://www.onsap.com/&quot;&gt;onsap&lt;/a&gt; you can find &lt;a href=&quot;http://www.onsap.com/users/2/pedrolima&quot;&gt;many questions and answers&lt;/a&gt; related to the technologies I was using.&lt;/p&gt;&lt;p&gt;There are many platforms and toolkits for mobile development (and that is a good topic for another blog post that I hope to write one day). My choice of platform is &lt;a href=&quot;http://jquerymobile.com/&quot;&gt;jQuery Mobile&lt;/a&gt; for the frontend development and business server pages (BSP) for the backend development. With this stack it is possible to develop solutions using the platforms companies already have (ECC and other solutions based on Netweaver) and using an open toolkit that is evolving quickly and at the same time is stable and tested in a &lt;a href=&quot;http://jquerymobile.com/gbs/&quot;&gt;large number of devices&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;As a result of some of that work we, at &lt;a href=&quot;http://www.cognitiva.com/&quot;&gt;Cognitiva&lt;/a&gt;, are releasing an &lt;a href=&quot;https://bitbucket.org/cogni/mobiweaver&quot;&gt;open-source package&lt;/a&gt; with some utilities to help development of jQuery Mobile on SAP. It includes sample applications like the one show in action in the video below, and it also includes a search help widget that is described in detail in this SDN &lt;a href=&quot;http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/28495&quot;&gt;blog post&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you have interest in mobile apps give this technology a try. The source code is available in &lt;a href=&quot;https://bitbucket.org/cogni/mobiweaver&quot;&gt;this repository&lt;/a&gt; and it is possible to run a demo application with the free &lt;a href=&quot;http://www.sdn.sap.com/irj/scn/nw-downloads&quot;&gt;Netweaver developer edition&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;object width=&quot;560&quot; height=&quot;315&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/d11TsqY0p4s?version=3&amp;amp;hl=en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/d11TsqY0p4s?version=3&amp;amp;hl=en_US&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;560&quot; height=&quot;315&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/5594878623974795484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/5594878623974795484?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5594878623974795484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5594878623974795484'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2012/02/sap-development-with-jquery-mobile.html' title='SAP development with jQuery Mobile'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2554770972788249901</id><published>2012-01-16T17:47:00.007+00:00</published><updated>2012-01-16T18:02:06.804+00:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="interview"/><category scheme="http://www.blogger.com/atom/ns#" term="sap"/><title type='text'>Interview with Tamás Holics</title><content type='html'>&lt;p&gt;Tamás Holics is manager at &lt;a href=&quot;http://www.hovitaga.com/&quot;&gt;Hovitaga&lt;/a&gt;, a company in Budapest specialized in SAP development that is also bringing to market some SAP add-ons and applications. I asked Tamás if he could share his experience in a short interview, as I think this kind of experience is interesting for many of us running consulting companies or working as freelancers and also trying to market SAP applications or enhancements.&lt;br /&gt;&lt;br /&gt;[PL] Hi Tamás, can you tell us more about you, how you started with SAP and what areas of SAP you currently focus?&lt;br /&gt;&lt;br /&gt;[TH] I joined SAP Labs Budapest in 2006 as a junior ABAP developer. There I was working on IS-Oil projects for about one and a half years. Since then I&#39;ve gained experience in the insurance industry, especially with the FS-CD module. Currently I work for a manufacturing company where I do ABAP development within core ERP modules like warehouse management, logistics, sales and distribution etc.&lt;br /&gt;&lt;br /&gt;[PL] In parallel with consulting your company is developing SAP applications. What fraction of the time do you invest in app development versus consulting work?&lt;br /&gt;&lt;br /&gt;[TH] That changes very often. There were some months when I could spend 10-12 days on the development of my apps, but lately only a few hours per day in my free time. This is also due to the fact that the activities have shifted from development to marketing.&lt;br /&gt;&lt;br /&gt;[PL] Can you tell us more about the products you are bringing to the market?&lt;br /&gt;&lt;br /&gt;[TH] Our first product was the Hovitaga &lt;a href=&quot;http://www.hovitaga.com/opensql-editor-overview&quot;&gt;OpenSQL Editor&lt;/a&gt;, a tool which can execute SQL commands on the fly. The results of SQL queries are displayed immediately by an ALV grid or a hierarchical ALV tree. We&#39;ve packed a lot of features that help developers to create Select statements quickly. The second product is based on the first one, it is called Hovitaga &lt;a href=&quot;http://www.hovitaga.com/report-generator-overview&quot;&gt;Report Generator&lt;/a&gt;. The great feature of it is that it can generate standard SAP reports based on an SQL query. Depending on generation settings, 200-1000+ lines of code can be generated. You can imagine how much time you can spare with this. These tools can cut SAP IT costs by significantly reducing ABAP development, testing and maintenance time.&lt;br /&gt;&lt;br /&gt;Our current development is a radically new kind of business intelligence tool called Hovitaga Data Visualizer. It is unique because it is based on Microsoft Silverligt, but it actually runs in the traditional SAP Gui. It can visualize data coming from SQL statements, ALV reports, SAP Queries (SQ01) or tables and views. The added business value comes from the way how data is presented: instead of a simple ALV list, you can analyze business data with interactive charts, maps, pivot grids, treemaps etc. This product is still in development, we currently seek a pilot customer and/or a development company who would join the development. We have just uploaded the first &lt;a href=&quot;http://www.youtube.com/watch?v=MYC66eSSE2w&amp;hd=1&quot;&gt;video&lt;/a&gt; to youtube.&lt;br /&gt;&lt;br /&gt;[PL] How did you come up with the idea of building those applications?&lt;br /&gt;&lt;br /&gt;[TH] The SQL editor was missing from the ABAP workbench:) I decided to write one. Again from a personal experience I wanted  to reduce the amount of repetitive coding so we came up with the Report Generator. As for the Data Visualizer, I was on the opinion that SAP and SAP customers have put so much effort in developing highly complex business logic to extract data from the database (in forms of reports, queries) that it&#39;s a shame that the results of them are analyzed with a simple ALV list. Actually none of these products were suggested by any customer. That would have been much easier if a company would have sponsored the development.&lt;br /&gt;&lt;br /&gt;[PL] Do you think the SAP platform is a good foundation for building a company that develops applications? What major strengths and weaknesses did you find?&lt;br /&gt;&lt;br /&gt;[TH] In general it is all right. However if you want to gain exposure, you have to invest a lot of money. Presenting at TechEd or SAPPHIRE Now costs a tens of thousands (USD), advertising in SAP related magazines and websites is also expensive. &lt;br /&gt;&lt;br /&gt;[PL] How do you distribute your applications? Do you use transports, saplink or something else?&lt;br /&gt;&lt;br /&gt;[TH] This depends on what we want to deliver. I think we are the first company in the world (of course I can&#39;t be sure) who offer a totally free trial version of their SAP software. Anybody can download a free version of the OpenSQL Editor and Report Generator tools. In order to make the installation even more simple, we have made them &quot;self installing&quot;, which means that all you have to do is to copy and paste the downloaded sourcecode into a new report with SE38, activate and execute. It will create the necessary screens, GUI status, messages etc automatically. We consider making a SapLink version also available for download. As for the full version of the products, my experience shows that customers are fine with transport files.&lt;br /&gt;&lt;br /&gt;[PL] Are you planning to use WebDynpro for new developments?&lt;br /&gt;&lt;br /&gt;[TH] No, not at all. I believe not so many customers use it, and it&#39;s already an out-of-date technology.&lt;br /&gt;&lt;br /&gt;[PL] That&#39;s interesting. How do you see the future of GUI in SAP? Do you think classic Dynpro will be improved or do you think something else will become the SAP GUI of the future?&lt;br /&gt;&lt;br /&gt;[TH] I think the UI will not be unified in the short or middle-term future. The traditional SAP GUI will stay for a very long time, and SAP will continue coming up with new technologies. However I&#39;m not sure if those will get the desired popularity. Maybe if they do something with HTML5. But anyway, new technology is only accepted if it adds something to the business.&lt;br /&gt;&lt;br /&gt;[PL] Are there some new SAP technologies do you think can be particularly interesting to independent developers?&lt;br /&gt;&lt;br /&gt;[TH] Yes, the Netweaver Gateway and mobile applications in general, for example. Nowadays everybody has a smartphone and tablets are very popular these days.&lt;br /&gt;&lt;br /&gt;[PL] What has been your experience with selling the applications to the customers? Do you think companies are open to evaluate applications from independent developers?&lt;br /&gt;&lt;br /&gt;[TH] Our free products have been downloaded more than 500 times since mid of September 2011. This makes me optimistic. Around 20% of website visitors end up downloading a trial product.&lt;br /&gt;&lt;br /&gt;[PL] Can you tell us more about your marketing channels? Do you get many inquiries from the website?&lt;br /&gt;&lt;br /&gt;[TH] Since we&#39;ve made the free trials available we have received around ten quotes from the website, but I know the purchasing departments of big companies (big enough to run SAP) usually work slowly. If there is a download in January, I expect a quote no sooner than February and an actual purchase not before April. We are considering to place our products in online webshops, but I&#39;m not sure how many visitors and quotes would that add. Naturally this again would cost thousands of Euros per year per product.&lt;br /&gt; &lt;br /&gt;[PL] I know many networks of companies focused on SAP consulting but so far I did not find any network of companies working on SAP applications. Do you know such networks?&lt;br /&gt;&lt;br /&gt;[TH] No, please tell me if you know one :)&lt;br /&gt;&lt;br /&gt;I will keep looking and let you know if I find one :-). Thanks, Tamás for this interview, I think it will be very interesting to many people and it is a great first post of 2012 for apolemia. I hope to have more post related to independent SAP developers during this year.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2554770972788249901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2554770972788249901?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2554770972788249901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2554770972788249901'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2012/01/interview-with-tamas-holics.html' title='Interview with Tamás Holics'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-1437402790419938201</id><published>2011-10-04T10:48:00.001+01:00</published><updated>2011-10-04T10:50:14.754+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><category scheme="http://www.blogger.com/atom/ns#" term="saplink"/><title type='text'>Using ZAKE to export objects to the filesystem</title><content type='html'>&lt;p&gt;A script to use &lt;a href=&quot;http://saplink.org&quot;&gt;ZAKE&lt;/a&gt; to export a package to the filesystem. I&#39;m starting to use ZAKE and SAPLink to synchronize the ABAP repository with the mercurial version control system, so the default SVN object was not good for my goal. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src=&quot;https://gist.github.com/1259508.js?file=z_zake_fs_from_package&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/1437402790419938201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/1437402790419938201?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1437402790419938201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1437402790419938201'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2011/10/using-zake-to-export-objects-to.html' title='Using ZAKE to export objects to the filesystem'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2937256138854961050</id><published>2011-09-22T11:30:00.002+01:00</published><updated>2011-09-22T11:33:25.509+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="onsap"/><title type='text'>onsap.com update</title><content type='html'>I&#39;m again using &lt;a href=&quot;http://www.onsap.com&quot;&gt;onsap.com&lt;/a&gt; to record questions and answers. Now the site allows users to subscribe to email updates of individual questions or tags so it is more useful as a way to follow some topic. I still think it can be a good tool for SAP people. I will keep using it to record my questions (and perhaps later update it with answers) and to learn a bit more from trying to answer other questions. &lt;br /&gt;&lt;br /&gt;You can follow my activity &lt;a href=&quot;http://www.onsap.com/users/2/pedrolima&quot;&gt;here&lt;/a&gt; and you&#39;re very welcome to &lt;a href=&quot;http://www.onsap.com/account/signin/&quot;&gt;join&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2937256138854961050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2937256138854961050?isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2937256138854961050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2937256138854961050'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2011/09/onsapcom-update.html' title='onsap.com update'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-5301996324208747830</id><published>2011-09-20T11:27:00.003+01:00</published><updated>2011-09-20T11:34:40.276+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><title type='text'>Random element from a table in ABAP</title><content type='html'>One function I find myself using a lot in python is random.choice that gives me a random element from a list. Quick example in python:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import random&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; for i in range(20):&lt;br /&gt;...    print random.choice([&#39;A&#39;,&#39;B&#39;,&#39;C&#39;,&#39;D&#39;]),&lt;br /&gt;...&lt;br /&gt;C A D C C D A D C B B B B C B C A C D B&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It turns out it is not that difficult to do the same in ABAP.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class lcl_random definition.&lt;br /&gt; public section.&lt;br /&gt;   class-methods choice importing it_table type standard table&lt;br /&gt;                        exporting es_row type any.&lt;br /&gt;endclass.&lt;br /&gt;&lt;br /&gt;class lcl_random implementation.&lt;br /&gt; method choice.&lt;br /&gt;   data: l_size type i,&lt;br /&gt;         l_index type i.&lt;br /&gt;&lt;br /&gt;   describe table it_table lines l_size.&lt;br /&gt;&lt;br /&gt;   call function &#39;QF05_RANDOM_INTEGER&#39;&lt;br /&gt;     exporting&lt;br /&gt;       ran_int_max   = l_size&lt;br /&gt;       ran_int_min   = 1&lt;br /&gt;     importing&lt;br /&gt;       ran_int       = l_index&lt;br /&gt;     exceptions&lt;br /&gt;       invalid_input = 1&lt;br /&gt;       others        = 2.&lt;br /&gt; &lt;br /&gt;   if sy-subrc = 0.&lt;br /&gt;    read table it_table into es_row index l_index.&lt;br /&gt;   endif.&lt;br /&gt; endmethod.                   &lt;br /&gt;endclass.                   &lt;br /&gt;&lt;br /&gt;form test.&lt;br /&gt; data: lt_test type table of char1,&lt;br /&gt;       l_test type char1.&lt;br /&gt;&lt;br /&gt; l_test = &#39;A&#39;.&lt;br /&gt; append l_test to lt_test.&lt;br /&gt; l_test = &#39;B&#39;.&lt;br /&gt; append l_test to lt_test.&lt;br /&gt; l_test = &#39;C&#39;.&lt;br /&gt; append l_test to lt_test.&lt;br /&gt; l_test = &#39;D&#39;.&lt;br /&gt; append l_test to lt_test.&lt;br /&gt;&lt;br /&gt; do 20 times.&lt;br /&gt;   lcl_random=&amp;gt;choice( exporting it_table = lt_test importing es_row = l_test ).&lt;br /&gt;   write: l_test.&lt;br /&gt; enddo.&lt;br /&gt;endform.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/5301996324208747830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/5301996324208747830?isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5301996324208747830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5301996324208747830'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2011/09/random-element-from-table-in-abap.html' title='Random element from a table in ABAP'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-1792652117900081275</id><published>2011-04-12T11:57:00.007+01:00</published><updated>2011-04-12T18:03:32.966+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abap"/><title type='text'>Test functions in SE37 with commit execution</title><content type='html'>&lt;p&gt;A very simple trick that I only learned recently. A couple of times I faced the situation that I had a function that I could call to solve my problem. I would like to do it in SE37, but the function would need a COMMIT to be called after execution. I thought it was not possible to do in SE37 but it actually is. There is an option to test sequences:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 340px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnP32iZm2acMNgaZQ4L_-Wga6_cZzZjxTVUiJkVxqRunE4xkPmsoNKWlm8-bmYpc8Yn5wM9jShhVXgrrd7ZH1eqMFYuuMHWv7PYPtt5YzazP1zJB3DpbVV8HU0YQ92UeXqBSYY/s400/se37a.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5594743554929901666&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So I just need to put my function and to perform the commit I can use the standard function BAPI_TRANSACTION_COMMIT.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 340px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCmJ5p8eRczG_JuYgn58njjBM_0byIeTtip1wZwzURqmmMAF-LQ81xsc3fIfCofX3g_PfFExJOZAWbSQTqhDcJ3NQ7_xmfiaH_voZX95yNWUTBzZXv-touwgbHgr0LhSOxT2_-/s400/se37b.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5594650304984015682&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/1792652117900081275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/1792652117900081275?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1792652117900081275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/1792652117900081275'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2011/04/test-functions-in-se37-with-commit.html' title='Test functions in SE37 with commit execution'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnP32iZm2acMNgaZQ4L_-Wga6_cZzZjxTVUiJkVxqRunE4xkPmsoNKWlm8-bmYpc8Yn5wM9jShhVXgrrd7ZH1eqMFYuuMHWv7PYPtt5YzazP1zJB3DpbVV8HU0YQ92UeXqBSYY/s72-c/se37a.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-5319640197038133890</id><published>2010-10-05T21:24:00.003+01:00</published><updated>2010-10-05T21:29:07.497+01:00</updated><title type='text'>How to see the number of objects in the Live Cache</title><content type='html'>&lt;p&gt;A quite useful report for checking the number of objects in the live cache is /SAPAPO/OM_LVC_OBJECTS. And since I only use it from time to time it&#39;s better to write something here so that I don&#39;t spend so much time searching for it the next time :-). More on the report in OSS 537210.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 305px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkUB7U_6VPRQH01Zqe0VJ1Px9h-dBPe3rS2X-8JeZox3uqsMS3CPIJxNRqlpd79sKAfoqFuUwBT8EE5sUIQlQ1L9nD7lBvEYiIEoiYcgdxl-ehU_p5MFpDFTTb1JSiVI5SlmY/s400/LC_objects.PNG&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5524661001247968450&quot; /&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/5319640197038133890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/5319640197038133890?isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5319640197038133890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/5319640197038133890'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2010/10/how-to-see-number-of-objects-in-live.html' title='How to see the number of objects in the Live Cache'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHkUB7U_6VPRQH01Zqe0VJ1Px9h-dBPe3rS2X-8JeZox3uqsMS3CPIJxNRqlpd79sKAfoqFuUwBT8EE5sUIQlQ1L9nD7lBvEYiIEoiYcgdxl-ehU_p5MFpDFTTb1JSiVI5SlmY/s72-c/LC_objects.PNG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2236738441515696415</id><published>2010-10-05T21:09:00.008+01:00</published><updated>2010-10-05T21:24:03.483+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="atp"/><title type='text'>Issue with scheduling in delivered sales items</title><content type='html'>&lt;p&gt;Just a note to myself as I know I will have to answer this again. After the sales order item is delivered (even partially) the item is no longer scheduled. So what happens: the material availability date is calculated and all other dates are set equal to the delivery date (see FAQ OSS note 547508 item 2). &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For example this was the item with correct schedules (the item was partially delivered): &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 360px; height: 52px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg57OHj_IbqKwB7wkhOxBNKdA4fAvGj8DFYjlS4QHzgDhwMx5M4kfyz4xR8ulqHeyIL3erdusND2aG8e_2z9J5oq0iJvQ9f5Mlze1-CkTfujKwulzdoIWkSOZdEKW0HUqNJyjXv/s400/img1.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5524659092915401218&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 327px; height: 88px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil51fvwNhDxU7jWr5tPrSUw0cNPjXCEQCB7a_Fg4sj7wxClBJz3HqIBrbASiprkjGHLMTM_3eHL70v4HUZGxjVyzgKGUzDTdKoELOdU25CPEQnWmrOYeUsYKqGG4SUrJZEjINW/s400/img2.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5524659361854804530&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;And after a change in the item the scheduling becomes:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 327px; height: 89px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrmYrP5aoP5rC6lfeIhu6caBxo-BR3KEZoH4XxiisJGz348xin4CuAgKODSQKeZVWtgscSek4XY5cp7fMbaXqKa9cw2wah_wcDDFC9cUGZoCjwWr-Upbewiq4VdUZQdeFaNyNf/s400/img3.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5524659497281365650&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;So the goods issue date is not the most reliable date, better use the delivery date or material availability date. The code responsible for this behavior is in FV45VFMV_MVERF_AUFBAUEN_WMENG line 763.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  [...]&lt;br /&gt;    XVBEP-MBDAT = DA_DATUM.&lt;br /&gt;  ENDIF.                                    &lt;br /&gt;  XVBEP-LDDAT = DA_XVBEP-EDATU.&lt;br /&gt;  XVBEP-TDDAT = DA_XVBEP-EDATU.&lt;br /&gt;  XVBEP-WADAT = DA_XVBEP-EDATU.&lt;br /&gt;  [...]&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There is a possible fix by applying OSS note 833272, but this note (at least currently) is a special development not something going into support packages.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2236738441515696415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2236738441515696415?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2236738441515696415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2236738441515696415'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2010/10/issue-with-scheduling-in-delivered_05.html' title='Issue with scheduling in delivered sales items'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg57OHj_IbqKwB7wkhOxBNKdA4fAvGj8DFYjlS4QHzgDhwMx5M4kfyz4xR8ulqHeyIL3erdusND2aG8e_2z9J5oq0iJvQ9f5Mlze1-CkTfujKwulzdoIWkSOZdEKW0HUqNJyjXv/s72-c/img1.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-2896530715043927188</id><published>2010-05-06T15:10:00.000+01:00</published><updated>2010-05-06T15:10:13.453+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Funny SAP"/><title type='text'>Funny SAP: Report /SAPAPO/SDORDER_DEL</title><content type='html'>&lt;div style=&quot;text-align: justify;&quot;&gt;The program is useful and executing it in a systematic basis will make the database/livecache cleaner and faster.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFqRVRfiSjYaJfxcTtNFE-7zvVUhtcfPpWtMutaMu1BnYrsOi0IWQY2nlcWNIWqym8enR3SHggzmDmJZB4N1kMLloBycCs4N6agdxR5flsUsi_ZrxGwL09cAEqQZP4SFlacN2_/s1600/SDORDER_DEL.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFqRVRfiSjYaJfxcTtNFE-7zvVUhtcfPpWtMutaMu1BnYrsOi0IWQY2nlcWNIWqym8enR3SHggzmDmJZB4N1kMLloBycCs4N6agdxR5flsUsi_ZrxGwL09cAEqQZP4SFlacN2_/s320/SDORDER_DEL.png&quot; wt=&quot;true&quot; /&gt;&lt;/a&gt;&lt;/div&gt;No mercy with old data in SCM the system!</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/2896530715043927188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/2896530715043927188?isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2896530715043927188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/2896530715043927188'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2010/05/funny-sap-report-sapaposdorderdel.html' title='Funny SAP: Report /SAPAPO/SDORDER_DEL'/><author><name>Lima da Silva</name><uri>http://www.blogger.com/profile/11031207537984580818</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFqRVRfiSjYaJfxcTtNFE-7zvVUhtcfPpWtMutaMu1BnYrsOi0IWQY2nlcWNIWqym8enR3SHggzmDmJZB4N1kMLloBycCs4N6agdxR5flsUsi_ZrxGwL09cAEqQZP4SFlacN2_/s72-c/SDORDER_DEL.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6297557.post-3602679620344007313</id><published>2010-04-19T22:59:00.004+01:00</published><updated>2010-04-20T17:58:13.019+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="atp"/><title type='text'>ATP requirement type configuration flowchart</title><content type='html'>Time after time I find myself googling for some of my old posts. Most of the times for ABAP code related posts to copy the program, but I also look often for &lt;a href=&quot;http://apolemia.blogspot.com/2006/07/algorithm-for-requirement-typecheck.html&quot;&gt;this one&lt;/a&gt; on the configuration of the requirement type in ATP. I recently created a flowchart with that information for a presentation, so I am now posting it here to make my life easier in the future (click to enlarge).&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8ID6TB1p5QJxejKnXS5nwZCAemycZOwC6y3w0Kc_zXQClPCyihAIpCvAG1ycyW-bo2gUadOZdVtbxxgdqmSybPdl5HWTvisaYdVfEZYal8iNa5w2Ugk9FNJk5aPcoMdTs9AyX/s1600/large_flowchart.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand; &quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8ID6TB1p5QJxejKnXS5nwZCAemycZOwC6y3w0Kc_zXQClPCyihAIpCvAG1ycyW-bo2gUadOZdVtbxxgdqmSybPdl5HWTvisaYdVfEZYal8iNa5w2Ugk9FNJk5aPcoMdTs9AyX/s400/large_flowchart.png&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5462264066591920306&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://apolemia.blogspot.com/feeds/3602679620344007313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6297557/3602679620344007313?isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/3602679620344007313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6297557/posts/default/3602679620344007313'/><link rel='alternate' type='text/html' href='http://apolemia.blogspot.com/2010/04/atp-requirement-type-configuration.html' title='ATP requirement type configuration flowchart'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8ID6TB1p5QJxejKnXS5nwZCAemycZOwC6y3w0Kc_zXQClPCyihAIpCvAG1ycyW-bo2gUadOZdVtbxxgdqmSybPdl5HWTvisaYdVfEZYal8iNa5w2Ugk9FNJk5aPcoMdTs9AyX/s72-c/large_flowchart.png" height="72" width="72"/><thr:total>1</thr:total></entry></feed>