Die Erste Normalform (1NF)

Die Erste Normalform (1NF) ist dann gegeben, wenn alle Informationen in einer Tabelle atomar vorliegen.

So die Definition aus entsprechender Fachliteratur.
Aber was bedeutet es ?
Es bedeutet, wir müssen alle Informationen in jeweil eine Tabellenspalte bringen.

z.B. Adressdaten ohne Normalisierung.

Name Straße Ort
Ronny Schrader Summterstr. 43 16547 Birkenwerder

Nun die gleichen Daten in erster Normalform.

Vorname Nachname Straße Nr. PLZ Ort
Ronny Schrader Summterstr. 43 16547 Birkenwerder

Schon haben wir die erste Normalform erstellt.


Die Nullte Normalform

Normalisierung bezeichnet den Vorgang der Strukturierung und Umorganisation eines relationalen Datenbankschemas. Daten werden in verschiedene Tabellen aufgeteilt und mittels Beziehungen miteinander verknüpft, um Redundanzen, Inkonsistenzen und Anomalien zu vermeiden und zu beseitigen.

Die Nullte Normalform ist eine der Normalformen in der Datenbankentwicklung. Die Normalformen sind ein Regelsystem, welches die Bauart von Tabellen in relationalen Datenbanken festlegt. Die Nullte Normalform ist die erste Normalform und wird auch als Grundnormalform bezeichnet. In diesem Blogpost wollen wir uns die Nullte Normalform genauer anschauen und erklären, wie sie in der Datenbankentwicklung angewendet wird.

In der Nullten Normalform werden alle Elemente der Datensammlung in einer Tabelle gespeichert.
Ein häufiges Beispiel ist die Erfassung von Adressdaten in Excel. Ob Straße, Stadt oder Postleitzahl, alle Daten befinden sich in einem Datensatz.

Was bedeutet das für die Datenhaltung? Immer wieder werden schon vorhandene Informationen erfasst. Postleitzahlen, Stadt oder auch Vornamen.
Oder was passiert, wenn in den Adressdaten nur ein oder zwei mögliche Telefonnummern erfasst werden können?

Nun habe ich schon den ersten Ansatz für eine regelkonforme Normalisierung. Telefondaten, Mailadressen, kurz alle Kommunikationswege müssen in eine weitere Tabelle ausgegliedert werden.
PLZ und auch die Stadt kann problemlos ausgegliedert werden. Wobei wir bei PLZ und Stadt den Sonderfall haben, PLZ als eindeutigen Schlüssel verwenden zu können.
Über die PLZ kann die Stadt eindeutig identifiziert werden. So hängt an der 16547, die Kleinstadt Birkenwerder. Also werde ich nur noch einmal die Kleinstadt Birkenwerder erfassen. Über den eindeutigen Schlüssel 16547, wird bei jeder Adresse automatisch Birkenwerder referenziert.

Zusammenfassend können wir sagen, die Nullte Normalform darf in der Praxis keine Anwendung finden. Sie darf lediglich bei der Anforderungsanalyse für eine Datenbankentwicklung genutzt werden.


Normalisierung von Datenbanken

Datenbanken sind ein wesentlicher Bestandteil unseres Alltags, sei es beim Einkaufen, beim Surfen im Internet oder bei der Suche nach einem neuen Job. Oft werden sie aber auch als komplex und schwer verständlich abgestempelt. Dabei ist es gar nicht so schwer, eine eigene Datenbank zu erstellen und zu verwalten. In diesem Blogpost werden wir uns daher einige verschiedene Methoden der Datenbankmodellierung in Filemaker ansehen.

Struktur ist ein wichtiges Konzept in der Filemaker-Datenbankentwicklung. Die richtige Struktur kann Ihre Datenbanken effizienter und einfacher zu verwalten machen. Wenn Sie eine neue Datenbank erstellen, sollten Sie sich Zeit nehmen, um die Struktur sorgfältig zu planen. Dies wird Ihnen helfen, Zeit und Mühe zu sparen, wenn Sie Ihre Datenbanken später verwalten oder ändern müssen.

Deshalb ist bei der Entwicklung die Struktur zu normalisieren.
Normalisieren eines relationalen Datenbankmodells beschreibt die Trennung von Attributen in zusätzliche Relationen (Tabellen) unter Beachtung von Normalisierungsregeln und Normalformen, sodass eine Form entsteht, die keine unnötigen Redundanzen mehr beinhaltet.

In der Regel ist die Dritte Normalform ausreichend, um die perfekte Balance zwischen Redundanz, Performance und Flexibilität für eine Datenbank zu erzielen. Selbstverständlich gibt es auch Sonderfälle, wie zum Beispiel im wissenschaftlichen Bereich, wo eine Datenbank bis zur 5. Normalform normalisiert werden muss.

Im nächsten Blog werde ich auf die verschiedenen Normalformen eingehen.


So kreierst du einfach und schnell UI Mockups mit Filemaker

So kreierst du einfach und schnell UI Mockups mit Filemaker

Mockups sind ein wichtiges Werkzeug für die UI-Design-Branche. Sie helfen uns, unsere Ideen zu visualisieren und zu präsentieren, bevor wir sie in Code umwandeln. In den letzten Jahren haben sich viele verschiedene Mockup-Tools etabliert, um den Designern die Arbeit zu erleichtern. Wir können dafür auch Filemaker nutzen.
Der Vorteil liegt auf der Hand. Kleine Funktionalitäten lassen sich sogar schon in Filemaker einbauen und eine Präsentation der UI mit integrierter Funktion ist anschaulicher wie die Vorstellung der Nutzeroberfläche in Papierform. Hinzu kommt das es in Filemaker verschiedene Themen gibt. Diese lassen sich erweitern, neu erstellen und bei einer Präsentation auch nacheinander anwenden.
Somit ist es möglich viele verschiedene Oberflächen-Designs über die eigentliche Arbeitsoberfläche nachzubilden.

Fazit:

Filemaker ist ein Tool, das sehr gut für die Erstellung von Benutzeroberflächen und Prototypen geeignet ist. Es bietet eine Vielzahl von Vorlagen und Werkzeugen, mit denen Sie Ihre Ideen schnell und einfach umsetzen können.


Relationale Datenbanken und was hat Filemaker damit zu tun?

Relationale Datenbanken sind ein wichtiger Bestandteil der IT-Infrastruktur in vielen Unternehmen. Sie können sehr komplex sein und eine Menge an wertvollen Informationen enthalten. Filemaker ist eine relationale Datenbank-Software, die viele der gleichen Funktionen und Vorteile bietet. In diesem Blogpost werden wir uns einige der Gemeinsamkeiten von Filemaker und relationalen Datenbanken anschauen

Einführung in relationale Datenbanken

Was ist eine relationale Datenbank? Eine relationale Datenbank ist eine Art von Datenbank, die Tabellen von Daten verwendet, um Inhalte zu speichern. Die zentralen Konzepte einer relationalen Datenbank sind Tabellen, Spalten und Zeilen. Tabellen sind die Hauptstruktur der Datenbank, in denen die Daten gespeichert werden. Spalten sind die Felder in den Tabellen, in denen bestimmte Informationen gespeichert werden. Zeilen sind die Einträge in den Tabellen, in denen die Daten gespeichert werden. Die Anwendungsbereiche einer relationalen Datenbank sind unter anderem Unternehmensanwendungen, Finanzdaten, Kundendaten, Lieferantendaten, Vertriebsdaten, Marketingdaten und so weiter.

Die Vorteile einer relationalen Datenbank

