ABAP

Der Change Pointer ist eine komfortable Funktion, um Stammdatenänderungen, etwa Materialstammdaten, an Drittsysteme weiterzugeben. Dabei wird im Falle einer Änderung ein IDOC erstellt, welches die Segmente enthält, deren Daten geändert wurden.

Eine Delta-Versorgung des Drittsystems ist jedoch nicht immer gewünscht oder möglich. Der SAP Standard sieht leider keine Möglichkeit vor, ein vollständiges IDOC im Falle einer Stammdatenänderung zu versenden.

In der SAP Community wird seit Jahren daher vorgeschlagen, mittels Modifikation oder Kopie des Reports

RBDMIDOC begegnen.

Im Wesentlichen werden dabei stets die geschriebenen Daten des Change Pointers (Tabelle BDCP unter ECC, BDCP2 unter S/4) geändert und die Spalte FLDNAME mit dem Wert ALELISTING belegt.

Statt der Kopie oder der Modifikation kann auch das BAdI BDCP_BEFORE_WRITE verwendet werden

... weiterlesen

Wie hier beschrieben PDF Dokumente in ABAP zusammenführen soll ein bestehendes PDF Dokument aus dem KPRO auf der Rückseite eines anderen PDF Dokuments, welches mittels ADS erstellt wird, eingebettet werden. Das auf der genannten Seite beschriebene Vorgehen funktioniert nur dann zuverlässig, wenn beide PDF Dokumente das gleiche Papierformat verwenden.

Im vorliegenden Fall wird ein PDF im DIN-A4 Format erstellt. Das einzubettende PDF Dokument liegt jedoch im DIN-A2 Format vor. Das Zusammenführen der Dokumente funktioniert zwar, der spätere Ausdruck auf einem DIN-A4 Drucker hingegen nicht. Die Zeichnung wird nicht skaliert ausgegeben.

Lösung

Wenn die Zeichnung als Bildformat vorliegt, kann die Ausgabe in einem Image Container im ADS erfolgen. Die Bilder werden in diesem Fall passend in den Container skaliert.

Mittels der Klasse ZCL_BC_PDF_CONVERTER kann ein existierendes PDF Dokument in ein Bildformat konvertiert werden. Die Klasse nimmt das PDF als XSTRING entgegen. Die Konvertierung selbst wird auf dem Application Server mittels System Kommando durchgeführt. Dabei wird das Tool pdftoppm (poppler-utils), welches bereits in der Linux Distribution des Application Server enthalten ist, genutzt.

Voraussetzung

Mit der Transaktion SM69 wird ein Systemkommando wie folgt definiert

Nutzung der Klasse

Die Konvertierung kann wie folgt durchgeführt werden

data: lv_data type xstring,
      lv_result type xstring,
     
      " auslesen des PDF aus dem kpro, Spool oder andere Quelle.
      " das PDF muss als Binärdaten vorliegen, nicht als Datei
     
          DATA(lo_converter) = NEW zcl_bc_pdf_converter(  ).
          lo_converter->set_source_data( lv_data ).
          lo_converter->convert(  ).
          lv_result = lo_converter->get_conversion_result(  ).

Zur Konvertierung werden temporäre Dateien auf dem Application Server angelegt und nach der Konvertierung gelöscht.

Verweis

Bei Interesse finden Sie die Klasse unter folgendem Repository

https://github.com/sap-weberpatrick/zcl_bc_pdf_converter

I recently had to create some PM order (IW31) based on Equipment Task list (IA01). Luckily, there is a BAPI available which can be used for such a task. Moreover, BAPI_ALM_ORDER_MAINTAIN is your Swiss Army Knife when it comes to ALM. It can be used for mostly everything related to ALM ,beside of making some coffee. SAP also provides some documentation for this BAPI. Sadly, it is a common SAP documentation which means, it describes some points but lacks in others.

After several attempts, I was able to create a PM Order related to a Notification which uses an Equipment task list instead of defining each operation manually.

... weiterlesen

Problem

Aus SAP heraus soll ein bestehendes PDF Dokument gedruckt werden. Das Dokument wurde nicht mittels Adobe Forms Service erstellt, sondern z.B.: über Dienste zum Objekt an einen Materialstammsatz abgelegt.

