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

Module Reader

Allgemeines

Der Module Reader wandelt die für den Benutzer sichtbaren Daten eines PLANTA-Moduls in reines JSON um – wahlweise die Daten selbst oder ein JSON-Schema, das deren Struktur beschreibt. Dabei durchläuft er die Datenbereiche des Moduls genauso, wie der Client sie darstellen würde: Das Customizing (Sichtbarkeit, Überschriften, feldweise Konfiguration) wird berücksichtigt, Felder, die kein Benutzer sehen soll, werden übersprungen. Ist ein Datenfeld als Diagramm konfiguriert, wird es – sofern die Lese-Session dies zulässt – zusätzlich als Base64-kodiertes Bild mit ausgegeben.

Dieser Ansatz kann als eine umfangreichere Alternative zur Transformation der Daten über Web-Entitäten gesehen werden, deren Möglichkeiten dadurch beschränkt sind, dass sich Web-Entitäten immer auf eine Tabelle beziehen und dadurch komplexe Modulkonstruktionen nicht über sie abgebildet werden können.

Auch kann der Ansatz zum vereinfachten Customizing verwendet werden, da der gesamte Customizing-Baukasten (Formate, Verdichtung, Gruppierung, virtuelle Felder, ...) zur Verfügung steht.

Der Module Reader ist auf zwei Wegen erreichbar:

  • Über das Web, über den Endpunkt /module/{module_id}, der in einer Clientless-Session ein dediziertes Makromodul öffnet und dieses das Zielmodul auslesen lässt.

  • Direkt im Backend-Python-Code, da Base.read_module_data_for_web – die Methode, die der Web-Endpunkt letztlich aufruft – auf der gemeinsamen Wrapper-Klasse jeder PLANTA-Modulinstanz definiert ist. Jedes Modul, egal wie geöffnet, kann so mit einem einzigen Methodenaufruf seinen eigenen JSON-Export erzeugen – ganz ohne Web-Request.

Modul-Endpunkt

Über den Modul-Endpunkt ModuleReaderImplementation kann ein freigegebenes Modul übers Web ausgelesen werden. Die Query-Parameter werden an die Modulklasse weitergegeben. Standardmäßig bekommt man die Daten zu einem Modul als JSON. Übergibt man „format=json-schema", bekommt man eine JSON-Schema-Datei zum Modul, statt den Moduldaten.

Die Implementation prüft, ob das angeforderte Modul für das Web freigegeben ist. Wenn ja, wird es über ein Makromodul (009DVH) in einer Clientless-Session geöffnet und die read_module_data_for_web()-Methode aufgerufen.

Konfiguration im Customizing

Im Modul Weitere Modulparameter muss für das Modul, dessen Daten exportiert werden sollen, die Checkbox Web-Export aktiviert werden.

Die Datenbereiche des Moduls, die beim Export berücksichtigt werden sollen, müssen eine Python-ID und Datenfelder in Fenster 1/2/3 haben.

Ist für einen Datenbereich auf oberster Ebene die Checkbox Nie Anzeigen aktiviert, wird er übersprungen.

Über die Datenfeld-Konfiguration kann das Verhalten für einzelne Felder angepasst werden:

  • get-tech-value: Liest den technischen Wert aus dem Feld, statt die String-Repräsentation

  • use-df-heading: Statt der Python-ID wird die DF-Überschrift als Schlüssel verwendet

Beispiel

Python
from ppms import ppms
from ppms.customizer.module_reader import ModuleReader

macro = ppms.get_macro_module()
with macro.open_module('002858') as replanning_module:
    reader = ModuleReader(module=replanning_module)

    schema = reader.get_json_schema_definition()
    data = reader.read_module_data_as_dictionary()

Da jedes Modul sich bereits selbst auslesen kann, geht es auch kürzer:

Python
with macro.open_module('002858') as replanning_module:
    data = replanning_module.read_module_data_for_web({'format': 'json'})

Individuelle Kundencustomizings

Die Methode read_module_data_for_web(self, query_parameters) auf der Modulklasse ist dafür verantwortlich, die Daten auszulesen und zurückzugeben. Sie kann in einer Modulunterklasse überschrieben werden, um das Verhalten anzupassen und z. B. über die Query-Parameter die Filter im Modul zu setzen.

Python
class ExampleCustomerReader(Base):
    def read_module_data_for_web(self, query_parameters):
        # Read a project_id from the query parameters and set it as search criteria in a specific DA
        project_id = query_parameters.get('project_id', None)
        if project_id is not None:
            self.project.get_customizing().pr_id.set_search_criteria(project_id, project_id)

        return super().read_module_data_for_web(query_parameters)