Import parallel geführter Fahrtenbücher aus efa1

Diskussion, Fragen, Anregungen und Wünsche zu efa2

Moderatoren: nick, smg

Forumsregeln
Verfasse bitte die Beiträge in den passenden Kategorien und gib ihnen einen aussagekräftigen Betreff.
Antworte bitte nur zum Thema und beginne ein neues Thema, falls Du noch etwas Zusätzliches sagen möchtest.
Antworten
klinux
Beiträge: 203
Registriert: Mi 21. Jul 2010, 11:36

Import parallel geführter Fahrtenbücher aus efa1

Beitrag von klinux » Fr 30. Mär 2012, 12:53

Hallo,

jetzt bin ich endlich dabei, mich mal wieder mit der Umstellung der Fahrtenbücher unseres Vereins auf efa2 zu beschäftigen. Wir haben zwei Bootshäuser und entsprechend zwei Fahrtenbücher. Wenn ich beide einzeln in efa2 importiere, tauchen keine Fehler auf, nur ein paar wenige Warnungen. Wenn ich beide Fahrtenbücher zusammen in ein Projekt importiere, gibt es haufenweise Fehlermeldungen. Viele Mitglieder werden nicht mehr als eine Person identifiziert und erscheinen doppelt. Außerdem gibt es von vielen Personen mehrere Versionen, für jedes Jahr eine. Bei manchen funktioniert aber auch alles wunderbar. Ich habe z.B. eine Person, die in beiden Häusern gerudert hat, diese wird absolut korrekt erkannt. Eine andere Person war nur in einem Bootshaus. Hier habe ich zwischenzeitlich den Namen aus den *.efbm Dateien des anderen Bootshauses gelöscht. Dadurch habe ich die Person schon mal nicht mehr doppelt. Die vielen Versionen, für jedes Jahr eine, bleiben aber. Andere Mitglieder, die nur in einem Bootshaus waren, werden wieder korrekt importiert. Im Log sehe ich folgende Meldungen zu einer "fehlerhaften" Person:

Code: Alles auswählen