Die Struktur kann normalisiert werden. Das heißt, wir vermeiden doppelte Anlage von Daten. Bei Adressen gibt es doch keinen Grund, 20000 mal Berlin als Wohnort zu hinterlegen. Also wird der Wohnort in eine externe Tabelle gelegt. Berlin existiert genau 1 mal. Aber bei allen erfassten Datensätzen wo der Wohnort Berlin hinterlegt wurde, taucht auch Berlin auf.

Es gibt einige Dinge, die man beachten sollte, wenn man Filemaker als relationale Datenbank einsetzen möchte. Zuerst einmal ist es wichtig zu verstehen, was eine relationale Datenbank ist. Jede Tabelle hat ein Primärschlüssel, der eindeutig ist. Dieser Primärschlüssel kann in anderen Tabellen als Fremdschlüssel verwendet werden, um die Beziehungen zwischen den Tabellen herzustellen.

Es ist in Filemaker möglich Datensätze per SQL Befehl aufzurufen. Schreiben per SQL-Befehl ist derzeit nur unter Nutzung von Plugins möglich.

Deshalb ist es unabdingbar, jede Tabelle, in die ich Daten schreiben will, per Schlüssel mit einander zu verbinden.


Filemaker – die perfekte Datenbank-Software für Unternehmen

Filemaker ist ein Softwareprogramm, das zur Erstellung von Datenbanken genutzt wird. Die Vor- und Nachteile von Filemaker sind, dass es eine einfach zu bedienende Oberfläche hat und dass es eine Vielzahl von Funktionen bietet, die für die Erstellung einer Datenbank erforderlich sind. Die Nachteile von Filemaker sind, dass es einige Zeit in Anspruch nimmt, um sich mit dem Programm vertraut zu machen und dass es einige Funktionen bietet, die für die Erstellung einer Datenbank nicht erforderlich sind.,

Sie fragen sich vielleicht, warum wir Filemaker für unsere Kunden nutzen. Die Antwort ist einfach: Filemaker funktioniert auch im Internet mit PHP. Dies bedeutet, dass unsere Kunden ihre Datenbanken überall und jederzeit verwenden können. Natürlich gibt es auch einige Nachteile, aber wir denken, dass die Vorteile überwiegen. Zum Beispiel ist Filemaker sehr einfach zu bedienen und hat eine sehr intuitiv gestaltete Oberfläche. Außerdem ist es sehr flexibel und kann an die Bedürfnisse unserer Kunden angepasst werden. Fazit: Wir glauben, dass Filemaker eine großartige Lösung für unsere Kunden ist und wir sind begeistert von den Möglichkeiten, die es bietet.,

Vor allem für kleine und mittelständische Unternehmen ist Filemaker ideal.


Aus Rodro-Programmierung wird MaRo-Programmierung

Nachdem ich viele Jahre unter dem Label “Rodro-Programmierung” Datenbanken entwickelt habe, eine Auszeit im Bereich Entwicklung genommen habe, nun eine Namensänderung.
Als Geschäftsführer und Inhaber der MaRo-Pflegedienste stand nun fest, dass auch der Bereich der Datenbankentwicklung unter dem Label “MaRo” stehen soll.


FileMaker und PHP (Teil 1 Server Einrichtung)

FileMaker kann seine Daten problemlos auf verschiedenen Clients auf Mac OS, Windows, iOS oder gar Android darstellen. Was passiert aber wenn dem Nutzer dem ich die Daten zur Verfügung stellen möchte keinen FileMaker-Client besitzt oder installieren möchte bzw. darf. Was ist wenn unzählige Nutzer sich nur kurzzeitig auf einem FileMaker System einlochen um Daten zu erfassen oder zu administrieren? Dann benötigen wir eine Lösung im Web-Browser. Na das ist ja mit FileMaker eigentlich kein Problem. Es braucht ja nichts mal einen Server. Die entsprechende Datei einfach über einen Client oder über einen FileMaker Server per IWP zur Verfügung stellen. Das geht extrem schnell, die zu sehenden Webseiten werden einfach innerhalb von FileMaker editiert. Aber diese Lösung stellt einen vor verschieden Probleme.

z.B.

-keine Passwortsterne

-kein Return um die Webseite zu aktualisieren

-läuft nicht innerhalb eines Frames

-Button des Browsers für VOR und ZURÜCK können bei Benutzung

dazu führen das Benutzer im falschen Datensatz landen.

-Nur eine Einstiegs-Seite für die Datenbank

Diese Liste kann noch um einige Punkte erweitert werden, aber sind das die Punkte für die sich keine wirkliche Ersatzlösung findet. Also dann nutzen wir halt einfach FileMaker in Kombination mit PHP. Da ich persönlich immer auf einem Remote-Server (FileMaker 11 oder 12 Adv. auf auf Windows Shared Hyper-V VM) entwickle habe ich die endsprechenden Vorraussetzungen schon geschaffen um PHP mit FileMaker zu kombinieren.

Die Einrichtung des FileMaker Servers ist eigentlich über die Einsatzplanung und den Wizzard des FileMaker Servers leicht zu bewerkstelligen und soll nicht Thema der kleinen Einführung sein.

36900-2013-05-26-10-49.jpg

Wichtig ist das nach der Einrichtung des Servers die entsprechenden PHP Eigenschaften als OK gekennzeichnet sind. Die Entscheidung ob man den vorhandenen IIS oder einen Apache Server nutzt bleibt einem überlassen. Ich persönlich nutze den schon vorhandenen IIS.

Um später schnellen Zugriff auf den Ordner der die PHP Dateien enthält zu haben sollte man sich einen FTP Zugang einrichten. Ich nutze dafür FileZilla. Damit umgehe ich die ganze relativ komplexe Einrichtung des FTP Zuganges über den IIS-Manager.

30a6530e5960373db60938d29c193265-2013-05-26-10-49.gif

Einfach den Server installieren, danach einen User einrichten und diesem ein Verzeichnis zuordnen und zum Home Verzeichnis erklären.

Als Home Verzeichnis dient dabei der Ordner in den wir unsere PHP Dateien legen werden. Standard ist beim IIS das Verzeichnis C:inetpubwwwroot…. und den Ordner wwwroot legen wir dann einfach einen Projektordner mit der Bezeichnung unserer Wahl.

Nun sind wir soweit das wir unsere Werkzeuge für die PHP Bearbeitung und auch den FileMaker Client für die Nutzung mit dem Server vorbereiten. Als erstes benötigen wir natürlich eine Datei die wir über den FileMaker Server zur Verfügung stellen können. Wichtig ist dabei das wir dieser Datei die Berechtigung für den Zugriff über PHP zuweisen. Dies geschieht über Ablage/Verwalten/Sicherheit/Konten/Berechtigung bearbeiten. Dabei benötigt z.B. der User „WEB“ den Zugriff über Acres via PHP Web Publishing (fmphp).

prep_db02-2013-05-26-10-49.jpg

Anschliessend schiebe ich die Datei entweder per FTP oder einfach über den RDP Client über mein Remote-Zugriff auf den Server. Dort einfach über die FileMaker-Server Konsole zur Verfügung stellen.

Ich persönlich nutze für die Bearbeitung der PHP Dateien eine IDE mit der Bezeichnung PHPStorm. Diese besitzt den Vorteil eines integrierten FTP-Clients. Somit kann ich jede Änderung einer Datei Offline durchführen und sofort per Upload in meinen Projektordner laden. In einem extern geöffneten Browser habe ich dann immer die Möglichkeit sofort den Erfolg oder Misserfolg meiner Arbeit zu begutachten.

Voraussetzung?

