Informationen

  • Jedes Objekt aus der PLANTA link API sollte aus dem ppms.interface Namensraum importiert werden!

Neue Mapping-Funktion anlegen

Informationen

  • Neue Mapping-Funktionen können unter /py/api/ppms/wrapper/customer/ppms/interface/blocks/ angelegt werden.
    • Dazu einfach eine enricher.py, converter.py oder validator.py Datei an dieser Stelle anlegen und mit individuellen Mapping-Funktionen befüllen
  • Das ppms.interface package stellt drei Basisklassen zur Implementierung eigener Mapping-Funktionen zur Verfügung: BaseConverter, BaseEnricher sowie BaseValidator.

Parameter

Informationen

  • Die Parameter einer Mapping-Funktion werden in der Klassenmethode register_parameters konfiguriert
  • Über die Klassenmethoden register_parameter und unregister_parameter können neue Parameter hinzugefügt, oder Parameter der Elternklasse entfernt werden.
  • Auf den Wert der eigenen Parameter kann innerhalb der Instanz über das Dictionary self.parameters zugegriffen werden.

Beispiel

  • Hier wird ein Validator definiert, der prüft, ob der übergebene Wert dem konfigurierten entspricht.
  • Dazu wird ein neuer Parameter mit dem Schlüssel "value" registriert, der keinen Standardwert besitzt, aber ein Mussfeld ist.
  • Innerhalb der check -Methode wird über self.parameters auf die konfigurierten Parameter zugegriffen. Dabei wird der Wert des Parameters value abgerufen.
  • Danach wird geprüft, ob der übergebene Wert dem konfigurierten entspricht.
from ppms.interface import BaseValidator, InvalidRecordException

class Equals(BaseValidator):

    @classmethod
    def register_parameters(cls):
        super(Equals, cls).register_parameters()

        cls.register_parameter(name='value', default='', validator_cls=MandatoryValidator)

    def check(self, value):
        check_value = self.parameters['value']
        
        if value != check_value:
            raise InvalidRecordException('"%s" is not equal to "%s"' % (value, check_value))
PY

Erstellen eines neuen Validators

Informationen

  • Neue Datei unter ppms.interface erstellen und eine neue Klasse definieren, die von BaseValidator erbt.
  • Hier muss die Methode check(self, parameter) implementiert werden.
  • Die Methode muss die InvalidRecordException werfen, wenn die Validierung fehlgeschlagen ist.

Beispiel: Validator, der prüft, ob ein bestimmter Vorgang existiert

from ppms.interface import BaseValidator, InvalidRecordException

class TaskExists(BaseValidator):
  
    @classmethod
    def register_parameters(cls):
        super(TaskExists, cls).register_parameters()

        cls.register_parameter(name='project', default='', validator_cls=MandatoryValidator) 

    def check(self, task_id):
        pr_id = self.parameters['project']
        
        task_record = ppms.search_record(463, [pr_id, task_id], [1097, 1098], True)
        
        if task_record is None:
            raise InvalidRecordException('There is no task "%s" in project "%s"' % (task_id, pr_id))
PY

Erstellen eines neuen Enrichers

Informationen

  • Neue Datei unter ppms.interface erstellen und eine neue Klasse definieren, die von BaseEnricher erbt.
  • Hier muss die Methode enrich(self, parameter) implementiert werden.
  • Die Methode muss den bearbeiteten Wert zurückgeben.

Beispiel: Enricher, um einen Text durch einen anderen zu ersetzen

from ppms.interface import BaseEnricher

class Replacer(BaseEnricher):
    """Gives access to the str.replace function"""
    
    @classmethod
    def register_parameters(cls):
        super(Replacer, cls).register_parameters()

        cls.register_parameter(name='old_value', default='', validator_cls=MandatoryValidator)
        cls.register_parameter(name='new_value', default='', validator_cls=MandatoryValidator)
 
    def enrich(self, arg):
        return arg.replace(self.parameters['old_value'], 
                           self.parameters['new_value'])
PY

Erstellen eines neuen Konverters

Informationen

  • Neue Datei unter ppms.interface erstellen und eine neue Klasse definieren, die von BaseConverter erbt.
  • Hier muss die Methode convert(self, parameter) implementiert werden.
  • Die Methode muss den konvertierten Wert zurückgeben.

Beispiel: Konverter, um einen Text in Großbuchstaben umzuwandeln

from ppms.interface import BaseConverter

class ToUppercase(BaseConverter):

    def convert(self, value):
        return value.upper()
PY

Neue Mapping-Funktion zur Listbox hinzufügen

Informationen

  • Unter PLANTA Link → Schnittstellen-Administration → Schnittstellen-Administration können die neuen Mapping-Funktionen hinzugefügt werden, damit sie in der Objekt Listbox auftauchen

Neue Modulklasse anlegen

Informationen

  • Die Modulklassen implementieren individuelle Übertragungslogik und stellen Andockpunkte zu anderen Systemen dar.
  • Jede Modulklasse, die für die Schnittstelle benutzt werden soll, muss von der Klasse BaseInterfaceModule erben.
  • Die Parameter der Modulklasse funktionieren genauso wie die Parameter der Schnittstellen-Bausteine.
  • Die Basisklasse definiert 6 Methoden, je 3 für den Import und den Export:

Export

ReihenfolgeSignaturVerwendungRückgabewert
1before_send(self)Bereitet das Modul für das Senden von Daten vorKeinen
2send(self)Sendet die Datensätze als DictionariesMuss alle Records einzeln per yield zurückgeben. Der Rückgabewert von yield ist entweder True, wenn der Datensatz erfolgreich empfangen wurde, oder False, wenn ein Fehler aufgetreten ist
3after_send(self, was_successful)Hier können geöffnete Ressourcen wieder geschlossen werden.
Der Parameter was_successful gibt an, ob der Übertrag erfolgreich war.
Keinen

Import

ReihenfolgeSignaturVerwendungRückgabewert
1before_receive(self)Bereitet das Modul für das Empfangen von Daten vorKeinen
2receive(self, record)Wird für jeden Datensatz einmal aufgerufen und empfängt den DatensatzGibt entweder True zurück, wenn der Datensatz erfolgreich verarbeitet wurde, oder wirft eine CantProcessRecordException
3after_receive(self, was_successful)Hier können geöffnete Ressourcen wieder geschlossen werden.
Der Parameter was_successful gibt an, ob der Übertrag erfolgreich war.
Keinen

Neue Pool-Tabelle anlegen

Hinweise

  • Pool-Tabellen sind genauso wie andere Tabellen in PLANTA project zu erfassen.
  • Damit eine Tabelle von PLANTA link korrekt als Pool-Tabelle verwendet werden kann, müssen die folgenden Dataitems aus der DT412 Dataitem enthalten sein:
DataitemDI-Python-IDSQL-IDSpaltentypDB-LängeDF-LängeSonstiges
UUIDuuidUUIDUUID1636PK
Schnittstellen-Konfigurationconfig_idCONFIG_IDUUID1636FK zur DT 560
StatusstatusSTATUSZahl ohne NK, bis 4 Stellen22
Übertragen amtransferred_onTRANSFERRED_ONAlpha8080

 Zu beachten beim Schnittstellen-Customizing

Zu beachten bei Import-Schnittstellen

Achtung

  • Für Schnittstellen, die in eine Tabelle importieren, in der ein Primary Key mit Autonummer vorkommt z.B. (DT463), dieser immer an erster Stelle im Zieldatenbereich des Zielmoduls stehen muss. Dies ist für die späteren Updates relevant.