<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>artigos on Abapinho</title><link>https://abapinho.com/en/categories/artigos/</link><description>Recent content in artigos on Abapinho</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>&amp;copy;2009-2026 Nuno Godinho</copyright><lastBuildDate>Mon, 27 Apr 2026 09:00:00 +0000</lastBuildDate><atom:link href="https://abapinho.com/en/categories/artigos/index.xml" rel="self" type="application/rss+xml"/><item><title>I hate magic numbers</title><link>https://abapinho.com/en/2026/04/odeio-numeros-magicos/</link><pubDate>Mon, 27 Apr 2026 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2026/04/odeio-numeros-magicos/</guid><description>&lt;p>Those who work in SAP think it&amp;rsquo;s normal for everything to be represented by obscure codes that mean nothing. But it doesn&amp;rsquo;t have to be this way. Stop it! Create human-readable codes please.&lt;/p></description></item><item><title>Set a baseline for your ATC</title><link>https://abapinho.com/en/2025/10/atc-baseline/</link><pubDate>Mon, 20 Oct 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/10/atc-baseline/</guid><description>&lt;p>Did you know that you can set a starting point for ATC and, thanks to that, be able to run ATC in legacy code?&lt;/p></description></item><item><title>Kintsugi</title><link>https://abapinho.com/en/2025/10/kintsugi/</link><pubDate>Mon, 13 Oct 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/10/kintsugi/</guid><description>&lt;p>When a porcelain object breaks in Japan, sometimes instead of throwing it away, they mend it. But they don&amp;rsquo;t mend it just any old way; they mend it with gold. This technique is called Kintsugi.&lt;/p></description></item><item><title>Why always MODIFY?</title><link>https://abapinho.com/en/2025/10/porque-modify/</link><pubDate>Mon, 06 Oct 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/10/porque-modify/</guid><description>&lt;p>It is a common practice in ABAP to use MODIFY instead of INSERT and UPDATE. Do you do it too? Tell me why. Is it laziness? Is it fear? Is it just a matter of &amp;ldquo;whatever&amp;rdquo;? Or is it more like &amp;ldquo;screw it&amp;rdquo;?&lt;/p></description></item><item><title>On broken windows</title><link>https://abapinho.com/en/2025/06/sobre-janelas-partidsa/</link><pubDate>Mon, 09 Jun 2025 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2025/06/sobre-janelas-partidsa/</guid><description>&lt;p>The broken window theory says that if a window in a building is broken and not repaired quickly, people will be tempted to throw stones and break the other windows.&lt;/p></description></item><item><title>It's normal to not get it right the first time</title><link>https://abapinho.com/en/2025/04/nao-se-acerta-a-primeira/</link><pubDate>Mon, 07 Apr 2025 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2025/04/nao-se-acerta-a-primeira/</guid><description>&lt;p>In the ABAP world, the rule is to do it once and never touch it again. Once done, forever frozen. What nonsense.&lt;/p></description></item><item><title>Where? Who? What? How?</title><link>https://abapinho.com/en/2025/03/onde-quem-oque-como/</link><pubDate>Mon, 17 Mar 2025 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2025/03/onde-quem-oque-como/</guid><description>&lt;p>You&amp;rsquo;ve been asked to create a new feature. You&amp;rsquo;re ready to build it. But hold your horses. Before you start, I suggest you find answers to a few questions. Finding a good answer to each of them is fundamental to ensuring that what you build is solid and elegant.&lt;/p></description></item><item><title>No constant context changes in Eclipse ADT</title><link>https://abapinho.com/en/2024/04/eclipse-adt-mudanca-de-contexto/</link><pubDate>Mon, 01 Apr 2024 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2024/04/eclipse-adt-mudanca-de-contexto/</guid><description>&lt;p>Every time you switch contexts, you lose the thread slightly. It&amp;rsquo;s human nature. So the less you do, the better.&lt;/p></description></item><item><title>In Eclipse the compiler is not lazy</title><link>https://abapinho.com/en/2024/03/eclipse-adt-compilacao-constante/</link><pubDate>Mon, 25 Mar 2024 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2024/03/eclipse-adt-compilacao-constante/</guid><description>&lt;p>Still using SAPGUI instead of Eclipse ADT? Get ready to be made fun of.&lt;/p></description></item><item><title>Languages shape thought</title><link>https://abapinho.com/en/2024/02/linguagem-molda-pensamento/</link><pubDate>Mon, 05 Feb 2024 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2024/02/linguagem-molda-pensamento/</guid><description>&lt;p>I read somewhere that Eastern mathematicians tend to solve a different kind of mathematical problem than Western mathematicians do.&lt;/p></description></item><item><title>YAGNI</title><link>https://abapinho.com/en/2023/10/yagni/</link><pubDate>Mon, 16 Oct 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/10/yagni/</guid><description>&lt;p>&lt;em>You Ain&amp;rsquo;t Gonna Need It&lt;/em> means &lt;em>Do what you want, but don&amp;rsquo;t say I didn&amp;rsquo;t warn you&lt;/em>. Just kidding. Not really.&lt;/p></description></item><item><title>Fix prefixes</title><link>https://abapinho.com/en/2023/05/prefixos-fixos/</link><pubDate>Mon, 01 May 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/05/prefixos-fixos/</guid><description>&lt;p>It&amp;rsquo;s very easy to mess up with object names in SAP. I recently found a way to minimize that problem: set rules to fix per-package prefixes for certain object types.&lt;/p></description></item><item><title>I package everything that moves</title><link>https://abapinho.com/en/2023/04/empacota-tudo/</link><pubDate>Mon, 03 Apr 2023 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2023/04/empacota-tudo/</guid><description>&lt;p>I obsessively package everything that moves.&lt;/p></description></item><item><title>Undo with abapGit</title><link>https://abapinho.com/en/2023/03/abapgit-undo/</link><pubDate>Mon, 06 Mar 2023 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2023/03/abapgit-undo/</guid><description>&lt;p>Did you know that you can finally make radical changes to a development without fear
because there is a simple way to undo all those changes?&lt;/p></description></item><item><title>The 3 exception parents</title><link>https://abapinho.com/en/2023/02/exception-parents/</link><pubDate>Mon, 20 Feb 2023 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2023/02/exception-parents/</guid><description>&lt;p>OO exceptions always need a parent. They always have to inherit from somebody. And ABAP gives them 3 alternatives.&lt;/p></description></item><item><title>Let go of SE24</title><link>https://abapinho.com/en/2022/10/desmamar-a-se24/</link><pubDate>Mon, 03 Oct 2022 09:00:00 +0100</pubDate><guid>https://abapinho.com/en/2022/10/desmamar-a-se24/</guid><description>&lt;p>In SE24 the class code is partially hidden from the programmer behind a GUI. This is apparently convenient but ultimately limitative.&lt;/p></description></item><item><title>Can your users hack your SQL?</title><link>https://abapinho.com/en/2022/03/sql-injection/</link><pubDate>Mon, 21 Mar 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/03/sql-injection/</guid><description>&lt;p>Are you sure your SQL is bulletproof?&lt;/p></description></item><item><title>A program is an animal</title><link>https://abapinho.com/en/2022/02/animal/</link><pubDate>Mon, 28 Feb 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/02/animal/</guid><description>&lt;p>When a program is bad because it has duplicate code, it usually becomes shorter once we rewrite it to make it better. But, if its problem is not being properly structured into several classes and methods, if we rewrite it according to the best practices, it will probably end up longer.&lt;/p></description></item><item><title>Try poligamy</title><link>https://abapinho.com/en/2022/02/poligamia/</link><pubDate>Mon, 21 Feb 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/02/poligamia/</guid><description>&lt;p>Most ABAP programmers are like swans. They marry ABAP forever and are eternally faithful.&lt;/p></description></item><item><title>Farewell Wordpress, hello Jamstack</title><link>https://abapinho.com/en/2022/01/jamstack/</link><pubDate>Fri, 21 Jan 2022 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2022/01/jamstack/</guid><description>&lt;p>After over 10 year using &lt;a href="https://wordpress.org/">Wordpress&lt;/a>, the world evolved and Abapinho decided it&amp;rsquo;s time to evolve with it.&lt;/p></description></item><item><title>if you love your neighbour, avoid CLEAR</title><link>https://abapinho.com/en/2021/12/evita-o-clear/</link><pubDate>Mon, 13 Dec 2021 09:00:59 +0000</pubDate><guid>https://abapinho.com/en/2021/12/evita-o-clear/</guid><description>&lt;p>Please stop. Too many regressions happen because someone forgets to CLEAR or to not CLEAR a variable.&lt;/p></description></item><item><title>The RANGEs double negatives</title><link>https://abapinho.com/en/2021/07/as-duplas-negativas-dos-ranges/</link><pubDate>Mon, 26 Jul 2021 09:00:15 +0000</pubDate><guid>https://abapinho.com/en/2021/07/as-duplas-negativas-dos-ranges/</guid><description>&lt;p>RANGEs have interesting properties.&lt;/p></description></item><item><title>SELECT WHERE field IN (*, x)</title><link>https://abapinho.com/en/2021/07/select-where-field-in-a-b/</link><pubDate>Mon, 19 Jul 2021 09:00:53 +0000</pubDate><guid>https://abapinho.com/en/2021/07/select-where-field-in-a-b/</guid><description>&lt;p>Ok let&amp;rsquo;s go slowly on this one.&lt;/p>
&lt;p>Picture a scenario in which you have a customizing table with several levels of detail which may or may not be defined:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>BUKRS (empresa)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>WERKS (plant)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>LGORT (depósito)&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>When one of the fields is empty, we treat it as a wildcard, meaning all values are valid.&lt;/p></description></item><item><title>Goodbye Evernote, hello Osidian</title><link>https://abapinho.com/en/2020/12/obsidian/</link><pubDate>Thu, 17 Dec 2020 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2020/12/obsidian/</guid><description>&lt;p>After 10 years using Evernote, this year I finally started looking for better alternatives. At first Evernote was great. But it never evolved and the world moved on. So many new concepts have appeared: &lt;a href="https://joelhooks.com/digital-garden">jardins digitais&lt;/a>, &lt;a href="https://www.youtube.com/watch?v=n7xrHPpTWJ0">backlinks&lt;/a>, &lt;a href="https://en.wikipedia.org/wiki/Zettelkasten">Zettelkasten&lt;/a>, &lt;a href="https://notes.andymatuschak.org/Evergreen_notes">Evergreen notes&lt;/a>, &lt;a href="https://www.youtube.com/watch?v=WUq8Pun28FI">MOCs&lt;/a>, etc. And Evernote is still the same, forcing you to be a &lt;a href="https://www.linkingyourthinking.com">note taker instead of a note maker&lt;/a>.&lt;/p></description></item><item><title>Farewell Evernote, hello Notion</title><link>https://abapinho.com/en/2020/07/notion/</link><pubDate>Wed, 15 Jul 2020 11:20:11 +0000</pubDate><guid>https://abapinho.com/en/2020/07/notion/</guid><description>&lt;p>&lt;a href="https://abapinho.com/en/2010/04/evernote/">One of the first posts in Abapinho was about Evernote&lt;/a>. Well, it was actually about the importance of taking notes. But it suggested Evernote was the best tool for the job.&lt;/p>
&lt;p>It feels like yesterday but this was 10 years ago. 10 years using Evernote to take notes. Unfortunately whoever makes Evernote probably stopped taking notes many years ago because, since then, Evernote hardly evolved. Actually, it got worse, especially in its iOS version. After 10 years, they weren&amp;rsquo;t even able to (try to?) make a decent table editor. They&amp;rsquo;re either lazy or dumb.&lt;/p></description></item><item><title>The simplest route to go from SELECT to RANGE</title><link>https://abapinho.com/en/2019/11/o-caminho-mais-curto-para-ir-de-select-a-range/</link><pubDate>Wed, 13 Nov 2019 10:21:31 +0000</pubDate><guid>https://abapinho.com/en/2019/11/o-caminho-mais-curto-para-ir-de-select-a-range/</guid><description>&lt;p>Today we&amp;rsquo;ll try to optimize the code to convert a SELECT into a RANGE&lt;/p></description></item><item><title>Tree of Z packages - A modest proposal</title><link>https://abapinho.com/en/2019/10/arvore-de-pacotes-z/</link><pubDate>Wed, 23 Oct 2019 09:00:46 +0000</pubDate><guid>https://abapinho.com/en/2019/10/arvore-de-pacotes-z/</guid><description>&lt;p>If you regularly read Abapinho you probably know by now that I can&amp;rsquo;t live without &lt;a href="https://abapinho.com/en/2016/11/pacotes-locais/">ABAP Package Concept&lt;/a>. Nowadays the first thing I do when starting a new development is creating an encapsulated package to hold all its objects (in the most complex scenarios, I create it as a main package and then create multiple child sub-packages).&lt;/p>
&lt;p>I lay here a modest proposal (unlike &lt;a href="https://en.wikipedia.org/wiki/A_Modest_Proposal">the original one&lt;/a>, mine is not sarcastic) to help organize thing a bit at system level.&lt;/p></description></item><item><title>Save XML data in an ST (Simple Transformation)</title><link>https://abapinho.com/en/2019/04/guarda-dados-xml-numa-st-simple-transformation/</link><pubDate>Mon, 01 Apr 2019 09:00:59 +0000</pubDate><guid>https://abapinho.com/en/2019/04/guarda-dados-xml-numa-st-simple-transformation/</guid><description>&lt;p>Some days ago I was using an ST (Simple Transformation) and thought that, even though its job is to convert an input into an output, it is can be used to store XML data.&lt;/p>
&lt;p>Let&amp;rsquo;s asy we have the following XML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">&amp;lt;cocktails&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#00f">gt&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Gin&lt;/span> &lt;span style="color:#000">Tonic&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">ws&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Whiskey&lt;/span> &lt;span style="color:#000">Sour&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt;&lt;span style="color:#000">cocktail&lt;/span> &lt;span style="color:#00f">id&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">cl&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>; &lt;span style="color:#000">nome&lt;/span>=&amp;amp;&lt;span style="color:#000">quot&lt;/span>;&lt;span style="color:#000">Campari&lt;/span> &lt;span style="color:#000">Laranja&lt;/span>&amp;amp;&lt;span style="color:#000">quot&lt;/span>;/&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">&amp;lt;/cocktails&amp;gt;&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>When code smells</title><link>https://abapinho.com/en/2019/02/quando-o-codigo-cheira-mal/</link><pubDate>Mon, 25 Feb 2019 09:00:12 +0000</pubDate><guid>https://abapinho.com/en/2019/02/quando-o-codigo-cheira-mal/</guid><description>&lt;p>It happens very often that, while programming, I smell something strange. It&amp;rsquo;s usually hard to identify it right away. It usually starts like a faint fragrance. But, as I become more aware of it, eventually it starts stinking and I understand where it comes from. Even then it is not immediately clear why that particular thing smells bad.&lt;/p></description></item><item><title>You don't encapsulate for it to be reused</title><link>https://abapinho.com/en/2019/02/nao-e-para-reutilizar-que-se-encapsula/</link><pubDate>Mon, 18 Feb 2019 09:00:18 +0000</pubDate><guid>https://abapinho.com/en/2019/02/nao-e-para-reutilizar-que-se-encapsula/</guid><description>&lt;p>Since 1998, I hear some ABAPer colleagues saying that it&amp;rsquo;s not worth encapsulating a particular piece of code in a function or method because it will never be reused again. And then they go to SE38 and create yet another report full of includes.&lt;/p>
&lt;p>The idea that you should encapsulate your code for it to be reused by you or by others is one of the biggest misunderstandings of the history of our planet.&lt;/p></description></item><item><title>Refactoring: Extract method</title><link>https://abapinho.com/en/2019/01/refactorizacao-extrair-metodo/</link><pubDate>Wed, 02 Jan 2019 09:00:23 +0000</pubDate><guid>https://abapinho.com/en/2019/01/refactorizacao-extrair-metodo/</guid><description>&lt;p>In SAP&amp;rsquo;s world, ABAP code will forever stay wherever you leave it.&lt;/p>
&lt;p>On one given day, Manuel did something badly because he was on a rush or didn&amp;rsquo;t know any better. One year later António is asked to make a small change to it. António spots Manuel&amp;rsquo;s mess but he doesn&amp;rsquo;t improve it because, for some reasons, in SAP, changing something which is working, even if it&amp;rsquo;s badly implemented, is a tabu. Instead, António will add his code to the existing one and forget about it.&lt;/p>
&lt;p>This attitude, when adopted by everyone, contributes to an inevitable erosion of the system&amp;rsquo;s code which, some years later, becomes unmanageable. And still, that&amp;rsquo;s the rule.&lt;/p>
&lt;p>The way I see it, this is wrong and goes against the customer&amp;rsquo;s best interests. Actually, even if the customer doesn&amp;rsquo;t want me to modify old code because it&amp;rsquo;s working&amp;hellip; I still do it. Who is he to tell me how to program?&lt;/p></description></item><item><title>Test function module with data loaded from a file</title><link>https://abapinho.com/en/2018/06/testa-funcao-com-ficheiro/</link><pubDate>Mon, 04 Jun 2018 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2018/06/testa-funcao-com-ficheiro/</guid><description>&lt;p>Transaction SE37 lets you test function modules. Sometimes these function modules use tables. And sometimes you need to load these tables with a lot of data records. But the only way to do it is manually. Or maybe not&amp;hellip;&lt;/p>
&lt;p>Here&amp;rsquo;s a trick to do it using a file.&lt;/p></description></item><item><title>Serialization - Clone Dolly in ABAP</title><link>https://abapinho.com/en/2017/10/serializacao-abap/</link><pubDate>Mon, 30 Oct 2017 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2017/10/serializacao-abap/</guid><description>&lt;p>This article was written by José Vília:&lt;/p>
&lt;p>The Dolly sheep was alive in ABAP and I didn&amp;rsquo;t know about it.&lt;/p>
&lt;p>Having created a class instance, I&amp;rsquo;d like to share it with another totally independent program to use it as if the instance had been created there.&lt;/p>
&lt;p>It&amp;rsquo;s an ABAP Dolly sheep factory we&amp;rsquo;re talking about here, people. Serialization in the ABAP world.&lt;/p></description></item><item><title>ALV Grid built in error protocol</title><link>https://abapinho.com/en/2017/09/alv-grid-built-in-error-protocol/</link><pubDate>Mon, 11 Sep 2017 09:00:20 +0000</pubDate><guid>https://abapinho.com/en/2017/09/alv-grid-built-in-error-protocol/</guid><description>&lt;p>We&amp;rsquo;re all lazy. It&amp;rsquo;s just human. Programmers are human. We&amp;rsquo;re often lazy when it comes to the way we program something. And usually being lazy when making a program will result in someone else having more work when maintaining it.&lt;/p>
&lt;p>Let he who is free of laziness throw the first rock.&lt;/p>
&lt;p>I won&amp;rsquo;t!&lt;/p></description></item><item><title>PlantUML - Finally UML became simple to use</title><link>https://abapinho.com/en/2017/09/plantuml-finalmente-o-uml-da-para-usar/</link><pubDate>Tue, 05 Sep 2017 09:00:59 +0000</pubDate><guid>https://abapinho.com/en/2017/09/plantuml-finalmente-o-uml-da-para-usar/</guid><description>&lt;p>&lt;strong>Foreword&lt;/strong>&lt;/p>
&lt;p>When I say that I like to use UML class diagrams to document my code, people think I&amp;rsquo;m crazy.&lt;/p>
&lt;p>&lt;strong>Introduction&lt;/strong>&lt;/p>
&lt;p>The UML has gained a bad reputation because people think that, first you make the classes diagram in UML and only then write the program. But that was in 1996, when you the good practices said the first thing to do was the whole technical spec, even if no one really did it.&lt;/p>
&lt;p>Nowadays, fortunately, we are no longer ashamed to say that the very act of programming is already in itself a way of drawing.&lt;/p></description></item><item><title>ABAP used to like inverting dates</title><link>https://abapinho.com/en/2017/02/dantes-abap-gostava-inverter-datas/</link><pubDate>Mon, 27 Feb 2017 09:00:40 +0000</pubDate><guid>https://abapinho.com/en/2017/02/dantes-abap-gostava-inverter-datas/</guid><description>&lt;p>Every day I learn something new in ABAP. Sometimes I&amp;rsquo;d rather not learn them. Like this one.&lt;/p>
&lt;p>Table T056P has a date field. While SELECTing this table using the date as criteria I couldn&amp;rsquo;t get any result even though the code seemed correct. Using SE16N I found that the date range was also not working as expected: it would only should results if the final date was put in the LOW field and the initial date in the HIGH. Bizarre.&lt;/p></description></item><item><title>The transaction who wanted to call another and couldn't</title><link>https://abapinho.com/en/2017/02/a-transaccao-que-queria-chamar-outra-e-nao-podia/</link><pubDate>Mon, 06 Feb 2017 09:00:24 +0000</pubDate><guid>https://abapinho.com/en/2017/02/a-transaccao-que-queria-chamar-outra-e-nao-podia/</guid><description>&lt;p>John created transaction ZFB01 and associated it with program ZFB01 which, after doing some stuff, does a CALL TRANSACTION on FB01. Then came his friend Mike and ran transaction ZFB01.&lt;/p>
&lt;p>He managed to start running it because he had permissions to do it. But half way through he got an error because he doesn&amp;rsquo;t have permissions to run transaction FB01.&lt;/p>
&lt;p>Both John and Mike knew that the system administrators would never ever give Mike permission to run FB01.&lt;/p></description></item><item><title>Get the deepest text of chained exceptions</title><link>https://abapinho.com/en/2017/01/texto-mais-profundo-de-cadeia-de-excepcoes/</link><pubDate>Mon, 16 Jan 2017 10:34:04 +0000</pubDate><guid>https://abapinho.com/en/2017/01/texto-mais-profundo-de-cadeia-de-excepcoes/</guid><description>&lt;p>If you&amp;rsquo;re not already using ABAP Objects you&amp;rsquo;re &lt;a href="https://abapinho.com/en/2012/10/mariquinhas-pe-de-salsa/">chicken&lt;/a>.&lt;/p>
&lt;p>If you use them, I do hope you&amp;rsquo;re following the &lt;a href="https://abapinho.com/en/2015/01/usaras-classes-de-excepcao/">best practice&lt;/a> of using class exceptions.&lt;/p>
&lt;p>And if you&amp;rsquo;re using class exceptions you better understand the best way of using them, particularly the &lt;a href="https://abapinho.com/en/2015/02/cadeias-de-excepcoes/">advantages of chaining them&lt;/a>.&lt;/p>
&lt;p>This said, here&amp;rsquo;s what brings us here today. In the post about &lt;a href="https://abapinho.com/en/2015/02/cadeias-de-excepcoes/">chained exceptions&lt;/a> I showed a way to get the text of the deepest exception in the chain by using a WHILE loop:&lt;/p></description></item><item><title>How to not screw up when returning a REF TO DATA</title><link>https://abapinho.com/en/2017/01/devolver-ref-to-data/</link><pubDate>Mon, 02 Jan 2017 09:00:26 +0000</pubDate><guid>https://abapinho.com/en/2017/01/devolver-ref-to-data/</guid><description>&lt;p>I&amp;rsquo;ve been using more and more references in ABAP.&lt;/p>
&lt;p>I used to use REF TO only for classes but I&amp;rsquo;ve been finding more and more advantages in using them for other data types. But, just like in C++, care must be used when dealing with data references. Things can easily go very wrong.&lt;/p>
&lt;p>In this article, I&amp;rsquo;ll try to show you how to use and how not to use REF TO DATA. Let&amp;rsquo;s start by an example of how not to do it.&lt;/p></description></item><item><title>Local $PACKAGES</title><link>https://abapinho.com/en/2016/11/pacotes-locais/</link><pubDate>Mon, 07 Nov 2016 09:00:37 +0000</pubDate><guid>https://abapinho.com/en/2016/11/pacotes-locais/</guid><description>&lt;p>Any object created in SAP must belong to a package.&lt;/p>
&lt;p>Until recently, whenever I needed to create a program for a quick test I&amp;rsquo;d put it in the $TMP package. This way I was sure that it would never be transported to another system.&lt;/p>
&lt;p>But sometimes I have the need to create stuff in the development system which, even though it should never be transported, should stay there forever. For example, development tools like ZSAPLINK and abapGit. But if we put everything under package $TMP it will soon be a big mess.&lt;/p></description></item><item><title>INSERT wa INTO itbl REFERENCE INTO ref. Bug?</title><link>https://abapinho.com/en/2016/10/reference-into-ref-bug/</link><pubDate>Mon, 03 Oct 2016 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2016/10/reference-into-ref-bug/</guid><description>&lt;p>Every day I use more reference variables in ABAP. First I used REF TO just for classes but, as I become more familiarized with its advantages, I start using them more and more for data structures, instead of field-symbols.&lt;/p>
&lt;p>But I recently found na unfortunate behavior of the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">INSERT&lt;/span> &lt;span style="color:#000">wa&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">itbl&lt;/span> &lt;span style="color:#00f">REFERENCE INTO&lt;/span> &lt;span style="color:#000">ref&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Let me give you some context before I complain about it.&lt;/p></description></item><item><title>We should be accountable for the crap we make</title><link>https://abapinho.com/en/2016/09/deviamos-ser-responsabilizados/</link><pubDate>Mon, 19 Sep 2016 09:00:33 +0000</pubDate><guid>https://abapinho.com/en/2016/09/deviamos-ser-responsabilizados/</guid><description>&lt;p>If, when building a bridge, a civil engineer makes a mistake in one of the calculations, the bridge falls. But the bridge won&amp;rsquo;t fall alone. Most probably that engineer will also fall with it. He is accountable for what he did because he must sign his projects.&lt;/p>
&lt;p>ABAP programmers don&amp;rsquo;t have that kind of problems.&lt;/p></description></item><item><title>ABAP Code PushDown in HANA</title><link>https://abapinho.com/en/2016/07/abap-code-pushdown-on-sqlscript/</link><pubDate>Mon, 25 Jul 2016 09:00:10 +0000</pubDate><guid>https://abapinho.com/en/2016/07/abap-code-pushdown-on-sqlscript/</guid><description>&lt;p>[Guest post by Artur Moreira]&lt;/p>
&lt;p>From ABAP version 7.4, SAP introduced the code pushdown concept, which means using more database for calculations (data aggregation, sums and previous calculations).&lt;/p></description></item><item><title>GROUP BY in LOOPs on internal tables</title><link>https://abapinho.com/en/2016/03/group-by-loops-tabelas-internas/</link><pubDate>Mon, 21 Mar 2016 09:00:57 +0000</pubDate><guid>https://abapinho.com/en/2016/03/group-by-loops-tabelas-internas/</guid><description>&lt;p>We&amp;rsquo;ve all sorted internal tables to use AT NEW on a LOOP.
But starting from 7.40, we can use GROUP BY on LOOPs.&lt;/p>
&lt;p>The ability to group by values based on expressions or even methods is great.&lt;/p>
&lt;p>The grouping is done on the first LOOP and can be processed afterwards. Try running the code below and I bet you&amp;rsquo;ll be as impressed as I was.&lt;/p></description></item><item><title>Can you really do it right the first time?</title><link>https://abapinho.com/en/2016/03/saabs-assertar-primeira/</link><pubDate>Mon, 07 Mar 2016 09:00:13 +0000</pubDate><guid>https://abapinho.com/en/2016/03/saabs-assertar-primeira/</guid><description>&lt;p>Checkpoints is a very powerful ABAP framework which almost nobody uses. Why? Probably for the same reason hardly anyone listens to &lt;a href="https://pt.wikipedia.org/wiki/Sun_Ra">Sun Ra&lt;/a> and knows that &lt;a href="https://pt.wikipedia.org/wiki/Frank_Zappa">Frank Zappa&lt;/a> has 102 albums. Because, even though really good, it’s obscure and not commercial. Checkpoints are, indeed, really good and not commercial. But they should be more like Mozart and the Beach Boys which are both good and commercial.&lt;/p></description></item><item><title>STA Ticket System improve SAP incident handling times</title><link>https://abapinho.com/en/2016/02/sta-ticket-system/</link><pubDate>Mon, 29 Feb 2016 09:00:53 +0000</pubDate><guid>https://abapinho.com/en/2016/02/sta-ticket-system/</guid><description>&lt;p>Today we have a guest, Tamás Holics. He owns STA Consulting, a Hungarian company which has created 2 very interesting SAP products. In this article Tamás presents the STA Ticket System.&lt;/p>
&lt;h2 id="the-problem">The problem&lt;/h2>
&lt;p>A lot of time is wasted in SAP software testing and maintenance processes due to incomplete or incorrect error reports from users and testers. Support people (analysts, developers) usually have to ask for more information about the error. This takes a lot of valuable working time from both the reporters of the error and support people. Solving the problem is often blocked until every information is available.&lt;/p></description></item><item><title>The rot is noble after all</title><link>https://abapinho.com/en/2016/02/the-rot-is-noble-after-all/</link><pubDate>Mon, 22 Feb 2016 09:00:45 +0000</pubDate><guid>https://abapinho.com/en/2016/02/the-rot-is-noble-after-all/</guid><description>&lt;p>For many years I&amp;rsquo;ve been complaining about how backward ABAP development ecosystem is and how long it takes to evolve. Every time he heard me saying it a good friend of mine would wisely advise me to never bite the hand that feeds you.&lt;/p>
&lt;p>But how can a man not speak out?&lt;/p></description></item><item><title>Software design patterns in ABAP</title><link>https://abapinho.com/en/2016/02/padroes-de-projecto-de-software/</link><pubDate>Mon, 15 Feb 2016 09:00:26 +0000</pubDate><guid>https://abapinho.com/en/2016/02/padroes-de-projecto-de-software/</guid><description>We are constantly learning. But once in a while we learn something which is a leap forward forcing us to look in a new way to everything we do.
The last time this had happened was when I started using OO in ABAP. OO was not new to me as I had already used it extensively in Java, C#, C++, etc. But to finally be able to apply these precious concepts on my daily job was a relief and a big improvement in the quality, flexibility and speed of my work.</description></item><item><title>Internal table secondary indexes</title><link>https://abapinho.com/en/2016/01/indices-secundarios-em-tabelas-internas/</link><pubDate>Mon, 25 Jan 2016 09:00:47 +0000</pubDate><guid>https://abapinho.com/en/2016/01/indices-secundarios-em-tabelas-internas/</guid><description>&lt;p>This is how internal tables used to be declared:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">itbl&lt;/span> &lt;span style="color:#00f">TYPE TABLE OF&lt;/span> &lt;span style="color:#000">bkpf&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>How to sabotage standard texts</title><link>https://abapinho.com/en/2015/11/como-sabotar-textos-standard/</link><pubDate>Mon, 23 Nov 2015 09:00:43 +0000</pubDate><guid>https://abapinho.com/en/2015/11/como-sabotar-textos-standard/</guid><description>&lt;p>Some times I don&amp;rsquo;t like the names SAP gave to things. So I change them.&lt;/p>
&lt;p>For example, one day I was very angry and thought all customers were parasites.&lt;/p>
&lt;p>So I did the following:&lt;/p></description></item><item><title>In ABAP's name, I baptize you</title><link>https://abapinho.com/en/2015/10/eu-te-baptizo-em-nome-do-abap/</link><pubDate>Mon, 26 Oct 2015 09:00:05 +0000</pubDate><guid>https://abapinho.com/en/2015/10/eu-te-baptizo-em-nome-do-abap/</guid><description>&lt;p>When we learn ABAP, we are taught a series of rules on how to name variables. Not everyone uses the same rules but, still, some strict rules are shared between many people:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Local variables must start with L: L_BUKRS;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Global variables must start with G: G_MODE;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Internal tables must have T_: LT_MARA;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Structures must have S_: LS_MARA;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Object references must have R_: R_CUSTOMER;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;em>input&lt;/em> parameters must start with I, &lt;em>output&lt;/em> with O, &lt;em>changing&lt;/em> with C and &lt;em>returning&lt;/em> with R.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>And the most stupid of all, &lt;em>field-symbols&lt;/em> must start with FS_: &amp;lt;FS_MARA&amp;gt;.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In the early XXI century those rules made some sense (except for the &lt;em>field-symbols&lt;/em> on, which was, and still is, as stupid as writing &amp;lsquo;pencil&amp;rsquo; in all our pencils). Today they don&amp;rsquo;t make much sense anymore. Let me explain.&lt;/p></description></item><item><title>Abapinho Dev Tools: Translator</title><link>https://abapinho.com/en/2015/10/abapinho-dev-tools-translator/</link><pubDate>Thu, 22 Oct 2015 14:54:11 +0000</pubDate><guid>https://abapinho.com/en/2015/10/abapinho-dev-tools-translator/</guid><description>Nuno Morais has developed another very useful tool to help simplify mass translations of most SAP objects.
The toold is not for automatic translation between two languages. Instead, it has the following features:
Export an Excel file with texts
Import an Excel file with texts
Copy texts from one language into one or more languages
Create a transport order with the changed texts
Find object dependencies which lack translations
Provides a nicer browsing interface to help on manual translation</description></item><item><title>Abapinho Dev Tools: Dependencies</title><link>https://abapinho.com/en/2015/10/abapinho-dev-tools-dependencies/</link><pubDate>Thu, 22 Oct 2015 14:37:19 +0000</pubDate><guid>https://abapinho.com/en/2015/10/abapinho-dev-tools-dependencies/</guid><description>Nuno Morais developed a very useful tool which can compare objects between systems and works much better than transaction SREPO.
Abapinho will be its official repository.
Code in GitHub.
Soon, an instruction manual. Until then, go on and try it. If you like it or have any suggestion please leave a comment here.
Thank you Nuno for having developed this and for sharing it with the world in Abapinho.
Greetings from Abapinho.</description></item><item><title>DELETE vs CLEAR vs REFRESH vs FREE</title><link>https://abapinho.com/en/2015/07/delete-vs-clear-vs-refresh-vs-free/</link><pubDate>Mon, 27 Jul 2015 09:00:01 +0000</pubDate><guid>https://abapinho.com/en/2015/07/delete-vs-clear-vs-refresh-vs-free/</guid><description>&lt;p>DELETE
CLEAR
REFRESH
FREE&lt;/p>
&lt;p>These are different ways of deleting all data from an internal table. They look the same. But they aren&amp;rsquo;t.&lt;/p></description></item><item><title>Converting an exception into an exception</title><link>https://abapinho.com/en/2015/06/converter-excepcao-em-classe-de-excepcao/</link><pubDate>Mon, 01 Jun 2015 09:00:21 +0000</pubDate><guid>https://abapinho.com/en/2015/06/converter-excepcao-em-classe-de-excepcao/</guid><description>&lt;p>If you’re still not using exception classes, then you’re making a mistake. Cause they are very healthy for your code. They’re not only good nutrients for the system, they also make it lean and less vulnerable to diseases.&lt;/p>
&lt;p>There are cases where you still need to deal with the old exceptions. For example, when a function module is invoked.&lt;/p>
&lt;p>In this article I am presenting a suggestion that seems a little complex, but it works very well if you need to integrate the old exceptions with exception class in a simple way. And though it is sophisticated, you only need to do it once. Once it&amp;rsquo;s done, it&amp;rsquo;s easy to use.&lt;/p></description></item><item><title>Teach ABAP to juggle</title><link>https://abapinho.com/en/2015/05/processamento-paralelo/</link><pubDate>Mon, 18 May 2015 09:00:13 +0000</pubDate><guid>https://abapinho.com/en/2015/05/processamento-paralelo/</guid><description>&lt;p>What can be done when a night is not enough to complete the daily processes?&lt;/p></description></item><item><title>Text search in a WebDynpro</title><link>https://abapinho.com/en/2015/03/procurar-texto-numa-webdynpro/</link><pubDate>Mon, 23 Mar 2015 09:00:31 +0000</pubDate><guid>https://abapinho.com/en/2015/03/procurar-texto-numa-webdynpro/</guid><description>&lt;p>SAP doesn&amp;rsquo;t know how to do things right the first time. The WebDynpros are a good example of this. It doesn’t even let you do a text search. It&amp;rsquo;s sad.&lt;/p>
&lt;p>Fortunately Sérgio Fraga has found a way, though it’s rather laboured:&lt;/p></description></item><item><title>Chained exceptions</title><link>https://abapinho.com/en/2015/02/cadeias-de-excepcoes/</link><pubDate>Mon, 02 Feb 2015 09:00:48 +0000</pubDate><guid>https://abapinho.com/en/2015/02/cadeias-de-excepcoes/</guid><description>Today I will teach you how to chain exceptions. It’s a very practical solution to a complicated, not so obvious problem.
Let’s start by describing the problem.
Imagine you are in the application BANANA. The application is quite complex. It has three modules: BANANA1, BANANA2 and BANANA3. Each one has its exception class ZCX_BANANA1, ZCX_BANANA2 and ZCX_BANANA3. Since the application is in fact well designed, all the exception classes inherit from the same ZCX_BANANA.</description></item><item><title>Communication by event between programmes</title><link>https://abapinho.com/en/2014/12/comunicacao-por-evento-entre-programas/</link><pubDate>Mon, 22 Dec 2014 09:00:11 +0000</pubDate><guid>https://abapinho.com/en/2014/12/comunicacao-por-evento-entre-programas/</guid><description>&lt;p>In Greek mythology, the gods’ most commonly used means of communication with mortals was rape. They would rape for no reason whatsoever.&lt;/p>
&lt;p>The closest thing we have to rape in ABAP is the command “SUBMIT”, which is also the most common way of communicating between two programmes.&lt;/p></description></item><item><title>Packages 2.0</title><link>https://abapinho.com/en/2014/07/pacotes-2-0/</link><pubDate>Mon, 21 Jul 2014 09:00:12 +0000</pubDate><guid>https://abapinho.com/en/2014/07/pacotes-2-0/</guid><description>&lt;p>SAP R/3 repository is a wonderful thing. A vast warehouse of data elements, structures, tables and much more, readily available to one and all. As developers, it is extremely convenient to quickly pick these elements and pull them into our programs as necessity conveys, while our string of thought remains virtually uninterrupted.
Well, not all is sunshine and roses. If you are not careful with the mushrooms you pick you might get a poisoned one.&lt;/p></description></item><item><title>Request Based Debugging</title><link>https://abapinho.com/en/2014/05/request-based-debugging/</link><pubDate>Mon, 12 May 2014 09:00:10 +0000</pubDate><guid>https://abapinho.com/en/2014/05/request-based-debugging/</guid><description>&lt;p>If you look up the UNAME system variable in &lt;em>debug&lt;/em> within a RFC call you may think it kind of odd to find a username that is not your own. What happens is that the system adopts a specific username for remote calls and a new session is started. A new session implies a new execution context and, hence, all our strategically placed &lt;em>breakpoints&lt;/em> will no longer be recognised.&lt;/p>
&lt;p>This problem can hinder a simple &lt;em>debug&lt;/em> forcing us to run through the code looking for THAT remote call to THAT particular system.&lt;/p>
&lt;p>SAP has a solution.&lt;/p></description></item><item><title>The ABAP detective</title><link>https://abapinho.com/en/2014/03/o-detective-do-abap/</link><pubDate>Mon, 10 Mar 2014 09:00:42 +0000</pubDate><guid>https://abapinho.com/en/2014/03/o-detective-do-abap/</guid><description>&lt;p>When a development is completed in SAP, the time to send it to other systems where it can be duly tested and then executed by users has finally arrived.
Before that occurs, however, it has to be checked for lapses, errors and other problems that could lead to our programmes behaving in an unpredictable manner.
There is a very useful tool that allows some of these errors and gaps to be filtered out. It is called ABAP Code Inspector.&lt;/p></description></item><item><title>Mathematics problem</title><link>https://abapinho.com/en/2013/12/matematica-problematica/</link><pubDate>Mon, 09 Dec 2013 09:00:23 +0000</pubDate><guid>https://abapinho.com/en/2013/12/matematica-problematica/</guid><description>&lt;p>Do you know the difference between a mystery and an enigma puzzle? An enigma puzzle is known to have a solution, but with a mystery you don’t know if there is solution.&lt;/p>
&lt;p>Do you agree with this?
5 * 3 / 10 = ( 5 * 3 ) / 10 = 5 * ( 3 / 10 ) = 1.5&lt;/p>
&lt;p>If you don’t, you should agree because it is a mathematical fact.&lt;/p>
&lt;p>Now let&amp;rsquo;s do some experiments.&lt;/p></description></item><item><title>Steal data from a SALV</title><link>https://abapinho.com/en/2013/10/roubar-salv/</link><pubDate>Mon, 14 Oct 2013 10:04:02 +0000</pubDate><guid>https://abapinho.com/en/2013/10/roubar-salv/</guid><description>&lt;p>A friend of a friend of a friend said that a friend of his knew a friend who explained to him in a shady club bar in the docks area of Lisbon how to steal data from a SALV.&lt;/p></description></item><item><title>Have you used regular expressions before?</title><link>https://abapinho.com/en/2013/07/regex/</link><pubDate>Mon, 15 Jul 2013 09:00:55 +0000</pubDate><guid>https://abapinho.com/en/2013/07/regex/</guid><description>Regularly expressions have been around for ages. But they’re not very well known and even less used. They are a sort of descriptive language that allows for making research and very sophisticated replacements in alpha-numeric chains.
A simple example: to validate an email address. If you have to do this through an algorithm you’ll have to work hard. However, with regular expressions, only two or three code lines and the regular expression &amp;quot;\b[A-Z0-9.</description></item><item><title>Read code from the web and execute it</title><link>https://abapinho.com/en/2013/07/ler-codigo-da-net-e-executa-lo/</link><pubDate>Mon, 01 Jul 2013 09:00:42 +0000</pubDate><guid>https://abapinho.com/en/2013/07/ler-codigo-da-net-e-executa-lo/</guid><description>&lt;p>This is a 2-in-1 article. That is to say, you’ll learn two subjects at once.&lt;/p>
&lt;p>But get ready, what you’ll learn is dynamite, and, in the wrong hands, it can implode your universe.&lt;/p>
&lt;p>First, you&amp;rsquo;ll learn how to read content on the web. And right after that, assuming that this content is ABAP code, you’ll learn how to execute it in the blink of an eye.&lt;/p></description></item><item><title>With many fields avoid INTO CORRESPONDING FIELDS</title><link>https://abapinho.com/en/2013/06/into-corresponding-fields/</link><pubDate>Mon, 10 Jun 2013 09:00:27 +0000</pubDate><guid>https://abapinho.com/en/2013/06/into-corresponding-fields/</guid><description>&lt;p>I have already advised here that, in tables with many fields, it’s always recommended to avoid using SELECT *, you must always select, explicitly, only the necessary fields.&lt;/p>
&lt;p>But I didn’t warn you that there’s yet another optimisation worth making: avoid INTO CORRESPONDING FIELDS OF TABLE.&lt;/p></description></item><item><title>R3TR vs LIMU</title><link>https://abapinho.com/en/2013/05/r3tr-vs-limu/</link><pubDate>Mon, 06 May 2013 23:00:21 +0000</pubDate><guid>https://abapinho.com/en/2013/05/r3tr-vs-limu/</guid><description>&lt;p>You’ve screwed up the productive system. You made a change to a method of a class (or to a function, whatever). Someone else makes another change to another method of the same class (or to another function of the same group of functions, whatever) and saves it to a different transport. When you transport your changes to the productive system, you discover that the class (or function, whatever) now has a syntax error because the changes had interdependencies. You also discover that now, until you get this problem resolved, all your functional co-workers hate you.&lt;/p></description></item><item><title>SAPlink</title><link>https://abapinho.com/en/2012/12/saplink/</link><pubDate>Mon, 03 Dec 2012 09:00:00 +0000</pubDate><guid>https://abapinho.com/en/2012/12/saplink/</guid><description>&lt;p>SAPlink is a Z program that is installed in the development environment and which enables a wide variety of object types to be imported and exported from the Workbench.&lt;/p>
&lt;p>Take a look here at some examples of how SAPlink can be used:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>To transfer a table from one SAP system to another&lt;/p>
&lt;/li>
&lt;li>
&lt;p>To share a class on the internet&lt;/p>
&lt;/li>
&lt;li>
&lt;p>To make a local security backup of a set of programs before making a dangerous change&lt;/p>
&lt;/li>
&lt;li>
&lt;p>To keep a development in our personal repository (in &lt;a href="https://abapinho.com/en/2010/04/evernote/">Evernote&lt;/a>, of course) in case you need it later in another project&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Etc.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>Hey dad, look...no hands</title><link>https://abapinho.com/en/2012/09/olha-pai-agora-sem-maos/</link><pubDate>Mon, 17 Sep 2012 09:00:48 +0000</pubDate><guid>https://abapinho.com/en/2012/09/olha-pai-agora-sem-maos/</guid><description>&lt;p>In today&amp;rsquo;s article I will show you (and explain!) how you can make a selection screen refresh itself on a regular basis without user intervention.&lt;/p>
&lt;p>Are you ready?&lt;/p></description></item><item><title>Finally ABAP knows Excel</title><link>https://abapinho.com/en/2012/07/abap2xlsx/</link><pubDate>Mon, 02 Jul 2012 09:00:22 +0000</pubDate><guid>https://abapinho.com/en/2012/07/abap2xlsx/</guid><description>&lt;p>There are various ways of creating an Excel spreadsheet in ABAP. Some are more masochistic than others and some are certainly more lousy than others.&lt;/p></description></item><item><title>Insert variables in standard texts</title><link>https://abapinho.com/en/2012/04/mete-variaveis-dentro-de-textos-standard/</link><pubDate>Mon, 30 Apr 2012 10:00:06 +0000</pubDate><guid>https://abapinho.com/en/2012/04/mete-variaveis-dentro-de-textos-standard/</guid><description>&lt;p>Everyone uses standard texts. But did you know that standard texts can have dynamic fields in the middle? SAP calls them &amp;ldquo;text symbols&amp;rdquo;. The way to do it is identical to that of the old forms of the harmful SE71, in other words wrapping them in the &amp;amp; symbol. Thus: &amp;amp;KNA1-NAME1;&amp;amp;. It’s really handy. I’ll show you how it’s done.&lt;/p></description></item><item><title>Search object attributes in an internal table</title><link>https://abapinho.com/en/2012/03/atributos-de-objectos-em-tabelas-internas/</link><pubDate>Mon, 26 Mar 2012 10:00:17 +0000</pubDate><guid>https://abapinho.com/en/2012/03/atributos-de-objectos-em-tabelas-internas/</guid><description>&lt;p>There are increasingly more objects in ABAP, gradually less fear of them and, lo and behold, more and more people are writing and using them. It is normal and desirable, if objects begin to appear everywhere, to start to stuff them into internal tables. I also stored a load of objects in tables a while back, unfortunately I did not know at that time what I am going to teach you here. It could have come in handy.&lt;/p>
&lt;p>So, what exactly am I going to teach you here?&lt;/p></description></item><item><title>Implementing private methods in BADIs</title><link>https://abapinho.com/en/2012/03/metodos-privados-em-badis/</link><pubDate>Mon, 19 Mar 2012 10:00:09 +0000</pubDate><guid>https://abapinho.com/en/2012/03/metodos-privados-em-badis/</guid><description>&lt;p>A little while ago I had an idea as eccentric as it was amazing that today I have decided to share here, namely, how to create private methods in BADI classes.&lt;/p>
&lt;p>Let me explain.&lt;/p></description></item><item><title>How to sabotage tables</title><link>https://abapinho.com/en/2012/03/como-sabotar-tabelas/</link><pubDate>Mon, 12 Mar 2012 13:30:24 +0000</pubDate><guid>https://abapinho.com/en/2012/03/como-sabotar-tabelas/</guid><description>Another article to help those who are into sneaky subversion Spies, take note on how to edit a table that cannot be (and probably shouldn’t be) edited. I’ll show you three techniques. The first stopped being useful a few years ago, the second is about to become obsolete and the third, well, we’ll just have to see for how long it will work.
1. SE16 /H OK_CODE EDIT The first technique dates back to the twentieth century and uses the old transaction SE16.</description></item><item><title>Sending a report or spool job by email</title><link>https://abapinho.com/en/2012/02/relatorio-por-email/</link><pubDate>Mon, 13 Feb 2012 10:00:35 +0000</pubDate><guid>https://abapinho.com/en/2012/02/relatorio-por-email/</guid><description>&lt;p>This post inaugurates a new category in Abapinho: Code. Posts in this category will present useful programs that are ready to execute.&lt;/p>
&lt;p>This one is used for sending the result of any report or spool order by e-mail. This program makes use of the new BCS (Business Communication Services) through the CL_BCS class instead of the tired and old SO_DOCUMENT_SEND_API1, may its soul rest in peace.&lt;/p>
&lt;p>The content can be sent in the body of the email, as a TXT attachment or as an HTML attachment, with the latter being sent nice and neat with all the colours. Enjoy it. Blindly copy it and use it or dissect it and learn how to use CL_BCS. On the way, you can still learn, if you feel like it, how to use local classes and exception classes.&lt;/p>
&lt;p>A local class is simpler to show here in Abapinho but if you want you can transform it into a global class through SE24 as Abapinho already &lt;a href="https://abapinho.com/en/2011/10/importar-classes-locais/">explained some time ago&lt;/a> so that you can use it anywhere.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#fff;-moz-tab-size:2;-o-tab-size:2;tab-size:2;">&lt;code class="language-ABAP" data-lang="ABAP">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp;---------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; Report ZZZ_NFG_SEND_REPORT_BY_EMAIL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp;---------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; Author: Nuno Godinho&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; Date: 03 January 2012&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; Description: Sends an abap list (generated by a submitted program or&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; read from an existing spool) by email. The list can be&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; sent either in the email body, as a text attachment or&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp; as an HTML attachment.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&amp;amp;---------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">REPORT&lt;/span> &lt;span style="color:#000">zzz_nfg_send_list_by_mail&lt;/span> &lt;span style="color:#00f">MESSAGE-ID&lt;/span> &lt;span style="color:#000">so&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">***************************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Exception classes&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">zcx_zs_no_receivers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DEFINITION&lt;/span> &lt;span style="color:#000">FINAL&lt;/span> &lt;span style="color:#00f">INHERITING FROM&lt;/span> &lt;span style="color:#000">cx_static_check&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DEFINITION&lt;/span> &lt;span style="color:#000">FINAL&lt;/span> &lt;span style="color:#00f">INHERITING FROM&lt;/span> &lt;span style="color:#000">cx_static_check&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DEFINITION&lt;/span> &lt;span style="color:#000">FINAL&lt;/span> &lt;span style="color:#00f">INHERITING FROM&lt;/span> &lt;span style="color:#000">cx_static_check&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DEFINITION&lt;/span> &lt;span style="color:#000">FINAL&lt;/span> &lt;span style="color:#00f">INHERITING FROM&lt;/span> &lt;span style="color:#000">cx_static_check&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* CLASS cl_send_list_by_mail DEFINITION&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">cl_send_list_by_mail&lt;/span> &lt;span style="color:#00f">DEFINITION&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">PUBLIC SECTION&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TYPES&lt;/span>: &lt;span style="color:#000">ty_send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">char4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">ty_source&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">char6&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONSTANTS&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_send_mode_text&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#5a2">&amp;#39;TEXT&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_send_mode_text_attach&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#5a2">&amp;#39;TXTA&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_send_mode_html_attach&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#5a2">&amp;#39;HTMA&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_send_mode_attachment&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#000">space&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_source_submit&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_source&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#5a2">&amp;#39;SUBMIT&amp;#39;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">k_source_spool&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_source&lt;/span> &lt;span style="color:#00f">VALUE&lt;/span> &lt;span style="color:#5a2">&amp;#39;SPOOL&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHODS&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">constructor&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_send_req_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_recipient&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_smtp_address&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ad_smtpadr&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_send_req_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_address_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">submit_and_send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_smtp_address&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ad_smtpadr&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_no_receivers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">read_spool_and_send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_smtp_address&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ad_smtpadr&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_no_receivers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_send_req_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">PRIVATE SECTION&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">go_send_request&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_bcs&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHODS&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">get_objectlist_and_send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_source&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_source&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_smtp_address&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ad_smtpadr&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_no_receivers&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">submit_report_to_memory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">i_report&lt;/span>) &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">i_variant&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RETURNING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">ot_listobject&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">read_spool_to_memory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RETURNING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">ot_listobject&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">get_objectlist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_source&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_source&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">i_report&lt;/span>) &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">i_variant&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RETURNING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">ot_listobject&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_spool_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">create_text_document&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RETURNING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">o_document&lt;/span>) &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_document_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_document_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_header_to_body&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">xt_soli&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">soli_tab&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_abaplist_text_attach&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_name&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_document_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_document_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_abaplist_html_attach&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_name&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_document_bcs&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_document_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">it_listobject&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">ty_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">cx_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">build_attach_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_extension&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span> &lt;span style="color:#000">OPTIONAL&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RETURNING&lt;/span> &lt;span style="color:#00f">value&lt;/span>(&lt;span style="color:#000">o_name&lt;/span>) &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;cl_send_list_by_mail DEFINITION
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* CLASS cl_send_list_by_mail IMPLEMENTATION&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*----------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">CLASS&lt;/span> &lt;span style="color:#000">cl_send_list_by_mail&lt;/span> &lt;span style="color:#00f">IMPLEMENTATION&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">constructor&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Create the send request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">go_send_request&lt;/span> = &lt;span style="color:#000">cl_bcs&lt;/span>=&amp;gt;&lt;span style="color:#000">create_persistent&lt;/span>( ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">go_send_request&lt;/span>-&amp;gt;&lt;span style="color:#000">set_send_immediately&lt;/span>( &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;constructor
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">add_recipient&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">recipient&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">if_recipient_bcs&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">recipient&lt;/span> = &lt;span style="color:#000">cl_cam_address_bcs&lt;/span>=&amp;gt;&lt;span style="color:#000">create_internet_address&lt;/span>( &lt;span style="color:#000">i_smtp_address&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">go_send_request&lt;/span>-&amp;gt;&lt;span style="color:#000">add_recipient&lt;/span>( &lt;span style="color:#000">recipient&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;add_receiver
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">submit_and_send_mail&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">get_objectlist_and_send_mail&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">k_source_submit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">i_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;submit_report_and_sendmail
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">read_spool_and_send_mail&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">get_objectlist_and_send_mail&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">k_source_spool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">i_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;read_spool_and_send_mail
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">get_objectlist_and_send_mail&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">t_recipients&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">bcsy_re&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">table_abaplist&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Check parameters&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> ( &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">k_source_spool&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">IS INITIAL&lt;/span> ) &lt;span style="color:#00f">OR&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ( &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">k_source_submit&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">IS INITIAL&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_invalid_parameters&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add recipient if supplied&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_smtp_address&lt;/span> &lt;span style="color:#000">IS&lt;/span> &lt;span style="color:#000">SUPPLIED&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_recipient&lt;/span>( &lt;span style="color:#000">i_smtp_address&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* It should only run if there is at least one recipient&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_recipients&lt;/span> = &lt;span style="color:#000">go_send_request&lt;/span>-&amp;gt;&lt;span style="color:#000">recipients&lt;/span>( ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">t_recipients[]&lt;/span> &lt;span style="color:#00f">IS INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_no_receivers&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Get objectlist either from submit or from spool&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject&lt;/span> = &lt;span style="color:#000">get_objectlist&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">i_source&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Send email&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL METHOD&lt;/span> &lt;span style="color:#000">send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> = &lt;span style="color:#000">t_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">i_send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;get_objectlist_and_send_mail
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">get_objectlist&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Get abap list into memory (either from spool or submit)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_source&lt;/span> = &lt;span style="color:#000">k_source_submit&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">submit_report_to_memory&lt;/span>( &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">read_spool_to_memory&lt;/span>( &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Import the list from memory and store it in table listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">REFRESH&lt;/span> : &lt;span style="color:#000">ot_listobject&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;LIST_FROM_MEMORY&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TABLES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">listobject&lt;/span> = &lt;span style="color:#000">ot_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">not_found&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">OTHERS&lt;/span> = &lt;span style="color:#3af">2&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Free memory&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;LIST_FREE_MEMORY&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TABLES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">listobject&lt;/span> = &lt;span style="color:#000">ot_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">OTHERS&lt;/span> = &lt;span style="color:#3af">1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;get_objectlist
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">submit_report_to_memory&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TRANSLATE&lt;/span>: &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#00f">UPPER CASE&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#00f">UPPER CASE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Submit report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">SUBMIT&lt;/span> (&lt;span style="color:#000">i_report&lt;/span>) &lt;span style="color:#00f">USING&lt;/span> &lt;span style="color:#000">SELECTION&lt;/span>-&lt;span style="color:#000">SET&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">EXPORTING&lt;/span> &lt;span style="color:#000">LIST&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">MEMORY&lt;/span> &lt;span style="color:#00f">AND RETURN&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;submit_report
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">read_spool_to_memory&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Adapted from FM RSPO_RETURN_ABAP_SPOOLJOB. This FM converts the list to ASCII&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* and I needed it as an ABAPLIST so I just copied the code and adapted it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">data_is_otf&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">c&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;RSPO_CHECK_JOB_ID_PERMISSION&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">rqident&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">access&lt;/span> = &lt;span style="color:#5a2">&amp;#39;DISP&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">no_such_job&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">no_permission&lt;/span> = &lt;span style="color:#3af">2&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_spool_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;RSPO_GET_TYPE_SPOOLJOB&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">rqident&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IMPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">is_otf&lt;/span> = &lt;span style="color:#000">data_is_otf&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">can_not_access&lt;/span> = &lt;span style="color:#3af">1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_spool_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">data_is_otf&lt;/span> = &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_spool_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">SUBMIT&lt;/span> &lt;span style="color:#000">rspolist&lt;/span> &lt;span style="color:#00f">EXPORTING&lt;/span> &lt;span style="color:#000">LIST&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">MEMORY&lt;/span> &lt;span style="color:#00f">AND RETURN&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WITH&lt;/span> &lt;span style="color:#000">rqident&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WITH&lt;/span> &lt;span style="color:#000">first&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WITH&lt;/span> &lt;span style="color:#000">last&lt;/span> = &lt;span style="color:#3af">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WITH&lt;/span> &lt;span style="color:#000">pages&lt;/span> = &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;read_spool
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">send_mail&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">document&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_document_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">sent_to_all&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">os_boolean&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">bcs_exception&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cx_bcs&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">name&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">k_send_mode_text&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">document&lt;/span> = &lt;span style="color:#000">create_text_document&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> = &lt;span style="color:#000">it_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Create text document without adding listobject to the body (it will be attached)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">document&lt;/span> = &lt;span style="color:#000">create_text_document&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add attachment to document&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">k_send_mode_text_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">name&lt;/span> = &lt;span style="color:#000">build_attach_name&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_extension&lt;/span> = &lt;span style="color:#5a2">&amp;#39;TXT&amp;#39;&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_abaplist_text_attach&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> = &lt;span style="color:#000">it_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_name&lt;/span> = &lt;span style="color:#000">name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span> = &lt;span style="color:#000">document&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSEIF&lt;/span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">k_send_mode_html_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">name&lt;/span> = &lt;span style="color:#000">build_attach_name&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_abaplist_html_attach&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">it_listobject&lt;/span> = &lt;span style="color:#000">it_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_name&lt;/span> = &lt;span style="color:#000">name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span> = &lt;span style="color:#000">document&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add document to send request&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">go_send_request&lt;/span>-&amp;gt;&lt;span style="color:#000">set_document&lt;/span>( &lt;span style="color:#000">document&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Send&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">sent_to_all&lt;/span> = &lt;span style="color:#000">go_send_request&lt;/span>-&amp;gt;&lt;span style="color:#000">send&lt;/span>( &lt;span style="color:#000">i_with_error_screen&lt;/span> = &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* IF sent_to_all NE &amp;#39;X&amp;#39;.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* RAISE EXCEPTION TYPE zcx_zs_mail_not_sent.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* ENDIF.&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;send_mail
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">create_text_document&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">t_listasci&lt;/span> &lt;span style="color:#00f">TYPE STANDARD TABLE OF&lt;/span> &lt;span style="color:#000">solisti1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject&lt;/span> &lt;span style="color:#00f">LIKE &lt;/span>&lt;span style="color:#000">it_listobject&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_soli&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">soli_tab&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">LIKE LINE OF&lt;/span> &lt;span style="color:#000">t_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add header&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">add_header_to_body&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">i_variant&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">i_spool_number&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CHANGING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">xt_soli&lt;/span> = &lt;span style="color:#000">t_soli&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add abap list&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">it_listobject&lt;/span> &lt;span style="color:#000">IS&lt;/span> &lt;span style="color:#000">SUPPLIED&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CLEAR&lt;/span> &lt;span style="color:#000">w_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">t_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">w_soli&lt;/span> = &lt;span style="color:#5a2">&amp;#39;------------------------------------------------------&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">t_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CLEAR&lt;/span> &lt;span style="color:#000">w_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">t_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject[]&lt;/span> = &lt;span style="color:#000">it_listobject[]&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;LIST_TO_ASCI&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TABLES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">listasci&lt;/span> = &lt;span style="color:#000">t_listasci&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">listobject&lt;/span> = &lt;span style="color:#000">t_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">empty_list&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">list_index_invalid&lt;/span> = &lt;span style="color:#3af">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">OTHERS&lt;/span> = &lt;span style="color:#3af">3&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND LINES OF&lt;/span> &lt;span style="color:#000">t_listasci&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">t_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Create text document&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">o_document&lt;/span> = &lt;span style="color:#000">cl_document_bcs&lt;/span>=&amp;gt;&lt;span style="color:#000">create_document&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_type&lt;/span> = &lt;span style="color:#5a2">&amp;#39;RAW&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_text&lt;/span> = &lt;span style="color:#000">t_soli&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">i_subject&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;create_text_document
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">add_header_to_body&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">LIKE LINE OF&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#5a2">&amp;#39;Report:&amp;#39;&lt;/span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">SEPARATED BY&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#5a2">&amp;#39;Variant:&amp;#39;&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">SEPARATED BY&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">MOVE&lt;/span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#5a2">&amp;#39;Spool number:&amp;#39;&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">SEPARATED BY&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#5a2">&amp;#39;Date:&amp;#39;&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">datum&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">uzeit&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">SEPARATED BY&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#5a2">&amp;#39;User:&amp;#39;&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">uname&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">SEPARATED BY&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">APPEND&lt;/span> &lt;span style="color:#000">w_soli&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">xt_soli&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;build_header
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">add_abaplist_text_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">t_solix&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">solix_tab&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* It&amp;#39;s always necessary to compress the table. SAPconnect will decompress it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;TABLE_COMPRESS&amp;#39;&lt;/span> &lt;span style="color:#888;font-style:italic">&amp;#34;#EC *
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span> &lt;span style="color:#00f">TABLES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">in&lt;/span> = &lt;span style="color:#000">it_listobject&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">out&lt;/span> = &lt;span style="color:#000">t_solix&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXCEPTIONS&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">compress_error&lt;/span> = &lt;span style="color:#3af">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">OTHERS&lt;/span> = &lt;span style="color:#3af">2&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">subrc&lt;/span> &amp;lt;&amp;gt; &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">RAISE&lt;/span> &lt;span style="color:#00f">EXCEPTION&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">zcx_zs_objectlist_error&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span>-&amp;gt;&lt;span style="color:#000">add_attachment&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_attachment_type&lt;/span> = &lt;span style="color:#5a2">&amp;#39;ALI&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_attachment_subject&lt;/span> = &lt;span style="color:#000">i_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_att_content_hex&lt;/span> = &lt;span style="color:#000">t_solix&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;add_abaplist_text_attach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">add_abaplist_html_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">t_soli&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">soli_tab&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject&lt;/span> &lt;span style="color:#00f">LIKE &lt;/span>&lt;span style="color:#000">it_listobject&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">t_listobject[]&lt;/span> = &lt;span style="color:#000">it_listobject[]&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL FUNCTION&lt;/span> &lt;span style="color:#5a2">&amp;#39;WWW_HTML_FROM_LISTOBJECT&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TABLES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">html&lt;/span> = &lt;span style="color:#000">t_soli&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">listobject&lt;/span> = &lt;span style="color:#000">t_listobject&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">x_document&lt;/span>-&amp;gt;&lt;span style="color:#000">add_attachment&lt;/span>(
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_attachment_type&lt;/span> = &lt;span style="color:#5a2">&amp;#39;HTM&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_attachment_subject&lt;/span> = &lt;span style="color:#000">i_name&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_att_content_text&lt;/span> = &lt;span style="color:#000">t_soli&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;add_abaplist_html_attach
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">METHOD&lt;/span> &lt;span style="color:#000">build_attach_name&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_report&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">o_name&lt;/span> = &lt;span style="color:#000">i_report&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#000">o_name&lt;/span> &lt;span style="color:#5a2">&amp;#39;-&amp;#39;&lt;/span> &lt;span style="color:#000">i_variant&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">o_name&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">MOVE&lt;/span> &lt;span style="color:#000">i_spool_number&lt;/span> &lt;span style="color:#00f">TO&lt;/span> &lt;span style="color:#000">o_name&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">SHIFT&lt;/span> &lt;span style="color:#000">o_name&lt;/span> &lt;span style="color:#000">LEFT&lt;/span> &lt;span style="color:#000">DELETING&lt;/span> &lt;span style="color:#000">LEADING&lt;/span> &lt;span style="color:#000">space&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#000">o_name&lt;/span> &lt;span style="color:#5a2">&amp;#39;-&amp;#39;&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">datum&lt;/span> &lt;span style="color:#5a2">&amp;#39;-&amp;#39;&lt;/span> &lt;span style="color:#000">sy&lt;/span>-&lt;span style="color:#000">uzeit&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">o_name&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">i_extension&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CONCATENATE&lt;/span> &lt;span style="color:#000">o_name&lt;/span> &lt;span style="color:#5a2">&amp;#39;.&amp;#39;&lt;/span> &lt;span style="color:#000">i_extension&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">o_name&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDMETHOD&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;build_attach_name
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">ENDCLASS&lt;/span>. &lt;span style="color:#888;font-style:italic">&amp;#34;cl_send_list_by_mail IMPLEMENTATION
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">***************************************************************************&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">TABLES&lt;/span>: &lt;span style="color:#000">adr6&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">*------------------------------------------------------------------*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN BEGIN OF BLOCK&lt;/span> &lt;span style="color:#000">b1&lt;/span> &lt;span style="color:#00f">WITH FRAME&lt;/span> &lt;span style="color:#00f">TITLE&lt;/span> &lt;span style="color:#00f">text&lt;/span>-&lt;span style="color:#3af">001&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_subj&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">so_obj_des&lt;/span> &lt;span style="color:#00f">OBLIGATORY&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECT-OPTIONS&lt;/span>: &lt;span style="color:#000">s_rec&lt;/span> &lt;span style="color:#00f">FOR&lt;/span> &lt;span style="color:#000">adr6&lt;/span>-&lt;span style="color:#000">smtp_addr&lt;/span> &lt;span style="color:#00f">NO INTERVALS&lt;/span> &lt;span style="color:#00f">LOWER CASE&lt;/span> &lt;span style="color:#00f">OBLIGATORY&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN END OF BLOCK&lt;/span> &lt;span style="color:#000">b1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN BEGIN OF BLOCK&lt;/span> &lt;span style="color:#000">b2&lt;/span> &lt;span style="color:#00f">WITH FRAME&lt;/span> &lt;span style="color:#00f">TITLE&lt;/span> &lt;span style="color:#00f">text&lt;/span>-&lt;span style="color:#3af">002&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_submit&lt;/span> &lt;span style="color:#00f">RADIOBUTTON GROUP&lt;/span> &lt;span style="color:#000">typ&lt;/span> &lt;span style="color:#000">USER&lt;/span>-&lt;span style="color:#000">COMMAND&lt;/span> &lt;span style="color:#000">typ&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN BEGIN OF BLOCK&lt;/span> &lt;span style="color:#000">b2a&lt;/span> &lt;span style="color:#00f">WITH FRAME&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_rep&lt;/span> &lt;span style="color:#00f">TYPE program&lt;/span> &lt;span style="color:#00f">MODIF ID&lt;/span> &lt;span style="color:#000">ty1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">p_var&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">raldb_vari&lt;/span> &lt;span style="color:#00f">MODIF ID&lt;/span> &lt;span style="color:#000">ty1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN END OF BLOCK&lt;/span> &lt;span style="color:#000">b2a&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_spool&lt;/span> &lt;span style="color:#00f">RADIOBUTTON GROUP&lt;/span> &lt;span style="color:#000">typ&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN BEGIN OF BLOCK&lt;/span> &lt;span style="color:#000">b2b&lt;/span> &lt;span style="color:#00f">WITH FRAME&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_rspoid&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">rspoid&lt;/span> &lt;span style="color:#00f">MODIF ID&lt;/span> &lt;span style="color:#000">ty2&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN END OF BLOCK&lt;/span> &lt;span style="color:#000">b2b&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN END OF BLOCK&lt;/span> &lt;span style="color:#000">b2&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN BEGIN OF BLOCK&lt;/span> &lt;span style="color:#000">b3&lt;/span> &lt;span style="color:#00f">WITH FRAME&lt;/span> &lt;span style="color:#00f">TITLE&lt;/span> &lt;span style="color:#00f">text&lt;/span>-&lt;span style="color:#3af">003&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">PARAMETERS&lt;/span>: &lt;span style="color:#000">p_text&lt;/span> &lt;span style="color:#00f">RADIOBUTTON GROUP&lt;/span> &lt;span style="color:#000">opt&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">p_texta&lt;/span> &lt;span style="color:#00f">RADIOBUTTON GROUP&lt;/span> &lt;span style="color:#000">opt&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">p_htmla&lt;/span> &lt;span style="color:#00f">RADIOBUTTON GROUP&lt;/span> &lt;span style="color:#000">opt&lt;/span> &lt;span style="color:#00f">DEFAULT&lt;/span> &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">SELECTION-SCREEN END OF BLOCK&lt;/span> &lt;span style="color:#000">b3&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">AT SELECTION-SCREEN OUTPUT&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">LOOP AT SCREEN&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">group1&lt;/span> = &lt;span style="color:#5a2">&amp;#39;TY1&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">p_submit&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">input&lt;/span> = &lt;span style="color:#3af">1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">input&lt;/span> = &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">MODIFY SCREEN&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">group1&lt;/span> = &lt;span style="color:#5a2">&amp;#39;TY2&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> &lt;span style="color:#000">p_spool&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">input&lt;/span> = &lt;span style="color:#3af">1&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ELSE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">screen&lt;/span>-&lt;span style="color:#000">input&lt;/span> = &lt;span style="color:#3af">0&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">MODIFY SCREEN&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDLOOP&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00f">START-OF-SELECTION&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">DATA&lt;/span>: &lt;span style="color:#000">go_sender&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cl_send_list_by_mail&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">send_mode&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">cl_send_list_by_mail&lt;/span>=&amp;gt;&lt;span style="color:#000">ty_send_mode&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">exc_ref&lt;/span> &lt;span style="color:#00f">TYPE REF TO&lt;/span> &lt;span style="color:#000">cx_root&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">text&lt;/span> &lt;span style="color:#00f">TYPE &lt;/span>&lt;span style="color:#000">string&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">IF&lt;/span> ( &lt;span style="color:#000">p_submit&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">p_rep&lt;/span> &lt;span style="color:#00f">IS INITIAL&lt;/span> ) &lt;span style="color:#00f">OR&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ( &lt;span style="color:#000">p_spool&lt;/span> &lt;span style="color:#00f">IS NOT INITIAL&lt;/span> &lt;span style="color:#00f">AND&lt;/span> &lt;span style="color:#000">p_rspoid&lt;/span> &lt;span style="color:#00f">IS INITIAL&lt;/span> ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">MESSAGE&lt;/span> &lt;span style="color:#000">s622&lt;/span> &lt;span style="color:#000">DISPLAY&lt;/span> &lt;span style="color:#000">LIKE&lt;/span> &lt;span style="color:#5a2">&amp;#39;E&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXIT&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDIF&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CREATE OBJECT&lt;/span> &lt;span style="color:#000">go_sender&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Determine send mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CASE&lt;/span> &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WHEN&lt;/span> &lt;span style="color:#000">p_texta&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">send_mode&lt;/span> = &lt;span style="color:#000">cl_send_list_by_mail&lt;/span>=&amp;gt;&lt;span style="color:#000">k_send_mode_text_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WHEN&lt;/span> &lt;span style="color:#000">p_htmla&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">send_mode&lt;/span> = &lt;span style="color:#000">cl_send_list_by_mail&lt;/span>=&amp;gt;&lt;span style="color:#000">k_send_mode_html_attach&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WHEN&lt;/span> &lt;span style="color:#00f">OTHERS&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">send_mode&lt;/span> = &lt;span style="color:#000">cl_send_list_by_mail&lt;/span>=&amp;gt;&lt;span style="color:#000">k_send_mode_text&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDCASE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* Add recipients&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">LOOP AT &lt;/span>&lt;span style="color:#000">s_rec&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL METHOD&lt;/span> &lt;span style="color:#000">go_sender&lt;/span>-&amp;gt;&lt;span style="color:#000">add_recipient&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_smtp_address&lt;/span> = &lt;span style="color:#000">s_rec&lt;/span>-&lt;span style="color:#000">low&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDLOOP&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">TRY&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CASE&lt;/span> &lt;span style="color:#5a2">&amp;#39;X&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WHEN&lt;/span> &lt;span style="color:#000">p_submit&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL METHOD&lt;/span> &lt;span style="color:#000">go_sender&lt;/span>-&amp;gt;&lt;span style="color:#000">submit_and_send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_report&lt;/span> = &lt;span style="color:#000">p_rep&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_variant&lt;/span> = &lt;span style="color:#000">p_var&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">p_subj&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WHEN&lt;/span> &lt;span style="color:#000">p_spool&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CALL METHOD&lt;/span> &lt;span style="color:#000">go_sender&lt;/span>-&amp;gt;&lt;span style="color:#000">read_spool_and_send_mail&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">EXPORTING&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_send_mode&lt;/span> = &lt;span style="color:#000">send_mode&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_spool_number&lt;/span> = &lt;span style="color:#000">p_rspoid&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">i_subject&lt;/span> = &lt;span style="color:#000">p_subj&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDCASE&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WRITE&lt;/span>: / &lt;span style="color:#5a2">&amp;#39;Mail message sent&amp;#39;&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">CATCH&lt;/span> &lt;span style="color:#000">cx_root&lt;/span> &lt;span style="color:#00f">INTO&lt;/span> &lt;span style="color:#000">exc_ref&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#000">text&lt;/span> = &lt;span style="color:#000">exc_ref&lt;/span>-&amp;gt;&lt;span style="color:#000">get_text&lt;/span>( ).
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">WRITE&lt;/span>: / &lt;span style="color:#000">text&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">ENDTRY&lt;/span>.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#888;font-style:italic">* It will not work without this commit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00f">COMMIT&lt;/span> &lt;span style="color:#000">WORK&lt;/span>.&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;p>Texts for selection screen:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>P_SUBJ&lt;/th>
&lt;th>Subject&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;/table>
&lt;p>S_REC| Recipients&lt;/p>
&lt;p>P_SUBMIT| Send report&lt;/p>
&lt;p>P_REP| Report&lt;/p>
&lt;p>P_VAR| Variant&lt;/p>
&lt;p>P_SPOOL| Send spool job&lt;/p>
&lt;p>P_RSPOID| Spool job ID&lt;/p>
&lt;p>P_TEXT| Email body&lt;/p>
&lt;p>P_TEXTA| TXT attachment&lt;/p>
&lt;p>P_HTMLA| HTML attachment&lt;/p>
&lt;p>Greetings from Abapinho.&lt;/p></description></item><item><title>Automating the ALV field catalogue</title><link>https://abapinho.com/en/2011/12/automatizar-catalogo-alv/</link><pubDate>Mon, 12 Dec 2011 10:00:00 +0000</pubDate><guid>https://abapinho.com/en/2011/12/automatizar-catalogo-alv/</guid><description>&lt;p>Sometimes I ask myself what percentage of the world’s ABAP code is unnecessary. A paradigmatic example of how time can be wasted writing code which is of no use to anyone and only creates problems is the ALV’s all-too-common field description definition sitting directly in ABAP.&lt;/p></description></item><item><title>The *_SINGLE_READ functions</title><link>https://abapinho.com/en/2011/08/funcoes-single-read/</link><pubDate>Mon, 01 Aug 2011 10:43:04 +0000</pubDate><guid>https://abapinho.com/en/2011/08/funcoes-single-read/</guid><description>When you need to derive a single record from a database table, you normally use SELECT SINGLE, which is like this in its most basic form, as everyone knows:
SELECT SINGLE * FROM KNA1 WHERE KUNNR = &amp;#39;1234567890&amp;#39;. Of course, if you are interested in just a few fields, ideally you select them explicitly to avoid copying unnecessary data from one side to the other:
DATA: lv_name1 TYPE name1. SELECT SINGLE name1 INTO lv_name1 FROM KNA1 WHERE KUNNR = &amp;#39;1234567890&amp;#39;.</description></item><item><title>LOOP ASSIGNING instead of LOOP INTO</title><link>https://abapinho.com/en/2011/07/assigning-vs-into/</link><pubDate>Sat, 02 Jul 2011 12:25:03 +0000</pubDate><guid>https://abapinho.com/en/2011/07/assigning-vs-into/</guid><description>&lt;p>In the beginning there was INTO.
Actually, in the beginning it was not even INTO.&lt;/p></description></item><item><title>On your marks, get set, go!</title><link>https://abapinho.com/en/2011/05/corrida-de-tabelas/</link><pubDate>Tue, 24 May 2011 09:00:41 +0000</pubDate><guid>https://abapinho.com/en/2011/05/corrida-de-tabelas/</guid><description>&lt;p>Ladies and gentlemen, boys and girls, the race is about to begin.&lt;/p>
&lt;p>&lt;strong>Introduction&lt;/strong>&lt;/p>
&lt;p>The four competitors are as follows. They are 4 internal tables, of different races and creeds, which will fight for the athletics title of speed LOOP. Here they are:&lt;/p>
&lt;p>Competitor 1: DATA: LT_ITEM TYPE TABLE
Competitor 2: DATA: LT_ITEM_HASHED TYPE HASHED TABLE
Competitor 3: DATA: LT_ITEM_SORTED TYPE SORTED TABLE
Competitor 4: DATA: LT_ITEM TYPE TABLE + INTO INDEX&lt;/p></description></item><item><title>&lt;!--:pt-->Como encavalitar tabelas&lt;!--:--></title><link>https://abapinho.com/en/2011/02/encavalitartabelas/</link><pubDate>Sat, 05 Feb 2011 16:38:20 +0000</pubDate><guid>https://abapinho.com/en/2011/02/encavalitartabelas/</guid><description>&lt;p>Às vezes temos de criar uma tabela Z. Às vezes temos até de criar várias tabelas Z. Às vezes estas tabelas estão relacionadas de alguma forma. Como quando uma contém dados de cabeçalho e a outra dados de item, por exemplo. Ora se estão relacionadas pode dar jeito que sejam editadas em conjunto. É para isso que servem os Clusters de Visão (view cluster).&lt;/p></description></item><item><title>&lt;!--:pt-->SELECT com mais olhos que barriga&lt;!--:--></title><link>https://abapinho.com/en/2010/11/select-todos-os-campos/</link><pubDate>Sun, 21 Nov 2010 22:56:36 +0000</pubDate><guid>https://abapinho.com/en/2010/11/select-todos-os-campos/</guid><description>&lt;p>Embora seja evidente que, ao fazer selecções de dados de uma tabela da base de dados, devemos ter o cuidado de escolher apenas os campos que necessitamos, a verdade é que há muito boa gente que não se dá a esse trabalho e manda vir tudo.&lt;/p>
&lt;p>Mediremos aqui a diferença real entre as duas abordagens.&lt;/p></description></item><item><title>&lt;!--:pt-->Import/Export = Contrabando&lt;!--:--></title><link>https://abapinho.com/en/2010/08/importexport/</link><pubDate>Sat, 14 Aug 2010 00:37:24 +0000</pubDate><guid>https://abapinho.com/en/2010/08/importexport/</guid><description>&lt;p>O Java, uma linguagem de programação bem pensada, ajuda o programador a organizar o seu código obrigando-o a desenvolvê-lo de forma estruturada. A sua própria filosofia potencia o pensamento estruturado e promove coerência e arrumação.&lt;/p>
&lt;p>Já o ABAP&amp;hellip; promove o caos. Está cheio de caminhos perniciosos que levam direitinho a um inferno confuso e labiríntico. E geralmente são as coisas aparentemente mais convenientes que se revelam as mais perigosas.&lt;/p>
&lt;p>Uma das conveniências piores é a parelha &lt;strong>IMPORT&lt;/strong> e &lt;strong>EXPORT&lt;/strong>.&lt;/p></description></item><item><title>&lt;!--:pt-->Procurar uma BADI no palheiro&lt;!--:--></title><link>https://abapinho.com/en/2010/06/procurar-uma-badi-no-palheiro/</link><pubDate>Mon, 14 Jun 2010 10:46:04 +0000</pubDate><guid>https://abapinho.com/en/2010/06/procurar-uma-badi-no-palheiro/</guid><description>&lt;p>O SAP é um enorme palheiro. E os ABAPers são pessoas que trepam por esse palheiro acima e nele vasculham e escarafuncham em busca de agulhas de todo o género. Às vezes, desesperados, deitam-se a descansar e vêm uma quantidade enorme de bicharocos que vivem no palheiro fazer-lhes comichão. Para evitar que isso aconteça, o Artur Moreira propõe-nos uma série de diferentes técnicas para procurar BADIs neste grande palheiro que é o SAP.&lt;/p></description></item><item><title>&lt;!--:pt-->Evernote - No anotar é que está o ganho&lt;!--:--></title><link>https://abapinho.com/en/2010/04/evernote/</link><pubDate>Mon, 19 Apr 2010 17:00:15 +0000</pubDate><guid>https://abapinho.com/en/2010/04/evernote/</guid><description>&lt;p>&lt;em>Il faut cultiver notre jardin - Voltaire&lt;/em>&lt;/p>
&lt;p>No SAP fala-se muito de experiência. Fulano tem muita experiência, sicrano tem pouca experiência. Tenta-se com isso medir a capacidade que alguém tem de usar o seu passado para lidar com o seu futuro. Mas nem sempre ter experimentado uma coisa é sinónimo de ganhar experiência com ela. O exemplo paradigmático ao alcance de todos é o amor: quantos desgraçados, por muitas experiências desgraçadas que tenham tido, se continuam a desgraçar-se no amor! O SAP não é o amor. Ainda assim não nos faltarão exemplos de consultores que no CV descrevem muitas experiências e na prática se revelam uns grandes inexperientes.&lt;/p>
&lt;p>A Inteligência terá certamente muito peso nessa capacidade de sublimar as experiências, de as conservar, de fazer delas Compota de Experiência. Mas, pelo menos no que toca ao mirabolante mundo do SAP, quem tem também muito a dizer é a senhora Memória. Ou melhor dizendo, a falta dela.&lt;/p>
&lt;p>O mundo do SAP é horizontal e vasto. Para onde quer que se olhe é a perder de vista. E embora seja um mundo bastante populado e onde se viaja muito, não houve até hoje, que eu saiba, cartógrafos de jeito. Os mapas que dele se fizeram são parcos, pobres, distorcidos e normalmente ainda o julgam plano quando toda a gente já sabe há muito tempo que ele é curvo.&lt;/p>
&lt;p>Há que cartografar o nosso mapa.&lt;/p></description></item><item><title>&lt;!--:pt-->O maravilhoso mundo do Application Log&lt;!--:--></title><link>https://abapinho.com/en/2009/09/application-log/</link><pubDate>Sat, 19 Sep 2009 09:51:49 +0000</pubDate><guid>https://abapinho.com/en/2009/09/application-log/</guid><description>&lt;p>Uma boa parte dos reports, interfaces ou jobs, têm de produzir algum tipo de relatório. É normal ver isso feito recorrendo ao comando WRITE. Ora nos dias que correm, usar o comando WRITE para isto é como recorrer a um par de pedras para acender uma fogueira. Afinal, porque não usar o Application Log que é muito mais simples e prático e standard e é só vantagens?&lt;/p></description></item><item><title>&lt;!--:pt-->Macros - Velocidade de ponta&lt;!--:--></title><link>https://abapinho.com/en/2009/09/macros-velocidade-de-ponta/</link><pubDate>Wed, 16 Sep 2009 02:37:52 +0000</pubDate><guid>https://abapinho.com/en/2009/09/macros-velocidade-de-ponta/</guid><description>&lt;p>Normalmente quando há um pedaço de código que pretendemos reutilizar várias vezes, transformamo-lo numa sub-rotina que pode depois ser invocada repetidamente. Embora a SAP não saiba estruturar o seu próprio código, ainda assim, o ABAP, coitadinho, permite-o. E até disponibiliza várias alternativas para modularizar o código. Eu conto quatro alternativas que listo aqui, da mais rígida para a mais flácida: METHOD, FUNCTION, FORM, DEFINE. Se os 3 primeiros são já familiar de todos, o último - DEFINE - quase ninguém usa. O DEFINE permite definir macros em ABAP. E o que são macros? São sub-rotinas aparentes.&lt;/p>
&lt;p>Aparentes porquê?&lt;/p></description></item><item><title>&lt;!--:pt-->Constantes inconstantes&lt;!--:--></title><link>https://abapinho.com/en/2009/06/constantes/</link><pubDate>Tue, 02 Jun 2009 15:24:07 +0000</pubDate><guid>https://abapinho.com/en/2009/06/constantes/</guid><description>&lt;p>As constantes não o são. Toda a gente sabe. Quando se define uma constante, é certo como a morte que mais cedo ou mais tarde alguém vem e muda-a. Quando isto acontece, quem usa os valores directamente no código ABAP está feito ao bife; Quem define constantes no código só tem de alterar o valor num sítio mas vê-se ainda assim obrigado a editar o programa e a transportá-lo, coisa que, dependendo do grau de burocracia do ambiente em que se está, se pode revelar complicada. Este artigo apresenta uma solução simples mas sofisticada para gerir de forma centralizada todas as constantes de um sistema SAP através do uso de uma tabela de utilizador central onde se manterá todos os valores constantes e de uma classe com alguns métodos estáticos que serão usados para os obter.&lt;/p></description></item><item><title>&lt;!--:pt-->Melhorar os melhoramentos&lt;!--:--></title><link>https://abapinho.com/en/2009/03/melhorar-os-melhoramentos/</link><pubDate>Fri, 20 Mar 2009 10:17:37 +0000</pubDate><guid>https://abapinho.com/en/2009/03/melhorar-os-melhoramentos/</guid><description>&lt;p>No princípio era o INCLUDE.&lt;/p>
&lt;pre>&lt;code>Depois vieram os CMODs,
Seguiram-se logo as BADIs,
Agora são os Enhancements.
E no entanto, o caos continua.
&lt;/code>&lt;/pre>
&lt;p>&lt;strong>Crítica&lt;/strong>
Na maior parte dos projectos SAP em que já trabalhei, a metodologia de utilização de todas estas modificações é a tudo-ao-molho-e-fé-em-SAP e é normal encontrar num único include - como o MV45AFZZ - extensões de código tão grandes que, se o SAP fosse a princesa Rapunzel, dava para lhe fazer umas tranças até cá abaixo para o príncipe subir à sua torre. Este código normalmente implementa várias funcionalidades diferentes e independentes que, ao longo do tempo, se vão emaranhando quase irreversivelmente umas nas outras (tipo trança mesmo). Como consequência, qualquer alteração ao código existente requer cuidados redobrados e é sempre vista como um risco para o funcionamento de tudo o que lá está.&lt;/p>
&lt;p>Venho aqui propor uma solução simples e eficaz para este problema.&lt;/p></description></item><item><title>&lt;!--:pt-->Change pointers&lt;!--:--></title><link>https://abapinho.com/en/2009/03/change-pointers/</link><pubDate>Thu, 19 Mar 2009 17:07:02 +0000</pubDate><guid>https://abapinho.com/en/2009/03/change-pointers/</guid><description>&lt;p>Neste artigo tento explicar o que são &lt;em>change pointers&lt;/em> e revelar como são úteis e fáceis de usar.&lt;/p>
&lt;p>&lt;strong>O que é um change pointer&lt;/strong>
Um &lt;em>change pointer&lt;/em> é um mecanismo de registo de alteração de dados baseado em &lt;em>change documents&lt;/em> desenvolvido pela SAP especialmente para ALE. Permite saber, de forma simples e eficiente, quais os registos alterados em uma ou nas várias tabelas por ele monitorizadas. Os &lt;em>change pointers&lt;/em> são utilizados maioritariamente como gatilhos para a criação de IDOCs. Mas não devem ser vistos apenas como tal e espero que este artigo traga alguma luz a este mecanismo tão útil mas tão descurado no SAP.&lt;/p></description></item></channel></rss>