Erstellen Sie erstmal ein neues Projekt innerhalb der IDE, legen einen Offline Projektordner fest. Anschliessend können Sie unter Toll/Deployment/Configuration einen FTP Zugang anlegen. Wichtig ist nachdem dieser Zugang funktioniert unter Mappings die Ofline Dateien und die Online Dateien zusammenzuführen. Dabei legen Sie den Local Path und Web Path fest.

z.B.

Local Path: /Users/ronny/Documents/PHP-Developer/PHPStorm/TNM/FileTNM2

Web Path: /FileTNM2/FileTNM2

Deployment Pat: FileTNM2

Nun steht dem automatischen Upload der Dateien nichts mehr im Weg.

Was benötigen wir sonst noch? Die FileMaker API s oder Klassen. Diese befinden sich auf dem Server im Ordner C:Program FilesFileMakerFileMaker ServerWeb Publishingpublishing-enginephp. Von dort kopieren wir uns den Ordner FileMaker und die Datei FileMaker.php in unseren Projektordner.


FileMaker Synchronisation...

Ab 7 Januar stellen wir eine neue Synchronisations-Lösung für FileMaker vor. Ob Server - Client oder FileMaker Go - Server und umgekehrt. Diese Lösung funktioniert ohne Plugin.

SyncFMgo-2012-12-30-11-17.jpg SyncClient-2012-12-30-11-17.jpg

Kreditkartenabrechnung mit FileMaker Teil 2

Nachdem wir im ersten Teil die Grundvoraussetzungen erarbeitet haben gehen wir nun zum eigentlichen Teil innerhalb von FileMaker über.
Für die Anzeige der Daten vom Zahlungs-Dienstleister nutzen wir ein kleines Feld vom Typ WebViewer. Die URL des WebViewers ergibt sich aus dem Pfad zum PHP-Script auf dem Webserver und unseren Parametern die wir aus FileMaker auslesen:
URL.Parameter= “http://www……………………com/Semicon2012/request.php”
&
“?"&“LastName=” & KONTAKT.T_Last_Name & “&” &“Price="&Preis_Heidel_Uebertragung&"&” & “Street=” & KONTAKT.T_Adress & “&” & “Zip=” & KONTAKT.Z_ZIP & “&” & “Stadt=” & KONTAKT.T_City & “&” & “Land=” & KONTAKT.T_Country & “&” & “Mail=” & KONTAKT.T_EMail & “&” & “Buchung=” & INVOICE.BUCHUNG.Nr_1_2 & “&” & “FirstName=” & KONTAKT.T_First_Name&"&” & “Code=” & KONTAKT.SICHERHEIT.CODE
Als Webadresse vergeben wir das Feld URL.Parameter
Kreditkarte2-2012-12-9-07-20.jpg
Rufen wir nun das Layout auf und der WebViewer wird aktiv erscheint die Eingabemaske vom Zahlungs-Dienstleister incl. der eingegeben Parameter wie Zahlungsbetrag, Adresse und anderer Werte.
Kreditkarte1-2012-12-9-07-20.jpg
Nun gibt der Kreditkarteninhaber nur noch seine Kartennummer ein und die Verifikation Number. Nach dem Klick auf Pay Now wird vom Zahlungs-Dienstleister die Zahlung verarbeitet. Im Anschluss wird das PHP-Script “www……………………com/Semicon2012/response.php” aufgerufen.
Das Script ruft je nach Wunsch eine URL auf die dann wieder in unserem WebViewer angezeigt wird.
<?php
//this page is called after the customer finishes
//payment with the Web Payment Frontend.
//It must be hosted YOUR system and accessible
//to the outside world.
//It always must respond with a URL that defines
//which page the WPF should redirect to.
//this new page also MUST be hosted on your system
//AND it musst be accessible so that the WPF can
//redirect the users browser to it.
// PROCESSING.RESULT gets PROCESSING_RESULT when posting back (URL encoding)
$returnvalue=$_POST[‘PROCESSING_RESULT’];
if ($returnvalue)
{
if (strstr($returnvalue,“ACK”))
{
print “Location: http://www…………………………com/Semicon2012/success.html”;
       
}
else
{
print “http://www……………………………com/Semicon2012/error.html”;
}
}
?>
Wird als Wert ACK vom Zahlungs-Dienstleister an das Script zurückgegeben wird die URL für die erfolge Transaktion aufgerufen. ACK ist immer der Wert für erfolgte Transaktionen.
Kreditkarte3-2012-12-9-07-20.jpg
Nun da wir wissen welcher Wert im WebViewer auftaucht, müssen wir diesen nur noch überprüfen.
Über GetLayoutObjectAttribute(“Webviewer” ; “Source”) können wir den Inhalt des WebViewers abfragen. Vergleichen wir diesen ausgelesenen Inhalt z.B. mit der Funktion Exakt (InhaltWebViewer; Vergleichsfeld) können wir bestimmen ob eine Transaktion erfolgt ist oder nicht.
Mit dieser Methode kann man Kreditkartenlösungen ohne Plugin realisieren.


Kreditkartenabrechnung mit FileMaker

Mit FileMaker eine Kreditkartenabrechnung zu starten ist auf den ersten Blick nicht trivial. Für eines meiner letzten Projekte musste ich aber eine Schnittstelle zu einem Anbieter implementieren. Nun gibt es eine Hand voll Plugin-Anbieter die sich dem Thema angenommen haben. Leider arbeiten diese Plugin,s meist nur mit einem speziellem Zahlungsanbieter. Der von mir benötigte war natürlich nicht dabei. 

Wichtig ist in diesem Zusammenhang zu wissen das es mir gar nicht erlaubt ist Daten wie Kreditkarten-Nummer in FileMaker vorzuhalten, zu verarbeiten und dann wie von mir im ersten Ansatz angedacht per XML-Transaktion zu übertragen. Der Zahlungs-Dienstleister akzeptiert nur Daten die auch in seinem Front-End auftauchen. Also blieb mir nur noch PHP für die Transaktionen. 

Also war wieder Handarbeit angesagt. Im ersten Schritt habe ich mir vom Zahlungs-Dienstleister an die 20 PDF Dokumente geladen um anschliessend erstmal frustriert in den Feierabend zu gehen. Nichts aber auch rein gar nichts habe ich verstanden. Aber halt, da gab es das Stichwort PHP.

Nun jetzt hatte ich endlich einen Ansatz, den WebViewer von FileMaker.

 

Was benötigen wir:

  1. Webserbver ISS oder Apache
  2. Zahlungs-Dienstleister wie z.B. Heidelpay
  3. FileMaker Datenbank
  4. Zeit…

 

Zum testen benötigen wir nur eine einfache FileMaker Datenbank, die Felder enthält für Namen, Vornamen, Straße usw. 

Hinzu kommen genau zwei PHP-Scripte. Ein request.php und ein response.php und nicht so wichtig eine CSS. Diese hält Informationen über das Äussere des HeidelPay Front-End bereit.

Dabei gilt dem request.php unser besonderes Augenmerk. 

Die Request-Datei:

<?php

//URL fuer Testsystem

$url = "[heidelpay.hpcgw.net/sgw/gtw](https://heidelpay.hpcgw.net/sgw/gtw)";

$parameters['SECURITY.SENDER'] = "…………………………………………………..";

$parameters['USER.LOGIN'] = "……………………………………...";

$parameters['USER.PWD'] = "…………………..";

// Channel fÔøΩr CC, OT Sofort, DC, DD, PayPal

$parameters['TRANSACTION.CHANNEL'] = "………………………...…………….";

////////////////////////////////////

$parameters['ACCOUNT.HOLDER'] = $_GET['LastName'];

$parameters['ACCOUNT.NUMBER'] = "";

