FIleMaker Magazin - MonkeyBread Software

Transcription

FIleMaker Magazin - MonkeyBread Software
Weblink
MBS Plugin
© 1994 – 2013 K&K Verlag GmbH, Hamburg
Plugins
Christian Schmitz
(Jg. 1981) entwickelt seit 11 Jahren Software
und seit 2006 auch FileMaker Plugins. Außerdem Plugins für Real Studio und allerlei Software für Mac OS X, Windows, Linux und iOS.
Webshop
support@monkeybreadsoftware.de
Nachdruck aus dem
FileMaker Magazin
siehe auch: www.filemaker-magazin.de
Zip-Archive auslesen
Bilder aus OpenOffice-Dokumenten extrahieren
Wer schon einmal mit einer Mediendatenbank gearbeitet hat, weiß, wie schwer es sein kann, einzelne Dateien
zu verarbeiten, um enthaltene Bilder oder Metadaten
zu ermitteln. Grundlage für den vorliegenden Artikel ist
eine konkrete Anwendung aus genau diesem Bereich. Microsoft Word (.docx-Format) und OpenOffice legen ihre
Texte in Dateien ab, die eigentlich Zip-Archive sind. Dort
befinden sich das Vorschaubild, eingebettete Bilder und
der Text als XML. Die eingebetteten Bilder wollen wir nun
in eine FileMaker Datenbank extrahieren.
Sesam, öffne dich
Mit dem MBS-Plugin kann man seit Version 3.4 Zip-Archive
lesen und schreiben. Zum Öffnen kann man zwischen zwei
Funktionen wählen: „UnZipFile.OpenContainer“ erwartet
ein Containerfeld als Parameter, „UnZipFile.OpenFile“ einen Dateipfad. Der Dateityp bleibt dabei unberücksichtigt,
sodass wir problemlos ein Dokument von OpenOffice öffnen
können.
Im Script sieht das so aus:
◆◆Variable Setzen
Name: $r
Wert: MBS ("UnZipFile.OpenContainer"; Unzip::DocFile)
Zahl zurückgibt – ist das Ergebnis ≤ 0, handelt es sich entweder um ein leeres Archiv oder um eine Fehlermeldung. In
beiden Fällen wird das Script abgebrochen.
Schleife
Zunächst setzen wir die Variable $index mit dem Wert 0. Anschließend starten wir die Schleife, innerhalb derer wir den
Index für die aktuelle Datei um 1 erhöhen. Verlassen wird die
Schleife, wenn $index >= $count ist. Im letzten Schritt wird
das Archiv mit der Funktion „UnZipFile.Close“ geschlossen.
Innerhalb der Schleife betrachten wir die Dateien genauer.
Das Plugin bietet diesbezüglich ein Dutzend verschiedener
Abfragen, aber uns interessant zunächst nur der Dateiname,
der mithilfe der Funktion „UnZipFile.ItemName“ zurückgegeben wird. Bei einem Zip-Archiv kann der Dateiname auch
Pfadangaben enthalten. Die Ordnernamen sind dabei durch
einen Schrägstrich voneinander getrennt – der eigentliche
Dateiname steht hinter dem letzten Schrägstrich: Pictures/
test.png.
Den Dateinamen kopieren wir in eine lokale Variable und
holen uns anschließend die Dateierweiterung. Da uns nur die
JPEG- und PNG-Dateien interessieren, genügt es, die ersten
vier Buchstaben von rechts abzufragen. Wenn es sich bei der
Erweiterung um .jpg oder .png handelt, geht es weiter.
Im Script sieht das folgendermaßen aus:
Anschließend überprüfen wir, wie viele Dateien sich in dem
Archiv befinden. Zu diesem Zweck stellt das MBS-Plugin
die Funktion „UnZipFile.ItemCount“ zur Verfügung. Kennt
man die Anzahl der Dateien, kann man in einer Schleife von
„0“ bis „Anzahl -1“ hochzählen und Informationen zu den jeweiligen Dateien abfragen.
Man beachte bitte, dass die beiden Funktionen durchaus einen Fehler zurück geben können. Mit der Formel „LiesAlsZahl“ können wir prüfen, ob „UnZipFile.ItemCount“ eine
FMM_201306 ◆◆Variable Setzen
Name: $name
Wert: MBS ("UnZipFile.ItemName"; $index)
◆◆Variable Setzen
Name: $extension
Wert: ZeichenRechts ($name; 4)
◆◆Wenn
Formel: $extension = ".jpg"
▼
Die Bildtypen verarbeiten wir einzeln. Bei einer PNG-Datei
erstellen wir zunächst einen neuen Datensatz. Danach werden
31
Nachdruck aus dem
FileMaker Magazin
Plugins
siehe auch: www.filemaker-magazin.de
die PNG-Daten mithilfe der Funktion „UnZipFile.ReadAsPNGContainer“ gelesen und als Containerwert verpackt. Damit FileMaker die Datei anzeigen kann, benötigen wir noch
ein Vorschaubild im JPEG-Format und Angaben über die
Größe des Bildes. Auch darum kümmert sich die Funktion
„UnZipFile.ReadAsPNGContainer“. Anschließend wird der
Containerwert einem Medienfeld in der Datenbank zugewiesen.
Zusätzlich speichern wir den Dateinamen (inkl. Pfadangabe)
in ein Textfeld. Außerdem erhalten wir über die Funktion
„UnZipFile.ItemUncompressedSize“ die Größe des PNG-Bildes in Bytes, die wir uns auch notieren. Zum Schluss speichern
wir den neuen Datensatz:
◆◆Neuer Datensatz/Abfrage
Import
◆◆Alle Datensätze löschen
Option: Ohne Dialog feld
◆◆Kommentar
Text: Zip-Archiv öffnen aus Containerfeld
◆◆Variable setzen
Name: $r
Wert: MBS ("UnZipFile.OpenContainer"; Unzip::DocFile)
◆◆Kommentar
Text: Anzahl Elemente abfragen
◆◆Variable setzen
Name: $count
Wert: MBS ("UnZipFile.ItemCount")
◆◆Kommentar
Text: Schleife für alle Dateien im Archiv
◆◆Wenn
Formel: LiesAlsZahl ($count) <= 0
▼
◆◆Variable setzen
Name: $img
Formel: MBS ("UnZipFile.ReadAsPNGContainer"; $index)
◆◆Kommentar
Text: Da ist was schief gegangen
◆◆Aktuelles Script verlassen
u
◆◆Feldwert setzen
Feld: Unzip::ImageFile
Formel:$img
◆◆Ende (wenn)
▲
◆◆Feldwert setzen
Feld: Unzip::ImageName
Formel:$name
◆◆Feldwert setzen
Feld: Unzip::FileSize
Formel: MBS ("UnZipFile.ItemUncompressedSize"; $Index)
◆◆Schreibe Änderungen Datens./Abfrage
Option: Dateneingabeüberprüfung unterdrücken
Option: Ohne Dialog feld
Mit ähnlichen Funktionen können Sie Dateien natürlich
auch anders verarbeiten. „UnZipFile.ReadAsFileContainer“
ermöglicht zum Beispiel das Speichern einer allgemeinen Datei aus dem Archiv in einen Container. Für Bilddateien empfiehlt es sich aber, die spezifischen Funktionen zu verwenden.
Enthält die Datei einen Text, kann man sich diesen mit der
Funktion „UnZipFile.ReadAsText“ auch direkt holen.
◆◆Variable setzen
Name: $index
Wert: 0
◆◆Schleife (Anfang)
▼
◆◆Kommentar
Text: Eine Datei mal genauer anschauen
◆◆Variable setzen
Name: $name
Wert: MBS ("UnZipFile.ItemName"; $index)
◆◆Variable setzen
Name: $extension
Wert: ZeichenRechts ( $name ; 4)
◆◆Wenn
Formel: $extension = ".jpg"
▼
◆◆Kommentar
Text: JPEG Bild übernehmen
◆◆Neuer Datensatz/Abfrage
◆◆Variable setzen
Name: $img
Wert: MBS ("UnZipFile.ReadAsJPEGContainer"; $index)
◆◆Feldwert setzen
Feld: Unzip::ImageFile
Formel:$img
◆◆Feldwert setzen
Feld: Unzip::ImageName
Formel:$name
◆◆Schreibe Änderung Datens./Abfrage
Option: Dateneingabeüberprüfung unterdrücken
Option: Ohne Dialog feld
◆◆Ende (wenn)
s
◆◆Wenn
Formel: $extension = ".png"
▼
◆◆Kommentar
Text: PNG Bild übernehmen
◆◆Neuer Datensatz/Abfrage
◆◆Variable setzen
Name: $img
Wert: MBS ("UnZipFile.ReadAsPNGContainer"; $index)
◆◆Feldwert setzen
Feld: Unzip::ImageFile
Formel:$img
◆◆Feldwert setzen
Feld: Unzip::ImageName
Formel:$name
Die Beispieldatenbank zeigt die Eingabedatei test.odt in einem Containerfeld und
die Datensätze mit den Bildern in den Containern darunter.
32
◆◆Feldwert setzen
Feld: Unzip::FileSize
FMM_201306
Nachdruck aus dem
FileMaker Magazin
Plugins
siehe auch: www.filemaker-magazin.de
Formel: MBS ("UnZipFile.ItemUncompressedSize"; $Index)
◆◆Schreibe Änderung Datens./Abfrage
Option: Dateneingabeüberprüfung unterdrücken
Option: Ohne Dialog feld
◆◆Ende (wenn)
s
◆◆Kommentar
Text: Nächste Datei
◆◆Variable setzen
Name: $index
Wert: $index + 1
◆◆Verlasse Schleife wenn
Formel: $index >= $count
u
◆◆Schleife (Ende)
s
◆◆Kommentar
Text: Aufräumen
◆◆Variable setzen
Name: $r
Wert: MBS ("UnZipFile.Close")
FMM_201306 33
2008 01
Deutschland e 9,50 | www.filemaker-magazin.de
Das unabhängige Magazin für FileMaker
Anwender und Entwickler
FMM_200801
Geschüttelt, nicht gerührt …
Das FileMaker Magazin
● Einzige, deutschsprachige Fachzeitschrift zu FileMaker
● Wissen aus erster Hand von anerkannten FileMaker Fachautoren
● Große Themenvielfalt für Anwender, Entwickler und
Fortgeschrittene
Gut zu wissen
Ist Maintenance
eigentlich ansteckend?
FileMaker für Einsteiger
Wie Sie in FileMaker Ihre
ersten „Felder bestellen“
Buchbesprechungen
© 1994 - 2008 K&K Verlag GmbH, Hamburg
Neue Fachbücher
zu FileMaker 9
FMM_2008_01.Titel.indd 1
Exklusiv für Premium-Abonnenten
29.04.2008 10:09:42 Uhr
● Sechs FMM Ausgaben pro Jahr
● Kostenlose Nutzung des Abonnentenbereichs auf
www.filemaker-magazin.de
● PDF-Online-Archiv mit allen bisher erschienenen Ausgaben
● Jede Ausgabe mit kostenlosen Beispieldateien und Zusatzinfos
zum Download
Unser Service
● Aktuelle Neuheiten, Tipps und Infos, Kleinanzeigen und
vieles mehr jederzeit online auf unseren Webseiten
● Hilfe bei allen Fragen zu FileMaker im FMM Forum
● Kompetente Beratung zum Kauf von FileMaker Lizenzen:
Einfach anrufen +49 (0)40 589 65 79 70.
Hier finden Sie Aktuelles zu FileMaker
Produkten, egal ob Sie kaufen, mieten
oder sich einfach informieren möchten.
Eine kostenlose Leseprobe des
FileMaker Magazins erhalten Sie,
wenn Sie hier klicken.
Wenn Sie sich für ein
FileMaker Magazin Abo
interessieren, klicken Sie
bitte hier!
K&K Verlag GmbH · www.filemaker-magazin.de · Telefon +49 40 589657970