Customizing
Version 27 Version 26 39.5.25 39.5.23 39.5.22 39.5.21 39.5.20 39.5.19 39.5.18 39.5.17 German English
Version 27 Version 26 39.5.25 39.5.23 39.5.22 39.5.21 39.5.20 39.5.19 39.5.18 39.5.17 German English

PowerPoint-Export für Module ermöglichen

Ziel

  • Customizen eines PowerPoint-Exports für ein eigenes Modul, analog zu den bereits vorhandenen Exporten.

Hinweis

  • Der PowerPoint-Export läuft komplett serverseitig und ersetzt die frühere, clientseitige IronPython-Lösung vollständig – es gibt keine Kompatibilitätsschicht zur alten Implementierung.

  • Standardmäßig bereits implementiert für die Standard-Module Status (Project Deck 009E9K), Statusbericht (Project Status Report Deck009E9R) und Simulation (Portfolio Roadmap Deck 009E9U ungruppiert / 009EA9 gruppiert). Für ein eigenes Modul wird zusätzlich ein sogenanntes Deck angelegt (siehe Vorgehensweise).

  • Für jede Exportmöglichkeit ist eine eigene .pptx-Vorlage nötig eine normale PowerPoint-Datei mit Platzhaltern, die sich wie gewohnt in Microsoft PowerPoint gestalten lässt.

Vorgehensweise

  • In der .pptx-Vorlage die gewünschten Platzhalter setzen:

Platzhalter

Wirkung

$key.field

Einfache Textersetzung (Titel, Beschriftung, beliebiger Text)

€key.field

Tabellenzeile wird pro Datensatz geklont (automatische Paginierung, wenn die Tabelle über den Folienfuß hinausragen würde)

~key.field

Shape wird durch ein Bild ersetzt (Wert muss Base64-kodiert sein)

^MARKER (frei wählbar, z. B. ^SCHEDULE)

Shape markiert die Fläche für ein Diagramm (Zeitplan/Gantt/Roadmap), wird durch einen Object-Renderer gezeichnet

Der Pfad key.field entspricht dabei genau den Python-IDs, wie sie der Module Reader für das Modul liefert.

  • Ein neues Deck unter next/domain/powerpoint/decks/ anlegen, das von next.framework.powerpoint.deck.BaseDeck erbt.

  • Mindestens TEMPLATE (Dateiname der Vorlage) und _get_output_filename setzen; bei Bedarf _prepare_data überschreiben, um Rohdaten vor dem Rendern umzuformen (z. B. fett markieren, verschachtelte Daten zu flachen Feldern zusammenführen).

  • Für ein Diagramm einen passenden Renderer in OBJECT_RENDERERS registrieren und _get_object_data implementieren.

  • Einen Makro-Einstiegspunkt anlegen (analog zu next/domain/powerpoint/export.py), der das Modul öffnet und generate_deck() aufruft.

Python
from next.framework.powerpoint import deck, template
from next.framework.powerpoint.object_renderers import schedule


class MyModuleDeck(deck.BaseDeck):
    TEMPLATE = 'MyModule_Template.pptx'
    OBJECT_RENDERERS = {'^SCHEDULE': schedule.ScheduleRenderer}

    def _get_output_filename(self, data):
        row = data['project'][0]
        return self._build_output_filename(row['name'], row['func_id'])

    def _prepare_data(self, data):
        # z.B. Feld fett darstellen
        row = data['project'][0]
        row['name'] = template.bold_markdown(row['name'])
        return data

    def _get_object_data(self, marker, data):
        if marker != '^SCHEDULE':
            return None
        tasks = [
            schedule.ScheduleTask(
                name=row['task_name'],
                duration=row.get('duration_rem') or '',
                start=_epoch_days_to_date(row.get('calc_start')),
                end=_epoch_days_to_date(row.get('calc_end')),
                critical=not (float(row.get('buffer') or 0) > 0),
            )
            for row in data['project'][0].get('schedule', [])
        ]
        return tasks or None

Hinweise

  • Diese Seite beschreibt, wie ein eigenes Deck aufgebaut wird. Wie es konkret mit einem PLANTA-Modul bzw. einer Schaltfläche verdrahtet wird (Makro-Modul, Aufruf von generate_deck()), ist hier nur skizziert. Am besten dafür eines der bestehenden Decks (Project Deck, Project Status Report, Portfolio-Roadmap) bzw. deren Makro-Einstiegspunkte in next/domain/powerpoint/export.py als Vorlage nehmen.

  • Für Diagramme stehen drei fertige Renderer zur Auswahl: schedule.ScheduleRenderer (flacher, paginierender Zeitplan), native_gantt.NativeGanttRenderer (hierarchisches Gantt auf einer Folie) und roadmap.RoadmapRenderer (quartalsweise Portfolio-Roadmap, optional gruppiert). Eine eigene Optik lässt sich über das Überschreiben einzelner Klassenattribute erreichen (Farben, Schriftgröße, Zeilenhöhe, …), ohne die Renderer-Logik selbst anzufassen.

  • Text- und Tabellenwerte unterstützen ein festes Set an Inline-Markdown: **fett**, *kursiv*, ~~durchgestrichen~~, `code`, [Text](url) – Zeilenumbrüche, Überschriften und Listen werden nicht unterstützt.

  • Ein Pfad ohne Index in einen Datenbereich mit mehreren Zeilen (z. B. project.name, wenn mehrere Projekte vorliegen) verwendet automatisch Zeile 0 und protokolliert eine Warnung – in dem Fall einen Index ergänzen (project[2].name).

  • Ein gänzlich neuer Diagrammtyp lässt sich als eigener ObjectRenderer ergänzen (Basisklasse next.framework.powerpoint.object_renderers.base.ObjectRenderer), ohne dass am Framework selbst etwas geändert werden muss.