//$parameters['ACCOUNT.BRAND'] = "PAYPAL";

$parameters['ACCOUNT.BRAND'] = "";

$parameters['ACCOUNT.EXPIRY_MONTH'] = "";

$parameters['ACCOUNT.EXPIRY_YEAR'] = "";

$parameters['ACCOUNT.VERIFICATION'] = "";

//Payment Code -- Auswahl Bezahlmethode und Typ

//$parameters['PAYMENT.CODE'] = "DD.RG";

//$parameters['PAYMENT.CODE'] = "CC.RG";

$parameters['PAYMENT.CODE'] = "CC.DB";

//$parameters['PAYMENT.CODE'] = "OT.PA";

//$parameters['PAYMENT.CODE'] = "VA.DB";

$parameters['PRESENTATION.CURRENCY'] = "EUR";

//Response URL angeben

$parameters['FRONTEND.RESPONSE_URL'] = "[www...](http://www...)………………...com/Semicon2012/response.php";

//CSS- und/oder Jscript-Datei angeben

$parameters['FRONTEND.CSS_PATH'] = "[....](https://....)…………………....de/style/onlycarddetails.css";

$parameters['PRESENTATION.AMOUNT'] = $_GET['Price'];

$parameters['IDENTIFICATION.TRANSACTIONID'] = $_GET['Buchung'];

$parameters['PRESENTATION.USAGE'] = 'SEMICON 2012 Transaktion '.date("d.m.Y");

//$parameters['FRONTEND.MODE'] = "DEFAULT";

$parameters['FRONTEND.MODE'] = "WPF_LIGHT";

// Modus auswÔøΩhlen

$parameters['TRANSACTION.MODE'] = "LIVE";

//$parameters['TRANSACTION.MODE'] = "INTEGRATOR_TEST";

//$parameters['TRANSACTION.MODE'] = "CONNECTOR_TEST";

$parameters['FRONTEND.ENABLED'] = "true";

$parameters['FRONTEND.POPUP'] = "false";

$parameters['FRONTEND.SHOP_NAME'] = 'SEMICON 2012';

$parameters['FRONTEND.REDIRECT_TIME'] = "0";

$parameters['FRONTEND.LANGUAGE_SELECTOR'] = "false";

$parameters['FRONTEND.LANGUAGE'] ="en";

$parameters['REQUEST.VERSION'] = "1.0";

/*

$parameters['NAME.GIVEN'] = "";

$parameters['NAME.FAMILY'] = "";

*/

$parameters['NAME.GIVEN'] = $_GET['FirstName'];

$parameters['NAME.FAMILY'] = $_GET['LastName'];

$parameters['ADDRESS.STREET'] = $_GET['Street'];

$parameters['ADDRESS.ZIP'] = $_GET['Zip'];

$parameters['ADDRESS.CITY'] = $_GET['Stadt'];

$parameters['ADDRESS.COUNTRY'] = $_GET['Land'];

$parameters['ADDRESS.STATE'] = "";

$parameters['CONTACT.EMAIL'] = $_GET['Mail'];

$parameters['CRITERION.CODE']= $_GET['Code'];

//building the postparameter string to send into the WPF

$result = '';

foreach ($parameters AS $key => $value)

$result .= strtoupper($key).'='.urlencode($value).'&';

$strPOST = stripslashes($result);

//echo $strPOST;

//open the request url for the Web Payment Frontend

$cpt = curl_init();

curl_setopt($cpt, CURLOPT_URL, $url);

curl_setopt($cpt, CURLOPT_SSL_VERIFYHOST, 2);

curl_setopt($cpt, CURLOPT_USERAGENT, "php ctpepost");

