BOPF EPM Datengenerator

SAP BOPF: EPM Datengenerator

Beim Schreiben der beiden Blogs zum SAP BOPF API ( Teil 1, Teil 2 ) hatte ich zufällig gesehen, dass es den EPM Datengenerator  zum Füllen der EPM BOPF-Tabellen für Salesorder, Business Partner, Product etc. mit Demodaten gibt. /BOBF/EPM_DATA_GENERATOR ist ein ausführbares Programm und es gibt ein Problem: Das Programm bricht mit einem Laufzeitfehler ab. Das ist wirklich störend, weil man so die EPM BOPF Geschäftsobjekte nicht gut ausprobieren kann. Die EPM BOPF Geschäftsobjekte zeigen sehr viele Aspekte der BOPF Modellierung und Implementierung. In diesem Blogbeitrag wollen wir den EPM Datengenerator reparieren.

EPM Datengenerator Laufzeitfehler

Bei der Ausführung des Programms /BOBF/EPM_DATA_GENERATOR kommt es zu einem ASSERTION_FAILED-Laufzeitfehler. Problem ist die Transformation der XML-Produktdaten aus dem MIME-Repository in eine interne ABAP-Tabelle mit der Simple Transformation /bobf/tr_product_data.

BOPF EPM Datengenerator Dump

Irgendwo in den XML-Daten fehlt das XML-Element web_resource. Ich habe mir das im XML angeschaut und nicht gefunden. Das ist aber nicht das einzige Problem im Daten Generator: Wenn man diese Methode DESERIALIZE_PRODUCT_DATA überspringt, kommt der nächste Laufzeitfehler “13.0561555# nicht als Zahl interpretierbar” in Methode map_bp_data. Irgendwo in den XML Business Partner Daten ist im Addressfeld latitude ein Tab-Zeichen am Ende der Zahl.

Diese Probleme sind auf den 1. Blick erstaunlich, weil der Standard EPM Datengenerator auf genau den gleichen XML-Daten aufsetzt. Der Standard EPM Datengenerator ist das Programm SEPM_DG_EPM_STD_CHANNEL, welches die SNWD_*-Tabellen füllt. Der Unterschied ist jedoch, dass die Transformation von XML nach ABAP nicht über Simple Transformations, sondern manuell erfolgt.

BOPF EPM Datengenerator Dump Debugger

Reparatur des EPM Datengenerator

Um die Probleme im Datengenerator zu beheben, bauen wir die Logik zum Lesen der Quelldaten und Transformieren in die Zielstrukturen einfach neu. Wir kopieren die Quellklasse /BOBF/CL_EPM_DATA_GENERATOR  in eine neue Klasse und implementieren 4 neue DESERIALIZE-Methoden. Den Code der kopierten Klasse kannst Du hier herunterladen.

BOPF EPM Datengenerator Neue ABAP Klasse

Die 4 neuen DESERIALIZE-Methoden setzen jetzt nicht mehr auf den XML-Daten auf, sondern selektieren aus den EPM Standard SNWD_*-Tabellen. Die Transformation in die Zielstrukturen erfolgt also nicht mehr mit Simple Transformations, sondern ganz stumpf in ABAP.  Den ganzen Rest der Klasse mit den Map- und Update-Methoden lassen wir unberührt.

BOPF EPM Datengenerator Execute Methode Neu

Die folgende Abbildung zeigt exemplarisch das Lesen der Produktdaten aus den Standard EPM Tabellen snwd_pd und snwd_texts. Die gelesenen Daten werden transformiert und in die Member Variable mt_products gespeichert. Die später im Rahmen der Excecute-Methode ausgerufene Methoden map_product_data und update_product_data mappen die Produktdaten auf die BOPF-Strukturen und schreiben sie in die EPM BOPF Tabellen /bobf/d_pr_root und /bobf/d_pr_name fort.

BOPF EPM Datengenerator DeserializeProduct Neu

Zusammenfassung

Der von SAP gelieferte BOPF EPM Datengenerator /BOBF/EPM_DATA_GENERATOR funktioniert nicht. In diesem Blog haben wir das durch eine partielle Neuimplementierung repariert. Damit auch auf Deinem System die EPM BOPF Tabellen mit Demodaten gefüllt werden, führe folgende Schritte aus:

  1. Programm SEPM_DG_EPM_STD_CHANNEL ausführen. Dies füllt die EPM Standardtabellen SNWD_*
  2. Reparierter BOPF EPM Datengenerator herunterladen und im System einspielen.
  3. Reparierter BOPF EPM Datengenerator ausführen: Execute Methode in der SE80 in der Testumgebung ausführen.

 

Du programmierst, bist ABAP-interessiert und hast Lust coole Projekte mit uns zu machen? Wir suchen dich! Schau doch mal in unserer Stellenbeschreibung vorbei.

Über den Autor

Rüdiger Lühr

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

16 − = 7