Seite 1 von 1

direkte Manipulation der internen Daten durch XML-Zugriff?

Verfasst: Mi 30. Sep 2015, 20:01
von achimtvon72
Besteht die Möglichkeit, die internen Datensätze direkt zu manipulieren?

Die aktuellen Daten werden von efa in xml-Dateien abgelegt:

in [c:\Users\...\efa2\data\[ProjektName_efa]\... sind die Daten abgelegt:
z.B. 2015.efa2logbook

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<efa>
  <header>
    <program>efa</program>
    <version>2.1.1_04</version>
    <name>2015</name>
    <type>efa2logbook</type>
    <scn>10</scn>
  </header>
  <data>
    <record>
      <EntryId>1</EntryId>
      <Date>29.09.2015</Date>
      <BoatId>2c5ddb1d-3e81-4c24-9faf-ea878f20de47</BoatId>
      <BoatVariant>1</BoatVariant>
      <Crew1Name>XXX XXXX</Crew1Name>
      <BoatCaptain>1</BoatCaptain>
      <StartTime>17:45:00</StartTime>
      <EndTime>18:55:00</EndTime>
      <DestinationId>79bbe776-449f-4ff4-88ed-add2b8307104</DestinationId>
      <Distance>4 km</Distance>
      <SessionType>TRAINING</SessionType>
      <ChangeCount>2</ChangeCount>
      <LastModified>1412009805858</LastModified>
    </record>
    ---
    </record>
  </data>
</efa>
Wird im efa-Bootshaus z.B. eine neue Fahrt erstellt oder beendet, wirkt sich das direkt auf die jeweiligen XML-Dateien aus. Die Daten lassen sich hervorragend auslesen und z.B. für eine Erstellung einer vereinfachten Online-Version (soll in die Homepage eingebunden werden bzw. für Mobilgeräte der Mitglieder verfügbar sein) nutzen.
Eine Änderung den XML-Dateien (geplant durch ein Script der Online-Version bzw. erstmal händisch) ergibt jedoch keine Änderung im efa (erst mit Neustart). efa erkennt aber die Änderung nicht und die Fahrt kann im Original efa-Bootshaus nicht beendet sein.

Beispiel: Ein Mitglied startet seine Fahrt woanders und gibt vorher die Fahrt in der online-Version (mobil) ein und kommt zum Bootshaus. Beenden kann er die Fahrt nicht, da efa sie nicht erkennt.

Gibt es die Möglichkeit einen Datenabgleich mit diesen Daten routinemäßig durchzuführen, ohne efa neu starten zu müssen?


Und eine rechtliche Frage an Nicolas Michael:
Dürfen wir so ins efa (Dein Wissen) eingreifen und eine online-Variante erstellen?

Re: direkte Manipulation der internen Daten durch XML-Zugrif

Verfasst: Fr 2. Okt 2015, 12:58
von iww-martin
Hallo achimtvon72!

Auch wenn die xml-Datendateien mit ihren Inhalten so einladend offen vor Dir liegen... ich würde nicht versuchen, diese xml-Dateien mit externen, schreibenden Prozessen direkt zu verändern. :shock:

Allein ein offener Fahrtenbucheintrag wird in zwei xml-Dokumenten angelegt. Es gibt auf dieser Datenquelle keine Transaktionsverwaltung und Du wirst eher früher als später inkonsistente Daten haben. :(

Du kannst aber die großartigen Export- und Importmöglichkeiten von efa nutzen, um Daten in Form von xml-Dateien mit efa auszutauschen. Export- und Importprozesse können mit der Kommandoschnittstelle efaCLI automatisiert werden.

Wir haben bereits seit einiger Zeit eine Internetseite "efa mobil", über die Fahrtenbucheinträge unterwegs über ein Smartphone oder Tablet oder von zuhause am Computer erfasst werden können. Als Ergebnis bekomme ich eine fertige xml-Importdatei für Fahrtenbucheinträge, die ich in regelmäßigen Abständen in das Vereinsfahrtenbuch im Bootshaus lade.

Leider hat unser Bootshaus (noch) keinen Internetanschluss. Sonst könnte das Laden der extern erfassten Fahrtenbucheinträge mit efaCLI automatisiert werden.

Schau auch mal unter "Hilfe" auf efa.nmichael.de. Dort findest Du unter "Innovative Ideen zum Einsatz von efa im Bootshaus" ein Beispiel zur Anzeige von den Booten auf dem Wasser auf einer Vereinshomepage...

Viele Grüße
Martin

Itzehoer Wasser-Wanderer e.V.

Re: direkte Manipulation der internen Daten durch XML-Zugrif

Verfasst: Fr 2. Okt 2015, 15:45
von achimtvon72
Hallo Martin,

vielen Dank für die Rückmeldung.

Also über ein Script auf Eurer Seite "efa mobil" erzeugt Ihr eine XML-Datei, die ihr dann später über die import-Funktion einpflegt?
Pflegt Ihr da nur komplette Fahrten ein (die auch beendet sind) oder auch Fahrten, die erst nur begonnen wurden?
Ich würde halt auch begonnene Fahrten ins efa zurückführen. Und das klappt nicht so recht.

Eine Lösung wäre demnach
1. eine in "efa mobil" begonnene Fahrt: Script erzeugt XML
<?xml version="1.0" encoding="UTF-8"?>
<export type="text">
<Record>
<EntryId>5</EntryId>
<Date>02.10.2015</Date>
<Boat>018_Tölpel</Boat>
<BoatVariant>1</BoatVariant>
<Crew1>xxxxxxxxxx</Crew1>
<BoatCaptain>1</BoatCaptain>
<StartTime>15:10:00</StartTime>
<SessionType>Training</SessionType>
<Open>true</Open>
<ChangeCount>1</ChangeCount>
<LastModified>1443791411626</LastModified>
</Record>
</export>
2. Das Script stößt efaCLI an für den import der Fahrt...
efaCLI ... fahrten import -impmode=add -entryno=alwaysadd FahrtBspNurBegonnen.XML
fertig?

Für Fahrten gibt es keine Kommandos im efaCLI ...
Ich habe es einfach mal versucht, in dem ich die exportierte XML-Datei händisch als Admin wieder eingepflegt habe, nachdem die Fahrt abgebrochen wurde.
Sie wird wohl importiert und man findet sie dann auch im Fahrtenbuch, jedoch als abgeschlossene Fahrt ohne Ankunftszeit.
Die Fahrt wird nicht rechts als auf Fahrt angezeigt und sie kann nicht beendet (Ankunftszeit / km etc. darstellen) werden. Das müsste ich als Admin dann wieder händisch aktualisieren....

Finde ich noch nicht so recht zielführend, da hier ja auch die Konsistenz der Datensätze gefährdet ist.

Re: direkte Manipulation der internen Daten durch XML-Zugrif

Verfasst: Fr 2. Okt 2015, 17:22
von iww-martin
Hallo achimtvon72!

So sieht unser efa mobil aus http://www.itzehoer-wasser-wanderer.de/test/

Wir erzeugen eine xml-Datei für den Import in das Fahrtenbuch ausschließlich mit abgeschlossenen Fahrten.

zur Info...
(1) Das Attribut <Open>true</Open> führt beim Import nicht zu einem offenen Fahrtenbucheintrag.
(2) <EntryId></EntryId> ist für neue Fahrtenbucheinträge leer. Diese wird von efa vergeben. Eine EntryId muss angegeben werden, wenn vorhandene Datensätze mit einem Upload geändert werden sollen.
(3) <ChangeCount></ChangeCount> und <LastModified></LastModified> werden nicht mit importiert. Darum kümmert sich efa.

So sieht ein Eintrag in der Importdatei aus:

Code: Alles auswählen

<?xml version="1.0" encoding="ISO-8859-1"?>
<export type="text">
<Record>
<EntryId></EntryId>
<Date>23.09.2015</Date>
<EndDate></EndDate>
<Boat>Lööft Joot</Boat>
<BoatVariant>1</BoatVariant>
<Cox></Cox>
<Crew1>Mustermann, Erich</Crew1>
<Crew2></Crew2>
<Crew3></Crew3>
<Crew4></Crew4>
<Crew5></Crew5>
<Crew6></Crew6>
<Crew7></Crew7>
<Crew8></Crew8>
<Crew9></Crew9>
<Crew10></Crew10>
<Crew11></Crew11>
<Crew12></Crew12>
<Crew13></Crew13>
<Crew14></Crew14>
<Crew15></Crew15>
<Crew16></Crew16>
<Crew17></Crew17>
<Crew18></Crew18>
<Crew19></Crew19>
<Crew20></Crew20>
<Crew21></Crew21>
<Crew22></Crew22>
<Crew23></Crew23>
<Crew24></Crew24>
<StartTime>14:00</StartTime>
<EndTime>15:30</EndTime>
<Destination>Stör: IWW - Kasenort - IWW</Destination>
<WatersList></WatersList>
<Distance>17 km</Distance>
<Comments></Comments>
<SessionType>Wanderfahrt</SessionType>
<SessionGroup></SessionGroup>
</Record>
</export>
Sollte unser Drachenboot mit Trommler/in unterwegs gewesen sein, steht zusätzlich <BoatCaptain></BoatCaptain> mit der Platznummer ihres/seines Namenseintrags zwischen <Crew24></Crew24> und <StartTime></StartTime>.

Ich sehe gerade, dass efaCLI den Import von Fahrtenbucheinträgen noch nicht unterstützt. :(

@Nick: Lässt sich efaCLI erweitern, damit auch Importe von Fahrtenbucheinträgen möglich sind?
Eines - hoffentlich nicht allzu fernen - Tages haben wir im Bootshaus Internet und dann würde uns diese Funktion fehlen... ;)

Viele Grüße
Martin

Itzehoer Wasser-Wanderer e.V.

Re: direkte Manipulation der internen Daten durch XML-Zugrif

Verfasst: Sa 3. Okt 2015, 22:18
von achimtvon72
Hallo Martin,

vielen Dank. Die Seite sieht sehr schick aus. Habt ihr gut gemacht. So was schwebte mir halt vor.

Aber wenn ich offene Fahrten nicht importieren kann und diesen import nicht automatisch abwickeln lassen kann, dann wird sich der Aufwand für uns für so ein Tool nicht so recht lohnen. Dann sag ich den Mitgliedern, dass sie eine Nachtrag im normalen Bootshaus-efa machen sollen.

Aber war mal spannend in die Datenstruktur einzusteigen.

Achim

Re: direkte Manipulation der internen Daten durch XML-Zugrif

Verfasst: Mo 5. Okt 2015, 16:51
von iww-martin
Hallo Achim,

wer woanders startet und zum Bootshaus zurück kommt, kann seine Tour direkt im Vereinsfahrtenbuch im Bootshaus nachtragen.
In den weit überwiegenden Fällen wurde zuvor das Boot am Bootshaus verladen und die Tour im Fahrtenbuch begonnen. Nach der Rückkehr wird sie beendet.

Wer wonaders startet und nicht zum Bootshaus zurück kommt, kann bei uns seinen Nachtrag über "efa mobil" eintragen.

Für mehrtägige Gruppenfahrten (mehrere Boote und PaddlereInnen, gleiche Tagesetappen) beginnen die TeilnehmerInnen ihre Fahrten im Vereinsfahrtenbuch. Nach der Rückkehr, wenn die Boote zurück im Bootslager sind, werden die Fahrten abgebrochen. Die Tagesetappen für alle TeilnehmerInnen erfassen wir in einer Excel-Tabelle. Man erfasst dabei die Touren für ein Boot und kopiert dann die Strecken und Kilometerangaben für alle anderen Gruppenmitglieder.
Aus der Excel-Tabelle exportieren wir die Daten in eine xml-Datei, die dann in das Vereinsfahrtenbuch hochgeladen wird.
Beispiel: Auf unserer Sommerfahrt auf der Donau kommen für 17 PaddlerInnen an 14 Tagen 238 Einträge zusammen, die sich so erheblich einfacher erfassen lassen...

Eine Notwendigkeit, eine Tour in einem System zu beginnen und im anderern System zu beenden, verbunden mit der dazu notwenigen Datensynchronisation, haben wir bisher nicht vermisst.

Es wäre aber schön, wenn die extern erfassten Fahrtennachträge mit efaCLI atomatisch geladen werden könnten...

Viele Grüße
Martin

Itzehoer Wasser-Wanderer e.V.