curl_setopt($cpt, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($cpt, CURLOPT_SSL_VERIFYPEER, FALSE);

curl_setopt($cpt, CURLOPT_POST, 1);

curl_setopt($cpt, CURLOPT_POSTFIELDS, $strPOST);

$curlresultURL = curl_exec($cpt);

$curlerror = curl_error($cpt);

$curlinfo = curl_getinfo($cpt);

curl_close($cpt);

// here you can get all variables returned from the ctpe server (see post integration transactions documentation for help)

//print $strPOST;

// parse results

$r_arr=explode("&",$curlresultURL);

foreach($r_arr AS $buf)

{

$temp=urldecode($buf);

$temp=split("=",$temp,2);

$postatt=$temp[0];

$postvar=$temp[1];

$returnvalue[$postatt]=$postvar;

//print "<br>var: $postatt - value: $postvar<br>";

}

$processingresult=$returnvalue['POST.VALIDATION'];

$redirectURL=$returnvalue['FRONTEND.REDIRECT_URL'];

// everything ok, redirect to the WPF,

if ($processingresult=="ACK")

{

        if (strstr($redirectURL,"http")) // redirect url is returned ==> everything ok

{

                header("Location: $redirectURL");

}

        else // error-code is returned ... failure

{

                //header("Location: [127.0.0.1/livesyste...](http://127.0.0.1/livesystem/error.php)");

                print_r($returnvalue);

}

}// there is a connection-problem to the ctpe server ... redirect to error page (change the URL to YOUR error page)

        else

{

                // header("Location: [127.0.0.1/livesyste...](http://127.0.0.1/livesystem/connection.php)");

                print_r($returnvalue);

                //print_r($returnvalue);

}

?>

Dabei sind auch Parameter von Relevanz die aus unserer Datenbank stammen.        

$parameters['NAME.GIVEN'] = $_GET['FirstName']; FirstName = Feld KONTAKT.T_First_Name aus unserer FileMaker-Datenbank

$parameters['NAME.FAMILY'] = $_GET['LastName']; LastName = Feld KONTAKT.T_Last_Name aus unserer FileMaker-Datenbank

Diese Übergeben wir dem WebViewer in Form:

"?"&"LastName=" & KONTAKT.T_Last_Name & "&" &"Price="&Preis_Heidel_Uebertragung&"&" & "Street=" & KONTAKT.T_Adress & "&" &

"Zip=" & KONTAKT.Z_ZIP & "&" & "Stadt=" & KONTAKT.T_City & "&" & "Land=" & KONTAKT.T_Country & "&" & "Mail=" & KONTAKT.T_EMail & "&" & "Buchung=" & INVOICE.BUCHUNG.Nr_1_2 & "&" & "FirstName=" & KONTAKT.T_First_Name&"&" & "Code=" & KONTAKT.SICHERHEIT.CODE

Wobei sich die URL noch aus einem Feld mit dem Inhalt der URL zum PHP-Script auf unserem Server zusammensetzt:

URL.Parameter= "http://www……………………com/Semicon2012/request.php"

Das Feld ACCOUNT.USER.Parameter besteht aus dem Inhalt "?"&"LastName=" & KONTAKT.T_Last_Name & "&" &"Price="&Preis_Heidel_Uebertragung&"&" & "Street=" & KONTAKT.T_Adress & "&" &

"Zip=" & KONTAKT.Z_ZIP & "&" & "Stadt=" & KONTAKT.T_City & "&" & "Land=" & KONTAKT.T_Country & "&" & "Mail=" & KONTAKT.T_EMail & "&" & "Buchung=" & INVOICE.BUCHUNG.Nr_1_2 & "&" & "FirstName=" & KONTAKT.T_First_Name&"&" & "Code=" & KONTAKT.SICHERHEIT.CODE

Beide Felder URL.Parameter&ACCOUNT.USER.Parameter ergeben dann die URL mit den zu übergebenden Parametern an das PHP-Script auf dem Webserver.

Teil 2 in wenigen Tagen

                                


PDF-Erzeugung per IWP

Jeder der eine Datenbank im Web über IWP freigibt, kommt irgendwann an einen Punkt wo er die Entscheidung IWP zu verwenden bereut.

Nun ich erreichte den Punkt als es darum ging Dateien zu exportieren, oder nur eine PDF zu erzeugen. Viele Script-Schritte funktionieren über IWP nicht. Kein als Excel-Speichern, kein Datensätze als PDF speichern.

Was also tun wenn man z.B. Teilnehmer über IWP erfassen möchte und Diese im Anschluss eine Anmeldebestätigung erhalten sollen?

Die Antwort habe ich im FileMaker-Forum erhalten. Einfach einen Client auf dem Server mitlaufen lassen. Einen Client auf dem Server laufen lassen?

Was steckt dahinter. Nun der Client übernimmt die Aufgaben die der Server nicht kann. Also speichern, exportieren oder gar importieren von Dateien. Alles was eine Client im Netzwerk kann, geht mit diesem Ansatz.

Wie aber sage ich nun dem Client was zu tun ist? Über gesetzte Feldwerte. Die Funktion Feldwert setzen geht auch über IWP basierte Webseiten. Das bedeutet z.B. wenn die Anmeldung eines Teilnehmers durchlaufen ist, wird über ein Script der Feldwert „FLAG.MAIL.Anmeldung_1“ auf den Wert 1 gesetzt.

Jetzt beginnt die Arbeit des Clients. Über ein „BeiTimer-Script“ setzen überprüft der Client regelmäßig ob der Feldwert „FLAG.MAIL.Anmeldung_1“ den Wert 1 enthält. Tut er dies, wird einfach ein Script zu Versenden einer EMail angestossen. Um nun nicht im Minutentakt immer wieder eine Mail an den Teilnehmer zu versenden gibt es noch ein zweites Statusfeld. Dieses erhält nach Versendung der Mail den Status 1. Ist der Wert dieses Feldes auf 1, wird keine Mail versendet.

Auf diese Weise kann ich alle Funktionen die ein Client beherrscht auch über den Server ansteuern.


Datenimport und Export im IWP

Seit einigen Wochen stecke ich einem Projekt bei dem die Dateneingabe über ein Web Front-End erfolgen wird. Da der Kunde die meisten Einstellungen selbständig durchführen möchte und ein jedes Datenfeld seine Bedeutung ändern wird, erschien mir IWP als die richtige Lösung für die Darstellung der Webseiten. Kein DreamWeaver oder anderer Editor wird im Nachgang bei Änderungen im Layout benötigt.

Was ist aber mit dem Import und Export von Datensätzen. Bei der Nutzung des IWP geht mit den Bordmitteln von FileMaker nichts. Kein Import oder speichern. Nach einigen Recherchen im Netz bin ich auf die Seite des Herrn Cristian Stüben geraten.

http://www.haifischbar.com

Nun ist es möglich Daten zu exportieren und zu importieren.


Nachtrag Synchronisation mit FileMaker Go

Ich hatte ja schon vor einiger Zeit über die Möglichkeit einer Synchronisation zwischen FileMaker und FileMaker Go ohne Plugin oder andere Hilfemittel berichtet. Nun kam die Frage auf, wie speichere ich in den Importeinstellungen die Einstellung „Vorhandene Datensätze in der Ergebnismenge aktualisieren“ ?

Ganz einfach. Wir müssen noch auf dem Desktoprechner eine Synchronisation bzw. einen Import durchführen. Im Zweifelsfall auch mit Dummy-Daten. Anschliessend nochmals das Import-Script bearbeiten und die Einstellung wie gezeigt setzen.

Import-2012-02-6-00-57.png

Nun sollten veränderte Datensätze nur geändert und nicht als neue Datensätze Hinzugefügt werden.


Dynamische Menüsteuerung Teil 2

Die Tabellen haben wir vorbereitet und arbeiten am Layout weiter. Wir benötigen in unserem Fall innerhalb eines Wunschlayouts ein -Portal- der Tabelle -T18i_timesheet_MENUE||id_constant|

PastedGraphic-2011-12-23-00-43.png

Layout1-2011-12-23-00-43.png Layout2-2011-12-23-00-43.png

Die Tabelle -T18i_timesheet_MENUE||id_constant| ist eine Instanz der Tabelle MEN_Menue. Dieses ist in meinem Fall die Tabelle des Hauptmenüs. Im Portal finden sich nun die Felder -Menue_Name-, -Menue_Icon-,-Menue_Icon_Rand- und Menue_Icon.

Layout3-2011-12-23-00-43.png

Nach verlassen des Layout-Modus erschein der Button aus dem Feld -Menue_Icon_Rand-, das Symbol aus dem Feld -Menue_Icon- und die Bezeichnung aus dem Feld -Menue_Name-. Das Dynamische Menü ist somit fast fertig. Was fehlt uns? Ein Script zum erkennen der Mausklicks.


Im nächsten und letzten Teil gehe ich auf die Script-Steuerung ein.


Eine FileMaker Lösung zum Aufbau von Hierarchien.

Gerade schau ich mir mal die Lösung von Jens Liebelt an.

http://www.jens-liebelt.de/fm-explorer/


Dynamische Menüsteuerung Teil 1

Wer kennt das nicht, Die Datenbank ist fast fertig und plötzlich möchte der Kunde die Bezeichner der Menüs verändert haben. Also fix ans Werk und mal schnell die Button auf 200 Layouts geändert.
Das es auch auch anders geht möchte ich kurz aufzeigen. Mein Weg geht über eine Tabelle Menü. Je nach Anwendungs-Szenario unterscheide ich noch in Haupt-Menü und Neben-Menü. Diese Tabellen verbinde ich mit meiner Tabelle „Einstellungen“.
Beziehung-2011-12-20-01-14.png
Nun stehen mir alle Möglichkeiten der Anpassung über „Preferences“ oder „Einstellungen“ zur Verfügung.
Einstellungen-2011-12-20-01-14.png
Diese sind unterteilt in Button-Symbol, Button als PNG, Bezeichnung, Parameter, Menü-Flag,Sortierung und in das Feld Quick-Info.
Die Symbole sind in ihrer Bedeutung klar und können wie auch die Bezeichnung jederzeit ausgetauscht werden. Der Parameter wird später innerhalb der Skripte benötigt. Innerhalb des Menü-Flag kann ich festlegen welches meiner Module bzw. Tabellen welche Button anzeigen. Möchte ich das im Modul -Projekte- diese als Button nicht erscheinen, so wird der Flag nicht selektiert. Somit erscheint innerhalb des Layouts -Projekte- auch nicht dieser Button.

Nun verknüpfen wir die Tabelle Menü mit einer unserer Module. Wer alle Werte der Tabelle -Menü- als „Global“ deklariert kann auch auf direktem Weg auf diese Werte zugreifen. In diesem Fall ist es nicht notwendig jedes Modul bzw. jede Tabelle mit der Tabelle -Menü- zu verbinden.
BeziehungModul-2011-12-20-01-14.png
Die Beziehung besteht aus einer Konstanten (1) und dem schon erwähnten Flag.
BeziehungEinstellung-2011-12-20-01-14.png

Weiter geht es im Teil 2

Synchronisation mit FileMaker Go

Bis zum jetzigen Zeitpunk besteht ja leider keinerlei Möglichkeit FileMaker und FileMaker Go zu synchronisieren. Über Drittanbieter kann man sich natürlich derlei Funktion in Form von Plugins kaufen. Doch nicht jeder Auftraggeber oder jeder Privatnutzer von FileMaker möchte oder kann hohe Zusatzkosten stemmen.

Was also tun? Wir synchronisieren nicht sondern importieren. Klingt erstmal ganz simpel, ist es auch wenn man das Prinzip erkannt bzw. verstanden hat. Das Hauptproblem ist bei diesem Ansatz die fehlende Möglichkeit direkt  auf die auf dem iOS-Gerät liegende Datenbank zuzugreifen. Unser zweites schnell zu lösendes Problem ist "Gelöschte Datensätze". Ich kann zwar neue Datensätze importieren aber Löschungen kommen ja nicht hinzu sonder sind weg. Was weg ist findet aber keine Berücksichtigung beim Import.

Einfache Lösung für dieses Problem, wir löschen nicht mehr. Alle zu löschenden Daten erhalten lediglich einen -Flag- der sie von der Anzeige in unseren Datenbanken ausschliesst. Dafür müssen wir aber den Zugriff auf die Menüfunktion -Lösche- strikt unterbinden. Positiver Nebeneffekt; es gehen keine Daten ausersehen verloren und es besteht immer eine Übersicht über die schonmal erfassten Daten.Loeschung

Hat man seine zwei Datenbanken soweit umgebaut, kann man sich dem eigentlichen Datenaustausch widmen.

Daten von der Desktop-Datenbank lassen sich noch sehr einfach importieren. Wir benötigen lediglich den Pfad zur Datenbank den wir innerhalb des Import-Scrips in dieser Form eintragen -fmnet:/192.168.11.8/RODRO_CRM.fp7-. Das Script entspricht einem normalen Import-Script und soll hier nicht weiter behandelt werden.

ImportIOSvomDesktop

Nun über diesen Schritt ist es uns ohne weiteres möglich Daten zu importieren wobei dies auch in Form der Datenaktualisierung (Importeinstellungen) geschehen sollte.

Der etwas umständlichere Weg Daten aus der iOS Version der Datenbank in die Desktop-Version zu bekommen bedarf einem kleinen Trick. So ist es unter Anderem zwingend notwendig auch diesen Import von der mobilen Version von FileMaker Go zu starten.

Auf der Desktop-Version müssen Sie ein klassisches Import-Script schreiben. Beginnen Sie mit dem setzen einer Variablen. Der Wert ergibt sich aus dem Pfad zur mobilen Datei auf dem iOS-Gerät. Da wir nicht wissen wo sich diese befindet fragen wir diesen Pfad über  -Hole(DokumentenPfad) & "RODRO_CRM_MOBIL.fp7"- ab.

Variable

Nun können wir den klassischen Import beginnen. Allerdings macht es Sinn gerade bei der Feldzuordnung die mobile Datei erstmal auf dem Desktop-Rechner abzulegen. Dann kommen wir zum Script-Schritt -Datensätze importieren-, geben die Datenquelle an. Diese besteht einmal aus unserer vergebenen Variablen und der mobilen Datei die wir zur Feldzuordnung benötigen.

Import

Nun stellen wir den Import in klassischer Weise in Script-Form fertig. Sind wir mit der Feldzuordnung fertig, können wir die mobile Datei gern vom Desktop-Rechner entfernen.

Rufen wir nun von FileMaker Go aus unsere Desktop-Datenbank aus, können wir die Synchronisation bzw. den Import starten.

Dokumente

Unser Start-Script erkennt (nach entsprechender Vorbereitung) das wir von iOS auf die Datenbank zugreifen. FileMaker wechselt zu einem speziellen Layout oder startet sogleich mit dem Synchronisations-Script.

Abfrage

Jetzt ist der Desktop-Client in der Lage die Datensätze aus FileMaker Go zu importieren.


FileMaker Runtime als Applikation

Das Thema ist vielen FileMaker Entwicklern vertraut: Im Verlauf und insbesondere zum Abschluss eines Projektes einer Zusammenarbeit sind nicht nur viele Tabellen, sondern auch viele Dateien entstanden, die ich an meine Kunden weitergeben möchte. Gleiches gilt, will ich eine Demoversion meiner Software an neue Interessenten schicken. Im Allgemeinen gebe ich die Dateien oder Demoversionen dann als Runtime weiter. Die FileMaker Runtime liegt mit etlichen Dateien innerhalb eines Ordners. Was aber macht der Kunde mit einem Ordner voller Dateien?
Als Orientierungshilfe für den Anwender bieten sich mir zwei Möglichkeiten. Entweder füge ich einer Demoversion ein Dokument mit Erläuterungen zum Start der Datei bei, was potentielle Kunden allerdings schon im Vorfeld abschrecken könnte, oder ich investiere etwas Arbeit in die intelligente Verpackung meiner Demo-Software. Unter Windows konnte ich diese Problematik schon frühzeitig umgehen: Hier gibt es ein nahezu unendliches Angebot an Installationsprogrammen, mit deren Hilfe die Dateien an die richtige Stelle gelegt und entsprechende Menüeinträge zum Starten der FileMaker Runtime erzeugt werden können. Diese Möglichkeiten zur Installation gibt es auch unter Mac OS X, aber der Mac-Nutzer ist es nun einmal gewohnt, Applikationen aus dem .dmg-Image1 auf seine Festplatte zu ziehen und per Doppelklick zu starten.
Dies lässt sich ermöglichen, indem der Ordner mit den entsprechenden Dateien als Applikation gebündelt wird: nun kann die im Ordner liegende FileMaker Runtime Applikation mit dem vertrauten Doppelklick geöffnet werden. Sicherlich gibt es eine Vielzahl von Möglichkeiten, den Ordner mit einer Aktion zu verbinden. Eine der komfortabelsten ist für mich die Verwendung des Tools Platypus2. Dieses kleine „Schnabeltier“ verwandelt den Ordner mit den enthaltenen FileMaker Dateien in eine native Mac-OS-Applikation.
Werkzeuge
Für die Erstellung der FileMaker Runtime nutzen wir das in der FileMaker Advanced Version (bei FileMaker 7 heißt es Developer-Version) mitgelieferte Werkzeug – dies ist allerdings nur in der jeweiligen Entwickler-Version enthalten.
Als zweites Werkzeug verwende ich das bereits erwähnte Tool Platypus. Es dient der Bündelung von Scripts zu einer Applikation, eignet sich aber auch hervorragend zum Verpacken der FileMaker Runtime sowie der dazugehörenden Dateien. Der Quellcode steht unter GNU General Public License und die Nutzung ist kostenlos.
Um den Umfang der fertigen Applikation zu reduzieren, verpacke ich sie in eine Image-Datei (.dmg). Diese Image-Dateien enthalten oft eine Kurzanleitung und eine „Bitte lesen!“-Datei des Entwicklers und sind jedem Mac-Nutzer bekannt. Enthaltene Programme bzw. Applikationen werden per „drag and drop“ in das Pro- grammverzeichnis gezogen.
Für die Erzeugung von Image-Dateien gibt es ebenfalls ein vielfältiges Angebot an Werkzeugen. Die einfachste Möglichkeit ist die Nutzung des Festplatten-Dienstprogramms, das mit Mac OS X geliefert wird. Hat man das Programm gestartet, kann unter Ablage ̈ Neu ̈ Image von Ordner die Applikation zum Image konvertiert werden. Mein persönlicher Favorit ist aber FileStorm, denn mit dieser Applikation kann ich der Image-Datei zusätzlich eine persönliche Note verleihen: So lassen sich z. B. der Hintergrund und das Image-Symbol individuell gestalten.
Aufbau einer Mac OS Applikation
Eine Applikation unter Mac OS X besteht aus verschiedenen Verzeichnissen, die Struktur kann man sich im Finder anzeigen lassen. Mit einem Rechtsklick auf die Applikation oder über den Menüpunkt Paketinhalt anzeigen im Kontextmenü wird die Verzeichnisstruktur sichtbar. Üblicherweise entspricht sie folgen- dem Schema:
Applikationsname.app/Contents/Info.plist
Applikationsname.app/Contents/MacOS/executable
Applikationsname.app/Contents /Resources/icon.icns
Applikationsname.app/Contents /Frameworks/
Applikationsname.app/Contents/PlugIns/ Erstellung der Runtime
Grundsätzlich unterscheidet sich die Erstellung einer Runtime unter Windows nicht von der unter Mac OS X. Zu bedenken ist aber, dass die Projektdateien ProjektXY.sav der beiden Systeme nicht kompatibel sind. Das bedeutet: Wenn ich meine FileMaker Dateien kompatibel für beide Systeme entwickeln möchte, muss ich spätestens bei der Runtime-Erstellung zwei Versionen anlegen.
Der Aufruf der Funktion erfolgt im FileMaker Menü unter Werkzeuge ̈ Entwicklungs- werkzeuge. Hier können Sie die gewünschten Dateien auswählen, die Startdatei vorgeben und einige Parameter wie Projektordner, Abschlussbild u. ä. festlegen. Dabei sollten Sie auf jeden Fall darauf achten, unterschiedliche Projektordner für Mac OS und Windows aus- zuwählen. Warum betone ich die verschiede- nen Projektordner so ausdrücklich? Ich arbeite ausschließlich am Mac und starte Windows über Parallels. Als Besonderheit von Parallels ab Version 4 an gilt: Ab dieser Version könnten die Mac- und Windows-Dateien auch in einem Projektordner liegen, da die beiden Betriebssysteme sich völlig mischen und nicht mehr zwischen Verzeichnissen für Mac oder Windows unterschieden werden muss. Dies führt aber bei nur einem Projektordner zu ei- ner Überschreibung der für Windows erzeug- ten Dateien und umgekehrt.
Der Rest der Runtime-Erstellung ist selbst- erklärend und soll nicht Thema dieses Beitrags sein. Noch zu erwähnen ist, dass nach der Erstellung der Runtime mindestens eine FileMaker Applikation mit der Datei-Endung .app und die eigentliche FileMaker Datei mit der standardmäßigen Datei-Endung .USR im Projektordner liegen.
Erstellung des Application Bundles unter Mac OS
Nachdem Sie die Runtime-Datei erstellt haben, können Sie den kompletten Projekt- ordner zu einer Applikation bündeln. Dazu benötigen Sie das bereits erwähnte Tool Platypus.
Nach dem Programmstart öffnet sich ein kleines Fenster mit relativ wenigen Einstellun- gen:

Für mich sind nur die Einstellungen von Platypus relevant, die ich für meine FileMaker-
Bundles benötige. Daher gebe ich hier nur einen relativ kleinen Einblick in die Fähigkeiten dieses Programms. Wer weitergehende Ambitionen hegt, sollte sich das Programm ruhig genauer anschauen.
Für unsere Zwecke sind nur wenige Angaben notwendig: In das Feld „App Name“ schreiben Sie den Titel Ihrer Applikation. In meinem Fall lautet der Titel „DokuCare“. Als „Script Type“ wählen Sie „AppleScript“. Im Feld „Script Path“ befindet sich der Pfad zu einem AppleScript, das die Anweisung dafür enthält, was bei einem Klick auf die fertige Applika- tion geschehen soll. Deshalb haben Sie auch im vorhergehenden Feld für den „Script Type“ das Format „AppleScript“ gewählt. Platypus vervollständigt automatisch den Pfad zum Interpreter.
Jetzt müssen Sie nur noch ein kleines Apple- Script schreiben. Es besteht aus zwei Anweisungen: 
Tell application „Application“
Über wird die FileMaker Applikation (Pflegeverwaltung.app), die im Runtime-Ordner liegt, angesprochen und geöffnet. Über den Befehl 
„to activate“
wird das FileMaker Applikationsfenster in den Vordergrund geholt. Da nun Ihre FileMaker Applikation gestartet ist und sich im Vordergrund befindet, schließen wir die im Verzeichnis Applikationsname.app/Contents/MacOS liegende ausführende Datei DokuCareFM. Diese wird auch als „executable“ (ausführbar) bezeichnet und startete die FileMaker Applikation (Pflegeverwaltung.app). Geschlossen wird über die Anweisung
quit application „Application“ 

Das bedeutet, Sie schreiben in einen Editor Ihrer Wahl den Befehl:
Danach schreiben Sie
und speichern die Datei im Projektordner als Applikation.scpt.
Jetzt selektieren Sie nur noch den Pfad zum neu erzeugten AppleScript im Feld „Script Path“. Die besten Erfahrungen bei der Benennung des AppleScript habe ich damit gemacht, dass das Script den Namen der Applikation erhält, denn sobald der Name aus dem Feld „App Name“ sich von der Bezeichnung des App- leScript unterscheidet, startet die von Ihnen er- stellte Applikation nicht mehr zuverlässig. Am einfachsten ist es, das Feld App Name leer zu lassen, da es dann automatisch mit der Bezeich- nung des AppleScript gefüllt wird.
Wenn Sie innerhalb Ihrer Datenbanken eigene Symbole einsetzen, möchten Sie wahrschein- lich auch hier ein themenbezogenes eigenes Icon verwenden. Ändern Sie dazu einfach das Symbol im entsprechenden Feld. Jetzt können Sie den Projektordner per „drag and drop“ in das Feld „Files and folders“ ziehen. Dann star- ten Sie über den Button „Create“ den Prozess der Bündelung. Das Programm Platypus er- fragt noch den Speicherort der zu erstellenden Applikation und beginnt dann mit der Arbeit. Ein visuelles Feedback über den Fortschritt der Erstellung gibt es nicht, lediglich der Button „Create“ bleibt bis zum Ende der Erstellung blockiert. Nach Abschluss erhalten Sie eine fertige Applikation mit eigenem Icon und der folgenden Dateistruktur:
Erzeugung der Image Datei
Um nun Ihre neu erstellte Applikation übers Internet zur Verfügung zu stellen, bietet es sich an, die Datei noch in ein Image zu verpacken.


Wie bereits erwähnt, besteht die Möglichkeit, Image-Dateien mit Bordmitteln zu erzeugen. Ich persönlich verwende hierzu aber das kostenpflichtige Tool FileStorm3. Mit FileStorm habe ich die Möglichkeit, der Image-Datei ein individuelles Aussehen zu geben – passt außer- dem vom Namen her sehr gut zum Produkt FileMaker!
Die Erzeugung der Image-Datei ist recht simpel: Zunächst erstellen Sie ein neues Pro- jekt. Anschließend öffnen Sie den Menü- punkt „Preferences“. Im geöffneten Fenster „FileStorm Preferences“ geben Sie unter dem Punkt „Defaults“ die individuellen Eigenschaften der Image-Datei ein. Das Fenster mit den „Preferences“ können Sie jetzt wieder schließen. Dann klicken Sie auf das Symbol „Inspector“.
Es öffnet sich das Fenster „Property Inspector“. Mithilfe der Tastenkombination + kom- men Sie in den Bereich „License Agreements“. Hier können Sie eine Lizenz-Datei angeben. Wenn später das Image entpackt wird, wird diese Lizenz angezeigt, und der Entpackungs-Prozess läuft erst nach Zustimmung durch den Anwender weiter. (Warum die Einstellung so versteckt liegt, weiß wahrscheinlich nur der Programmautor von FileStorm …)
Als Letztes ziehen Sie die von Ihnen zuvor er- stellte Applikation DokuCareFM.app per „drag and drop“ auf das Hauptfenster von FileStorm. Auch hier bietet es sich an, eine Kurzanleitung für die Applikation mit in das Fenster zu ziehen. Ein Klick auf den Button „Finalize“ erzeugt dann das Image.
Wie Sie nach dieser kurzen Abhandlung sehen können, ist der Aufwand für die Applikations-Erstellung zwar gering, aber doch etwas lästig. Sie erleichtern damit aber potentiellen Kunden den Zugang zu Ihrem Produkt und verringern Ihren Zeitaufwand für Supportleistungen, gerade für nicht programminhaltliche Fragen in erheblichem Maß.


Mailing mit FileMaker

Mailing mal anders
E-Mail-Verwaltung ganz ohne Plugin
Web Viewer als E-Mail-Zentrale
Während meines letzten Projektes bekam ich die Aufgabe, E-Mails kontextabhängig in FileMaker zu archivieren. Dabei stolperte ich über die fehlende Möglichkeit, E-Mails per drag and drop aus Outlook in ein FileMaker Feld zu ziehen. 

Eine Zwischenlagerung innerhalb eines temporären Ordners kam für den Auftraggeber nicht infrage. Mein erster Lösungsansatz war, die E-Mails über ein Plugin abzufragen und per Selektierung zuzuordnen, was über ein Plugin wie Mailit 4 recht einfach zu bewerkstelligen ist. Da aber noch keine Klärung des Arbeitsplatzumfanges stattgefunden hatte, war die finanzielle Kalkulation für den Auftraggeber schwierig.
Warum nicht ganz anders?
Da ich schon seit vielen Jahren keinen eigenen Exchange-Server betreibe sondern auf die massenhaft angebotenen Hostingversionen zurückgreife, komme ich natürlich auch mit der Webversion von Outlook (OWA) in Kontakt. Beim Abrufen meiner E-Mails per OWA kam mir irgendwann ein Gedanke: Warum nicht die Weboberfläche einfach im Web Viewer darstellen? Diese Idee sofort in die Tat umsetzend habe ich einen Test durchgeführt, der viel versprechend verlief: Die Oberfläche wurde problemlos angezeigt. 
Was soll ich speichern?
Nun ist es zwar nett, sich den Inhalt einer E-Mail im Web Viewer anzeigen zu lassen, aber es bringt noch keinen echten Mehrwert gegenüber dem Anblick einer E-Mail im Webbrowser. 
Mein erster Ansatz war es, den Inhalt des Web Viewers und somit die E-Mail als PDF-Datei zu speichern und in ein Medienfeld zu legen. Das geht schnell und ist mit FileMaker Bordmitteln machbar. Allerdings war ich von dieser Methode noch nicht vollständig überzeugt.

Ein Blick in das URL-Feld eines Browsers drängt einem die Lösung richtiggehend auf: Jede E-Mail besitzt eine eigene URL, die nur noch abgefragt werden muss. Speichere ich die URL in FileMaker, so kann ich die URL natürlich auch in FileMaker anzeigen lassen. Die Abfrage der URL erfolgt entweder über ein Script oder ein Formelfeld 

LiesLayoutobjektAttribut ( “Web Viewer 1”; “Quelle”)



Das Problem der unvollständigen URL
Wer schon mit der OWA-Oberfläche des Exchange-Servers gearbeitet hat, weiß sicherlich, dass es zwei unterschiedliche Arten der Darstellung gibt: Da haben wir zum einen die moderne Web-2.0-Oberfläche, die keinen Komfort vermissen lässt, und zum anderen die klassische Standardoberfläche, in der ein Link noch wie ein Link aussieht und sich auch wie einer verhält. 

Leider wird bei der Web-2.0-Oberfläche keine komplette URL mehr angezeigt, weshalb nach der Abfrage nur die URL der Hauptansicht gespeichert wird. Das lässt sich aber sehr einfach durch das Zurückschalten auf die alte Oberfläche umgehen. Jetzt bekommt FileMaker alle Links angezeigt und kann diese abfragen und speichern. Übrigens ist kein teurer Hosted Exchange Account nötig – ein einfacher Webmailer entweder vom Hoster oder auch in den eigenen Räumen (Horde, RoundCube o. Ä.) tut es auch. Da diese Mailer die günstigste Möglichkeit darstellen, E-Mails zu archivieren, habe ich meinen Beitrag darauf abgestimmt und den Webmailer RoundCube verwendet. 

Die Darstellung der E-Mails
Die Darstellung der E-Mails ist natürlich Geschmackssache. In meiner Anwendung habe ich ein Portal für die Daten der URL und ein Web-Viewer-Feld erstellt. Die Web-Viewer-URL ist auf eine Variable gelegt. Wird nun im Portal der Link gewählt, wird dieser an die Variable übergeben. Die E-Mail ist nun zu erkennen.
Um die Elemente des Webmailers bequem bedienen zu können, werden die E-Mails in einem Extrafenster gespeichert, das bei Bedarf auch auf einen anderen Monitor verschoben werden kann.



Der eigentliche Ablauf
Speicherung einer E-Mail
Soweit die Theorie. Die Umsetzung in der Praxis stellt jedoch keine große Herausforderung dar sondern lässt sich ganz einfach bewerkstelligen: Wir benötigen lediglich eine Tabelle, die neben den üblichen in der Praxis benötigten Feldern ein Formelfeld und ein Textfeld zum Speichern der URL enthält. 

Das Formelfeld ist wie folgt definiert 

LiesLayoutobjektAttribut ( “Web Viewer 1”; “Quelle”)

und in den Speicheroptionen muss das Häkchen bei „Ergebnisse nicht speichern – nur bei Bedarf neu berechnen“ gesetzt werden. Nun müssen wir nur noch ein Layoutelement mit der Bezeichnung „Web Viewer 1“ vom Typ Web Viewer in unserem Layout einbauen – und fertig. 

In meiner Anwendung habe ich das Web-Viewer-Element in ein Extrafenster verbannt, um mehr Platz zum Lesen der E-Mails zu haben. Diesem habe ich auch noch ein Feld zum Eingeben der URL zum Webmailer spendiert.

Möchte ich nun eine E-Mail speichern, so erzeuge ich per Script einen neuen Datensatz. Das Formelfeld ermittelt die URL, die im gleichen Script per „Feldwert setzen“ in unser Textfeld geschrieben wird. Und schon ist unsere E-Mail gespeichert – immer vorausgesetzt natürlich, es besteht eine Verbindung zum Webmailer.

Anzeigen einer E-Mail
Um die gespeicherte E-Mail bei Bedarf wieder anzeigen zu können, benötigen wir ein zweites Layoutelement vom Typ Web Viewer. Die URL hinterlegen wir als Variable oder auch als Formel. In meinem Beispiel habe ich auf der linken Seite eine Liste der URLs in einem Portal und auf der rechten Seite befindet sich der Web Viewer. Selektiere ich nun einen Datensatz innerhalb des Portals, so wird die Variable des Layoutelements gesetzt und die E-Mail wird im Web Viewer angezeigt.




Fazit
So einfach das Prinzip auch ist, so umfangreich und vielfältig sind die Möglichkeiten. Ich kann den E-Mail-Verkehr nun problemlos verschiedenen Projekten, Firmen oder Kontakten zuordnen. Wer sich daran stört, dass die E-Mails nicht offline zugänglich sind, der sei abschließend noch auf zwei Dinge hingewiesen: zum einen werden immer mehr Inhalte ins Web verschoben und zum anderen kommt die aufgezeigte Möglichkeit sicherlich nicht für jedes Projekt infrage.