Script Logic über Excel Button ausführen

Script Logic über Excel Button ausführen
5 Sterne
4 Bewertungen

In dem Beitrag Script Logic Befehle in BPC 10.0 habe ich die Syntax für Skriptlogik Funktionen erläutert. Sie können diese Formeln jedes Mal beim Speichern ausführen, wenn Sie die Skripte in die DEFAULT.LGF einbinden (Administration -> Regeln -> Logikskripts -> das jeweilige Modell). Zum Beispiel:

*INCLUDE LOGIC_1.LGF

Oft gibt es jedoch Anforderungen bestimmte Formeln bzw. Funktionen über einen Button ausführen zu lassen. In diesem How-To erfahren Sie wie es geht.
Für die zentrale Ausführung von Logikskripts werden Data Manager Packages verwendet. Legen Sie eine neue Package Group an (Data Manager -> Organize -> Organize Package List), in unserem Beispiel „Script Logic“.
Fügen Sie dann über Rechtsklick -> Add Package ein neues Paket hinzu. Ich verwende die Standard-Prozesskette /CPMB/DEFAULT_FORMULAS. Vergeben Sie den Namen (Package Name), z.B. „Copy Actual Data“, und die Beschreibung. Stellen Sie ein, ob das Data Package von Administratoren oder Usern (entsprechend den Einstellungen in Berechtigungen) ausgeführt werden kann. Speichern Sie die Einstellungen und wählen Sie anschließend Modify Package aus. Klicken Sie auf Modify Script und dann auf Advanced.

Modify Package

Data Manager Package

Geben Sie den folgenden Code ein. In diesem Beispiel werden keine Variablen übergeben, daher habe ich die SELECTION Anweisung entfernt.

TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SUSER,%USER%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPPSET,%APPSET%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPP,ACT) //Modell bzw. Cube
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,LOGICFILENAME,COP_ACT.LGF) //Name des Logikskripts

Die Script Logic soll auf dem ACT Cube ausgeführt werden, dieser enthält die Ist-Daten. Die Datei COP_ACT.LGF enthält neben *XDIM_MEMBERSET die folgenden Anweisungen:

*DESTINATION_APP = PLAN //Plan-Cube

*WHEN CATEGORY
*IS "ACTUAL"
*REC(EXPRESSION=%VALUE%)
*ENDWHEN

*COMMIT

Damit werden die Ist-Daten auf den Plan-Cube geschrieben.

Als nächstes bauen wir den Button. Dazu müssen Sie zunächst den Reiter für Entwicklertools (Englisch – Developer Tools) aktivieren. Gehen Sie dazu in die Registerkarte „Datei“. Klicken Sie nun auf „Optionen“ und anschließend „Menüband anpassen“. Aktivieren Sie unter Hauptregisterkarten das Kästchen „Entwicklertools“.

Developer Tab

Entwicklertools einblenden

Nun müssen Sie Makros und VBA aktivieren. Klicken Sie nun auf den eingeblendeten Reiter „Entwicklertools“ und wählen Sie „Makrosicherh.“ aus.

Einstellungen für Makros

Makrosicherheitseinstellungen

Wählen Sie die folgenden Einstellungen: für Makros – Alle Makros aktivieren, Entwicklermakroeinstellungen – Zugriff auf das VBA-Projektobjektmodell vertrauen.

Nun wollen wir mithilfe einer Skriptlogik Ist-Daten auf den Plan-Cube kopieren.
Dazu wird über VBA ein API ausgeführt.
Die generische Syntax lautet wie folgt:

Sub Button()
Application.Run "APIName", "MethodName", "", "Arg1", "Arg2", "Arg3"
End Sub

Beispiel Data Package:
APIName = EPMExecuteAPI
MethodName = DataManagerRunPackage
LinkName = wird nicht verwendet, ist jedoch notwendig. Also immer „“
Arg1 = Package Name
Arg2 = Package Group
Arg3 = Team ID (bzw. „“ für Company)

Legen Sie über Entwicklertools -> Einfügen -> Schaltfläche einen Button an. Vergeben Sie einen Makronamen, z.B. ButtonClick1 und klicken Sie auf Neu. Geben Sie den folgenden Code ein:

Sub ButtonClick1()
Application.Run "EPMExecuteAPI", "DataManagerRunPackage", "", "Copy Actual Data", "Script Logic", ""
End Sub

Bei einem Klick auf den Button wird nun das Data Manager Paket ausgeführt und die Daten werden rüberkopiert.
Nun möchte ich die auf einer aggregierten Ebene geplanten Daten anhand von Ist-Daten verteilen. Dazu habe ich auf dem Modell (Cube) PLAN das Skript DIR_STRAT.LGF mit *RUNALLOCATION angelegt. Das entsprechende Data Manager Package wurde ebenfalls angelegt. Ich möchte mit einem Klick die Daten von Ist-Cube in den Plan-Cube kopieren (wird auf dem ACT Modell ausgeführt) und die Daten anschließend verteilen (wird auf dem PLAN Modell ausgeführt). Daher habe ich die beiden Packages in einem Package Link zusammengefasst. Das BI IP Pendant dazu wäre eine Planungssequenz.

Die VBA Syntax für Package Links ist eine andere. Es wird die Methode DataManagerRunPackageLink verwendet und Sie benötigen die Package Link ID sowie den Package Link Namen (in diesem Beispiel „Copy and Distribute Strat Plan“). Während Sie den Namen leicht herausfinden können (Sie vergeben ihn selbst) müssen Sie die ID im Backend nachschauen.
Lassen Sie Ihren Package Link laufen und gehen Sie anschließen in die Tabelle UJD_LINK_LOG (Transaktion SE16). Dort können Sie über den Namen (LINK_NAME) die dazugehörige ID finden. Alternativ können Sie die ID über die Tabelle UJD_LINK anhand von User und Timestamp rausfinden.
Ändern Sie nun Ihr Makro wie folgt:

Sub ButtonClick1()
Application.Run "EPMExecuteAPI", "DataManagerRunPackageLink", "", "DGWPFKBVYSKTUY8BFXPDZ8UTH", "Copy and Distribute Strat Plan"
End Sub

Nun wird nach einem Klick auf den Button die Sequenz ausgeführt.

Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

Denis Reis ist Business Intelligence Consultant und gibt als Buchautor sein Wissen rund um den SAP Projektalltag weiter. Wenn Sie tatkräftige Unterstützung bei Ihren SAP BI Projekten benötigen, können Sie ihn über Xing, LinkedIn oder Facebook kontaktieren.
Des Weiteren unterrichtet er Projektmanagement und Controlling an der Wiesbaden Business School. Der aus Düsseldorf stammende Familienmensch zählt zu denjenigen, die auf komplizierte Darstellungen verzichten und das Ganze auf den Punkt bringen.

0 Kommentare

Dein Kommentar

Want to join the discussion?
Feel free to contribute!

Kommentar verfassen