Auf dieser Seite ist beschrieben, wie ein PDF Dokument, welches im SAP Dokumentenmanagementsystem abgelegt ist oder mittels GUI_UPLOAD hochgeladen wurde, mittels ABAP ausgedruckt werden kann.

... weiterlesen

Wie in dem vorherigen Beispiel beschrieben, kann über die SharePoint API auch ein Listenelement erstellt werden. Dazu wird ein HTTP Post Methodenaufruf verwendet. Dieser Aufruf erwartet im Header zwingend die Angabe eines X-RequestDigest. Dieser Wert kann mit der API /_api/contextinfo ermittelt werden.

Das folgende Beispiel zeigt, wie man ein Listenelement aus SAP heraus erstellen kann.
... weiterlesen

Hier war es lange still, Zeit für einen neuen Beitrag. Das Thema hat mich einige Stunden gekostet. Ich hoffe es hilft dem ein oder anderen.

SharePoint bietet eine umfassende REST-API mit CRUD (Create Read Update Delete) Methoden an. Mit dieser API können z.B. Listenelemente gelesen und erstellt werden. Diese lässt sich auch in ABAP verwenden.

... weiterlesen

Die Texte einer BSP Applikation werden in dem Online Text Repository gespeichert (OTR) Dabei werden zwei Arten von Texten unterschieden, Kurztexte (max. 255 Zeichen) und Langtexte.

OTR

Das Online Text Repository dient zum Speichern und Verwalten von Texten. Die Texte können wiederverwendbar sein. Es können aber auch Texte abgelegt werden, die nicht wiederverwendet werden können. Jeder Text erhält eine eindeutige ID (GUID)

Kurztexte

Kurztexte sind maximal 255 Zeichen lang und können in anderen Applikationen wiederverwendet werden.

Anlegen

Aus dem Web Application Builder heraus lassen sich die verfügbaren Standardtexte anzeigen

Zudem können hier neue Texte erstellt werden.

Jeder Text erhält dabei einen eindeutigen Alias, über den er wiederverwendet werden kann.

Einbinden

Eingebunden wird der Text über seinen Alias Namen

<htmlb:group id    = "BASIC_DATA"
             title = "<%= OTR(SOTR_VOCABULARY_BASIC/BASIC_DATA) %>" >

Übersetzen

Zur Übersetzung kann die Transaktion SOTR_EDIT verwendet werden. Dazu einen Kurztext im Änderungsmodus öffnen und dann über Springen -> Übersetzung in die Übersetzung verzweigen.

Langtexte

Langtexte können länger als 255 Zeichen sein, sie werden aber nicht wiederverwendet. Außerdem sollte der Gebrauch von Langtexten sparsam verwendet werden (siehe weiter unten).

Anlegen/Einbinden

Das Anlegen und Einbinden erfolgt in einem Schritt. Zunächst muss der Text in einem <OTR> Tag eingebunden werden. Der Text wird hier in der Originalsprache abgelegt. Durch Aktivieren der Seite wird der Text automatisch im OTR angelegt, intern wird der (nach wie vor sichtbare Text) durch die GUID des OTR Textes ersetzt.

<htmlb:textView text = "<otr>Hier steht der ganz wichtige Text</otr>" />

Wird der Text nun nochmals im Original geändert und die Seite aktiviert, wird ein neuer OTR Text abgelegt. Dies führt zu zahlreichen, verwaisten Einträgen, wenn z.B. Rechtschreibfehler korrigiert werden.

Um einen fehlerhaften Eintrag zu korrigieren, muss man die SOTR_EDIT verwenden. AUF KEINEN FALL den fehlerhaften Eintrag in der BSP Applikation innerhalb des <OTR> Tags korrigieren.

Übersetzen

Die Übersetzung erfolgt direkt aus dem Web Application Builder.

Nur über diesen Weg ist eine korrekte Übersetzung gewährleistet. Wird die Übersetzung im SOTR_EDIT vorgenommen, kann der Verwendungsnachweis verloren gehen, wenn der Originaltext angepasst wird. Dies führt zu einem Verlust der Übersetzung.