Filemaker Plugins
FileMaker Plugin Developer Resource wiki
24usoftware
FileMaker Technologies
http://www.filemaker.com/support/technologies/?nav=support-technologies
http://filemaker.463488.n4.nabble.com/Filemaker-plug-in-Dev-f502034.html
FileMaker Plugin erzeugen
1. FileMaker Plugin Entwicklung Christian Schmitz
2. FileMaker Plugin
• FileMaker Plugin Schnittstelle
• Für FileMaker 7 und neuer
• Erlaubt eigene Funktionen in C, C++, Objective-C & Objective-C++ zu definieren
3. Plugins können nicht
• Skriptschritte definieren/ändern
• Zugriff nehmen auf WebDirect Seiten
• Auf FileMaker Go laufen
• Layouts ändern
• Textausrichtung im Formatierten Text
• Extended Data Source anbieten
4. Benötigt
• Plugin SDK von FileMaker
• Download auf filemaker.com http://www.filemaker.de/support/docs/fm_plugin_sdk.13.0.1.zip
• Filemaker Plugin Template von 24U http://content.24usoftware.com/PlugInTemplate
• Visual Studio für Windows • Xcode für Mac OS X
5. FileMaker SDK 13 Bibliotheken von FileMaker C Header
6. FileMaker SDK 11 Bibliotheken von FileMaker C Header Projekt Windows Beispiel! Projekt Mac OS X
7. Dokumentation?
• Teilweise im C++ Quelltext
8. Dokumentation?
• Teilweise im C++ Quelltext
• Im Internet • http://fmplugins.idma.co.nz/index.php/Main_Page
• Open Source Plugins lesen • Internet Foren • Viel probieren
9. Was ist ein Plugin?
• Programm Bibliothek mit Metadaten
• Bundle, 32/64bit
• Dateiendung .fmplugin
• Windows
• Zwei DLLs: eine 32bit, eine 64bit • Dateiendungen fmx/fmx64
10. API
• Klassen für Parameter/Ergebnis
• Evaluate
• StartScript
• ExecuteFileSQL & ExecuteSQL
11. Klassen
• Data
• DataVect
• BinaryData (Container)
• Text • FixPt (Zahlen)
• DateTime
• CharacterStyle (für formatierten Text)
• Locale
12. Plugin Configuration
• Plugin name "MBS Plugin"
• Plugin eindeutige 4 Zeichen ID "MBSP"
• Version
• Infotext
• Funktionenliste
13. Funktionen
• Plugin definiert Funktionen
• C Funktion, e.g. MBS
• ID (laufende Nummer)
• FileMaker Deklaration, e.g. MBS(FunctionName)
• Mindeste und maximale Anzahl Parameter
• Flags: kMayEvaluateOnServer, kDisplayInAllDialogs
14. Leere Funktion FMX_PROC(fmx::errcode) Test (short funcId, const fmx::ExprEnv& environment, const fmx::DataVect& dataVect, fmx::Data& results) { return 0; }
15. Funktionparameter in C
• funcID: ID aus Funktionsdefinition
• environment: Aktuelle Umgebung für Evaluate, ExecuteSQL, StartScript
• dataVect: Parameterliste aus FileMaker
16. Funktionsergebnis in C
• results: Variable für Ergebnis der Funktion
• Ergebnis der Funktion hier zuweisen
• Text, Zeitstempel, Zahlen, Container
• errcode: Fehlercode für Rückgabe
• Hole ( LetzteFehlerNr )
17. Hello World Funktion { fmx::TextAutoPtr resultText; resultText->Assign("Hello World"); return result.SetAsText( *resultText, result.GetLocale() ); }
18. AutoPtr
• C++ Memory Management
• const &fmx::Text &text
• Referenz von FileMaker für existierendes Objekt
• fmx::TextAutoPtr
• Neues Objekt zum Ändern
• Wird automatisch freigegeben, wenn Funktion endet.
19. AutoPtr
• TextAutoPtr
• FixPtAutoPtr
• DateTimeAutoPtr
• BinaryDataAutoPtr
• DataAutoPtr
• ColorAutoPtr
• CharacterStyleAutoPtr
• QuadCharAutoPtr
• LocaleAutoPtr
• DataVectAutoPtr
• RowVectAutoPtr
• ExprEnvAutoPtr
20. Addieren Funktion
const fmx::FixPt &Zahl1 = dataVect.AtAsNumber(0);
const fmx::FixPt &Zahl2 = dataVect.AtAsNumber(1);
fmx::FixPtAutoPtr Ergebnis;
num->AssignFixPt( Zahl1 );
num->Add( Zahl2, *Ergebnis );
results.SetAsNumber(*Ergebnis);
return 0;
21. Großbuchstaben Funktion
const fmx::Text &text = dataVect.AtAsText(0);
fmx::TextAutoPtr resultText;
resultText->SetText(text);
resultText->Uppercase();
return results.SetAsText( *resultText, results.GetLocale() );
• Mit den Text Funktionen vom Plugin SDK
22. Großbuchstaben Funktion
char buffer[200] = {0};
const fmx::Text &text = dataVect.AtAsText(0);
text.GetBytes(buffer, sizeof(buffer), 0, fmx::Text::kSize_End, fmx::Text::kEncoding_UTF8);
char* b = buffer; while (*b) { *b = toupper(*b); b++; }
fmx::TextAutoPtr resultText;
resultText->Assign(buffer, fmx::Text::kEncoding_UTF8);
return results.SetAsText( *resultText, results.GetLocale() );
23. Anzahl Parameter if (dataVect.Size() < 2) { return kErrorParameterMissing; // 102 }
24. SDK Kompatibilität
• Neuere SDKs definieren neue SDK Funktionen
• FM13 SDK bei Windows inkompatibel zu FM12.
• Weak Linking hilft.
25. Trying 24U Template
• Template laden
• Xcode & Visual C Projekte kopieren und aktualisieren
• eventuell kleine Fixes für aktuelles Mac/Win SDK
• Eigene PLUGIN_ID_STRING festlegen!
• Eigene Funktion definieren
• Probieren & Testen