...
INFO - Personen - Importiere Personen aus verein.efbm [1] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=667aaf80-2c6d-467a-83ec-05b891538a93;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1199142000000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005852289]
...
INFO - Personen - Importiere Personen aus hafen.efbm [2] ...
...
ERROR - Personen - Gültigkeit ändern von Eintrag fehlgeschlagen: [#Id#=667aaf80-2c6d-467a-83ec-05b891538a93;FirstName=Eva;LastName=Mustermann;Gender=FEMAL
E;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1199142000000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005852289] (de.nmichael.efa.ex.EfaException: [3] DAT016 (file:persons.efa2persons: [4] Attempt to change versionized data with incorrect validity))
...
INFO - Personen - Importiere Personen aus verein_2009.efbm [5] ...
...
DETAIL - Personen - Identischer Eintrag: [#Id#=667aaf80-2c6d-467a-83ec-05b891538a93;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1199142000000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005852289]
...
INFO - Personen - Importiere Personen aus verein_2010.efbm [6] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=5820baed-595c-4227-8df8-30a6af4946c7;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1262300400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005853663]
...
INFO - Personen - Importiere Personen aus hafen_2010.efbm [7] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=97fd53ce-6884-40ad-a3fd-62b284385a76;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1262300400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005853961]
...
ERROR - Personen - Gültigkeit ändern von Eintrag fehlgeschlagen: [#Id#=5820baed-595c-4227-8df8-30a6af4946c7;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1262300400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005853663] (de.nmichael.efa.ex.EfaException: [8] DAT016 (file:persons.efa2persons: [9] Attempt to change versionized data with incorrect validity))
...
INFO - Personen - Importiere Personen aus verein_2011.efbm [10] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=f13f6bf6-da1e-4c58-af34-1e7cae30a519;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1293836400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854211]
...
INFO - Personen - Importiere Personen aus hafen_2011.efbm [11] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=a4779d11-9317-4bf8-b906-01ad31575f4e;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1293836400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854490]
...
ERROR - Personen - Gültigkeit ändern von Eintrag fehlgeschlagen: [#Id#=f13f6bf6-da1e-4c58-af34-1e7cae30a519;FirstName=Eva;LastName=Mustermann;Gender=FEMAL
E;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1293836400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854211] (de.nmichael.efa.ex.EfaException: [12] DAT016 (file:persons.efa2persons: [13] Attempt to change versionized data with incorrect validity))
...
INFO - Personen - Importiere Personen aus verein_2012.efbm [14] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=e36adb3e-b111-48e1-9ecb-34ff61f9fb9f;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1325372400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854722]
...
INFO - Personen - Importiere Personen aus hafen_2012.efbm [15] ...
...
DETAIL - Personen - Importiere Eintrag: [#Id#=61f6d6aa-cd06-48ce-9db5-2f673052eb6a;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1325372400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854891]
...
ERROR - Personen - Gültigkeit ändern von Eintrag fehlgeschlagen: [#Id#=e36adb3e-b111-48e1-9ecb-34ff61f9fb9f;FirstName=Eva;LastName=Mustermann;Gender=FEMALE;Birthday=1968;StatusId=1e9ca125-8273-4ed1-9349-548a67e70760;InputShortcut=ba-e;#ValidFrom#=1325372400000;InvalidFrom=9223372036854775807;ChangeCount=1;LastModified=1333005854722] (de.nmichael.efa.ex.EfaException: [16] DAT016 (file:persons.efa2persons: [17] Attempt to change versionized data with incorrect validity))
Ich habe leider keine Idee, warum manche Personen korrekt importiert werden und andere nicht. Woran könnte das liegen?

Viele Grüße

nick
Beiträge: 1300
Registriert: Sa 10. Jul 2010, 11:45

Re: Import parallel geführter Fahrtenbücher aus efa1

Beitrag von nick » So 1. Apr 2012, 02:02

Hallo Kay,

bei der Modellierung der Daten zwischen efa1 und efa2 gibt es einige Unterschiede. Einer der Wichtigsten ist die Versionierung: In efa2 kann ein und dieselbe Person zu verschiedenen Zeitpunkte verschiedene Attribute haben (z.B. Status, Nachnamen, usw.). Dadurch ist es in efa2 nicht mehr notwendig, Personen in separaten Listen pro Fahrtenbuch zu speichern - stattdessen gibt es nur noch eine globale Liste. In efa1 hingegeben existieren separate Personenlisten pro Fahrtenbuch, und im Falle von Namensänderungen von Personen zusätzlich ggf. noch Einträge in der Synonymliste. Gleiches gilt für Boote und Ziele. Der Import muß sich also aus den Daten von efa1 zusammenreimen, wie die wohl gemeint sein könnten, und versuchen, daraus was cleveres für efa2 zu basteln.

Dabei geht der Import wie folgt vor:
  • Für jedes zu importierende Fahrtenbuch muß ein Gültigkeitszeitraum angegeben werden.
  • Die Fahrtenbücher werden in der Reihenfolge ihres angegebenen Gültigkeitsbeginns importiert (älteste zuerst). Wenn zwei Fahrtenbücher mit gleichen Gültigkeitsbeginn vorliegen (wie bei Dir im Fall von zwei Bootshäusern, wo Du für jeden Zeitraum 1.1. bis 31.12. genau zwei Fahrtenbücher hast), dann wird nach alphabetischer Reihenfolge der Dateinamen entschieden (bei Dir also hafen vor verein).
  • Für jedes Fahrtenbuch, das importiert wird, wird die zugehörige Mitgliederliste mit den bereits importierten Personen verglichen (gleiches gilt für Boote und Ziele).
  • Wenn eine zu importierende Person mit demselben Namen und denselben Eigenschaften (Jahrgang, Geschlecht, Status, ...) bereits importiert wurde, und zum Zeitpunkt des zu importierenden Fahrtenbuchs gültig ist, dann macht efa nichts.
    • Beispiel: Fahrtenbuch 2009 wurde importiert. Person Manfred Mustermann wurde mit Gültigkeitsbeginn 1.1.2009 in efa2 importiert. Im 2010er Fahrtenbuch steht Manfred Mustermann ebenfalls in der Mitgliederliste mit identischen Eigenschaften. Der zuvor importierte Eintrag ist ab 1.1.2009 unbegrenzt gültig, also auch zum Zeitpunkt des 2010er Fahrtenbuchs, also braucht efa hier nichts zu machen.
  • Wenn eine zu importierende Person mit demselben Namen, aber anderen Eigenschaften (z.B. anderer Status) bereits importiert wurde, dann erzeugt efa beim Import eine neue Version.
    • Beispiel: Aus dem 2009er Fahrtenbuch wurde Manfred Mustermann mit Gültigkeitsbeginn 1.1.2009 in efa2 importiert. Im 2010er Fahrtenbuch steht Manfred Mustermann ebenfalls in der Mitgliederliste, hat aber einen veränderten Mitgliedsstatus. Dann erstellt efa beim Import eine neue Version des Datensatzes, die ab 1.1.2010 gültig ist (Gültigkeitsbeginn des 2010er Fahrtenbuchs), und ändert für die neue Version den Status von Manfred.
  • Wenn der Import feststellt, daß eine zuvor bereits importierte Person in der Mitgliederliste des aktuell zu importierenden Fahrtenbuchs nicht mehr vorkommt, dann interpretiert der Import das so, daß diese Person aus der Mitgliederliste gelöscht wurde (denn in den vorherigen Mitgliederliste war sie ja drin). Häufige Ursache für das Löschen ist der Austritt dieser Person aus dem Verein. efa muß also nun diese Person ab dem Datum des jetzt zu importierenden Fahrtenbuchs als ungültig markieren, da die ja in der Mitgliederliste nicht mehr drinsteht, und sonst am Ende des Imports alle jemals erfaßten Mitglieder als gültige Mitglieder vorhanden wären, auch wenn sie in späteren efa1-Mitgliederlisten längst gelöscht wurden.
  • Beispiel: Aus dem 2009er Fahrtenbuch wurde Manfred Mustermann mit Gültigkeitsbeginn 1.1.2009 in efa2 importiert. Im 2010er Fahrtenbuch steht Manfred Mustermann nicht mehr in der Mitgliederliste drin. efa2 markiert dann Manfred ab dem 1.1.2010 als ungültig, d.h. ändert den Gültigkeitszeitraum der zuvor importierten Version von 1.1.2009 - unbegrenzt auf 1.1.2009 bis 31.12.2009.
Was also bei Dir passiert ist folgendes: Eva Mustermann wurde aus Mitgliederliste verein.efbm mit Gültigkeitsbeginn 1.1.2008 importiert. In der Mitgliederliste hafen.efbm, die als nächstes importiert wird, steht Eva Mustermann nicht mehr drin. Also muß efa nun die Eva als ungültig markieren. Das Fahrtenbuch zur Mitgliederliste hafen.efbm ist jedoch ebenfalls ab 1.1.2008 gültig. Also versucht efa, Eva ab 1.1.2008 als ungültig zu markieren, so daß die einzige Version des Datensatzes Eva also zum selben Zeitpunkt gültig wird, wie sie auch ungültig wird. Das geht schief (zurecht), und es erscheint die Fehlermeldung, daß das Ändern der Gültigkeit fehlgeschlagen ist.

Natürlich könnte efa hier tricksen und Eva erst eine Sekunde später ungültig erklären. Dann käme es nicht zu diesem Fehler. Das wäre dann jedoch nicht das gewünschte Ergebnis, denn in diesem Fall möchtest Du ja, daß Eva weiterhin gültig bleibt - Eva ist nur in Deiner einen Mitgliederliste nicht erfaßt.

Dieser Fehler pflanzt sich durch alle Mitgliederlisten, in denen Eva nicht drinsteht, fort. Das "schöne" an diesem Fehler ist jedoch, daß er genau zu dem gewünschten Ergebnis führt - daß nämlich Eva in der efa2-Personenliste erhalten bleibt. Und es werden für Eva auch nicht mehrere Versionen angelegt, da alle (existierenden) Einträge zu Eva aus den efa1-Mitgliederlisten identisch sind. Diesen Fehler kannst Du also einfach ignorieren.

Zu Deinem zweiten Fehler - Personen, für die mit jedem importierten Fahrtenbuch eine neue Version angelegt wird: Das sind Personen, deren Daten sich zwischen den Mitgliederlisten unterscheiden. Aber auch das passiert nur, wenn sich Eigenschaften der betreffenden Personen zwischen Fahrtenbüchern mit verschiedenen Zeiträumen unterscheiden. Der Fall, daß z.B. in der verein-Mitgliederliste eine Person immer mit Status Junior drinsteht, und in der hafen-Mitgliederliste mit Status Senior, würde nur zu einer Warnung führen, daß efa den Status der Person nicht ändern konnte (weil die Gültigkeitszeiträume identisch sind).

Fazit: Es ist schwierig für efa2, hier anders vorzugehen, weil efa2 kein Wissen darüber hat, was Du in Deinen Daten in efa1 genau gemeint hast. efa2 könnte natürlich beim Import alle Mitgliederlisten von Fahrtenbüchern aus dem gleichen Zeitraum als eine große, gemeinsame Mitgliederliste betrachten, aber auch dann stellt sich die Frage, wie efa damit sinnvoll umgehen soll, wenn sich die Daten in diesen Mitgliederlisten widersprechen (z.B. eine Person in der einen Mitgliederliste als Junior drinsteht, in der anderen als Senior).

Daher habe ich momentan keine gute Lösung parat, außer Dir zu raten, Deine Mitgliederlisten zwischen den Fahrtenbüchern der beiden Bootshäuser abzugleichen, so daß sie jeweils für ein Jahr zwischen beiden Bootshäusern identisch sind. Notfalls mit einem kleinen Skript, falls es zu viele Mitglieder betrifft...

Gruß,
Nicolas

PS: Eva in Schreibweise mit dem V zu sehen schmerzt meinen Augen... :D Im Ernst, es fällt mir echt sofort ins Auge und wirkt für mich falsch geschrieben... ich kenne nur noch efa. EVA ist für mich Eingabe Verarbeitung Ausgabe.

klinux
Beiträge: 203
Registriert: Mi 21. Jul 2010, 11:36

Re: Import parallel geführter Fahrtenbücher aus efa1

Beitrag von klinux » Mo 16. Apr 2012, 12:30

Hallo Nicolas,

ah so funktioniert das. Ok, ich habe nun ein kleines Python-Skript geschrieben, welches zwei Fahrtenbücher daraufhin abgleicht. Es werden einfach jeweils die Personen/Boote/Ziele, die noch nicht vorhanden sind in das jeweils andere Fahrtenbuch übertragen. Wenn man die fahrtenbücher fahrtenbuch1_2012.efb und fahrtenbuch2_2012.efb hat, ruft man das Skript mit "./efa_sync.py fahrtenbuch1_2012 fahrtenbuch2_2012" unter Linux auf, unter Windows sollte das auch irgendwie funktionieren. Wie man sieht, muss man den Befehl ggf. für mehrere Jahrgänge ausführen.
Nachdem ich meine Fahrtenbücher mit dem Skript korrigiert habe, bleiben nur noch wenige Warnungen beim Import übrig, die sich leicht von Hand beheben lassen.
Das Skript gibt es hier: http://www.hannay.de/index.php?option=c ... &Itemid=43

Nun stimmt nur bei Kombibooten die Auswahl der Variante noch nicht und lässt sich auch händisch nicht ändern, aber das ist evtl. in efa 2.0.1 behoben.

Viele Grüße

nick
Beiträge: 1300
Registriert: Sa 10. Jul 2010, 11:45

Re: Import parallel geführter Fahrtenbücher aus efa1

Beitrag von nick » Mo 16. Apr 2012, 18:26

Hi Kay,

super, vielen Dank fuer Deine Muehe und das Bereitstellen dieses Skripts. Sollte ich das vielleicht bei den Hinweisen zu Installation/Umstieg verlinken, mit einer kleinen Erlaeuterung was genau das Problem ist, und wie und warum Dein Skript das Problem behebt?

Ja, mit den Kombibooten und deren Auswahl gab es in 2.0.0 diverse Bugs. Ich hoffe, dass die in 2.0.1 jetzt alle behoben sind. Falls nicht, bitte nochmal bescheid sagen.

Gruss,
Nicoals

klinux
Beiträge: 203
Registriert: Mi 21. Jul 2010, 11:36

Re: Import parallel geführter Fahrtenbücher aus efa1

Beitrag von klinux » Fr 11. Mai 2012, 13:21

Hallo Nicolas,

so, bei uns läuft jetzt in beiden Bootshäusern efa 2 :-) Es hat mich einiges an Arbeit gekostet, mit dem Skript ging es aber deutlich einfacher. Die Probleme sind eher den kaputten Daten zuzuschreiben.
Du kannst das Skript gerne verlinken, kein Problem. Ich hoffe, es hilft dem Einen oder Anderen.

Ein Problem gibt es wohl noch mit Standardmannschaften. Wir hatten für ein paar Boote welche, hier konnten die Einträge von nicht-Standardmannschaften oft nicht korrekt abgeschlossen werden, weil am Ende doch wieder die Standardmannschaft drin stand. Ich habe die Mannschaften kurzerhand rausgeworfen :-) Mal sehen, ob ich das Problem demnächst noch mal nachstellen kann.

Viele Grüße

nick
Beiträge: 1300
Registriert: Sa 10. Jul 2010, 11:45

Re: Import parallel geführter Fahrtenbücher aus efa1

Beitrag von nick » Di 15. Mai 2012, 07:11

Hi Kay,

das mit den Standardmannschaften klingt komisch. Ich habe mir das gerade mal angeschaut, aber nachstellen kann ich das Problem nicht. Beim Abschließen der Fahrt kann ich mir das gar nicht so recht vorstellen, wenn überhaupt eher beim Beginnen der Fahrt, daß eine händisch eingetragene Mannschaft von der Standardmannschaft überschrieben wird. Aber auch das eigentlich nur, wenn während der Eingabe nochmal der Bootsname verändert wird, was nur möglich ist, wenn ein unbekanntes Boot ausgewählt wurde.... rätselhaft. Falls Du das nochmal reproduzieren kannst, gib mir bitte bescheid.

Gruß,
Nicolas

Antworten