Schnittstellen

Schnittstellen-Customizing


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.

Python
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))

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

Python
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))

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

Python
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'])

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

Python
from ppms.interface import BaseConverter

class ToUppercase(BaseConverter):

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

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

Reihenfolge

Signatur

Verwendung

Rückgabewert

1

before_send(self)

Bereitet das Modul für das Senden von Daten vor

Keinen

2

send(self)

Sendet die Datensätze als Dictionaries

Muss 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

3

after_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

Reihenfolge

Signatur

Verwendung

Rückgabewert

1

before_receive(self)

Bereitet das Modul für das Empfangen von Daten vor

Keinen

2

receive(self, record)

Wird für jeden Datensatz einmal aufgerufen und empfängt den Datensatz

Gibt entweder True zurück, wenn der Datensatz erfolgreich verarbeitet wurde, oder wirft eine CantProcessRecordException

3

after_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 enthalten sein:

Dataitem

DI-Python-ID

SQL-ID

Spaltentyp

DB-Länge

DF-Länge

Sonstiges

UUID

uuid

UUID

UUID

16

36

PK

Schnittstellen-Konfiguration

config_id

CONFIG_ID

UUID

16

36

FK zur DT 560

Status

status

STATUS

Zahl ohne NK, bis 4 Stellen

2

2


Übertragen am

transferred_on

TRANSFERRED_ON

Alpha

80

80


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.