Neuesten noch nicht übertragenen Datensatz auslesen
Im vorigen Beispiel wurde zyklisch der aktuelle Datensatz aus der Tabelle oder dem Filterergebnis übertragen. Im Folgenden wird gezeigt, wie der aktuelle Datensatz nur dann übertragen wird, wenn er neu ist, also vorher noch nicht übertragen wurde. Sie benötigen dazu neben der Zeitstempelspalte eine Spalte, in der ein erfolgter Datentransfer protokolliert wird. Dieses Beispiel enthält gleich einen zusätzlichen Filter (ConfigID als ID der Messwertreihe) sowie einen Filter auf die Spalte Transfer, um nur nicht transferierte Datensätze zu filtern. Genau wie das vorige Beispiel wäre auch dieser Flow alternativ als Vorlage/Instanz zu realisieren. Gezeigt ist hier aber die einfache Variante.
Erforderliche Felder/Spalten:
| Name | Beschreibung |
|---|---|
| <Zeitstempel> | Zeitstempel vom Typ Datum/Uhrzeit, nach dem sortiert wird |
| <Transfer> | Spalte, in der ein erfolgter Transfer angezeigt wird (Typ: Int, Standardwert: 0) |
| ConfigID | ID der Messwertreihe |
| <Werte> | Spalte(n) mit den relevanten Werten |
Projektieren Sie ein DB-Transferobjekt mit folgenden Eigenschaften:
| Name | Konfiguration |
|---|---|
| Datenquelle | <Ihre Datenbankanbindung aus dem Plug-ins-Bereich> |
| Typ | Select |
Registerkarte: Allgemein
| Name | Konfiguration |
|---|---|
| Tabelle | <Tabelle, die Ihre Daten enthält> |
| Spalten | Alle benötigten Werte-Spalten von „Verfügbar“ nach „Verwendet“ verschieben. |
Registerkarte: Filter
| Name | Konfiguration |
|---|---|
| Filter | „Filter hinzufügen“ legt einen neuen Filter an. Sie benötigen 2 Filter. Die Verknüpfung UND erfolgt standardmäßig. |
| Filter/Filtergruppe bearbeiten | Spalte: ConfigID Vergleichsoperator: EQUAL Spalte: Transfer Vergleichsoperator: EQUAL |
| Vorschau | Hier sollte jetzt stehen: WHERE (ConfigID = ? AND Transfer = ?) |

Registerkarte: Abfrage
| Name | Konfiguration |
|---|---|
| Sortierreihenfolge | Absteigend – damit steht der neueste Datensatz oben. |
| Sortierungsspalte | <Zeitstempel-Spalte> |
| „Datensätze nach durchgeführtem Transfer markieren“ | Ausgewählt. Nur mit dieser Option trägt der OPC Router die Transfermarkierung in die Quelltabelle zurück. |
| Spalte zum Markieren | <Transfer> |
| Markierungswerte | Nicht transferiert: 0, Transferiert: 1, Fehler beim Transferieren: 2. Die drei Werte müssen sich unterscheiden. |
| „Anzahl Datensätze begrenzen auf“ | Aktiviert, Wert 1 – nur der oberste und damit neueste Datensatz wird übertragen. |
| „Verhalten bei leerem Abfrageergebnis“ | „Transfer abbrechen“ – ist kein neuer Datensatz vorhanden, wird nichts transferiert und kein Fehler ausgelöst. |
Für die Markierung benötigt die Quelltabelle einen einfachen Primärschlüssel auf der numerischen Spalte ID. Alle Eigenschaften der Registerkarte beschreibt DB Select-Transferobjekt.
Dieses Transferobjekt filtert also die Daten nach der einzugebenden ConfigID und dem Transferkürzel. Für das Transferkürzel muss „0“ eingegeben werden. Legen Sie ein Konstantenobjekt an mit:
Benötigte Konstanten
| Name | Beschreibung |
|---|---|
| <ConfigID> | ID der Messwertreihe |
| 0 | für nicht transferierte Datensätze |
Verbinden Sie den ConfigID-Wert mit dem Filter-Element ConfigID und die 0 mit dem Filter-Element Transfer:

Projektieren Sie einen Time-Trigger, der die Datenbank zyklisch pollt.
Nach dem Transfer schreibt der OPC Router „1“ in die Spalte Transfer, bei einem Transferfehler „2“. Es wird mit dieser Projektierung jeweils der neueste Datensatz der Messwertreihe mit Transfer = 0 übertragen.
Flow abschließen
Bis hierher ist die Datenquelle projektiert. Zum lauffähigen Flow fehlen drei Schritte:
- Datenziel anbinden. Verbinden Sie die Elemente des DB-Transferobjekts über Item Links mit dem Transferobjekt Ihres Zielsystems. Welche Zielsysteme zur Verfügung stehen und welche Eigenschaften ihre Transferobjekte haben, steht im Kapitel des jeweiligen Plug-ins: alle Plug-ins von A bis Z.
- Produktiv schalten. Wählen Sie in der Ansicht Veröffentlichen die Änderungen aus und klicken Sie auf „Änderungen produktiv schalten“. Bis dahin arbeitet die Laufzeit mit dem zuletzt veröffentlichten Stand weiter.
- Ergebnis prüfen. Die Statusanzeige zeigt, ob der Flow läuft. Im Flow-Status sehen Sie jeden einzelnen Transfer und die übertragenen Werte; die Spalte Transfer der Quelltabelle steht danach auf 1.
Wenn die Daten in der Quelltabelle schneller einlaufen als der Time-Trigger pollt, kann es vorkommen, dass der übertragene Datensatz bereits nicht mehr aktuell ist oder dass Datensätze übersprungen werden. Wägen Sie ab zwischen der erforderlichen Genauigkeit und dem Ressourcenverbrauch am Datenbankserver. Für Datenbankserver, die einen Notification Service anbieten, können Sie stattdessen einen Skript-Trigger programmieren, der den Transfer auslöst, sobald der Datenbankserver ihn informiert. Wenn es darum geht, keinen Datensatz zu verlieren, sollten Sie alle nicht transferierten Datensätze auslesen.