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
sowieBaseValidator
.
Parameter
Informationen
- Die Parameter einer Mapping-Funktion werden in der Klassenmethode
register_parameters
konfiguriert - Über die Klassenmethoden
register_parameter
undunregister_parameter
können neue Parameter hinzugefügt, oder Parameter der Elternklasse entfernt werden.- Siehe auch die Dokumentation in der Mappings API
- 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 überself.parameters
auf die konfigurierten Parameter zugegriffen. Dabei wird der Wert des Parametersvalue
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))
Erstellen eines neuen Validators
Informationen
- Neue Datei unter
ppms.interface
erstellen und eine neue Klasse definieren, die vonBaseValidator
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))
Erstellen eines neuen Enrichers
Informationen
- Neue Datei unter
ppms.interface
erstellen und eine neue Klasse definieren, die vonBaseEnricher
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'])
Erstellen eines neuen Konverters
Informationen
- Neue Datei unter
ppms.interface
erstellen und eine neue Klasse definieren, die vonBaseConverter
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()
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.