10. FileMaker Konferenz | Hamburg | 16.-19. Oktober 2019
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
1992 –
1999 –
2002 –
2003 –
_
2011 –
2012 –
_
2013 –
_ _ _ _
2015 –
2018 –
Zertifiziert für:
Mag. Philipp A. Puls
Geschäftsführender Gesellschafter der 72solutions GmbH
Erste kommerzielle FileMaker Datenbank
Event-Sponsoring, Marketing & PR
Gründungseigentümer RADIX Group GmbH
Uni Wien, Abschluss des Studiums der
theoretischen Physik
Verkauf der Anteile an der Radix Group
Mitglied im Führungsteam der Stefan Pusch
Unternehmensberatungs KG (base72)
Gesellschafter der 72solutions GmbH,
(vormals base72)
Jährliche Vorträge auf der dot[x]FMP
Regelmäßige Vorträge auf der FMK
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
FileMaker kann doch drucken, oder?
Also, wo ist da bitte das Problem?
• Layouts sind Struktur-getrieben
• … aber das ist doch ok für das User Interface
• … aber es ist Mist für Drucklayouts
• weil sie eben Struktur-getrieben sind
Aber…
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Wozu führt das
Was schief gehen kann, wird auch schief gehen!
• Verwendet man das FMDMT für Updates, werden damit alle nicht-Standard
Kunden-Drucklayouts zerstört
• Alle Drucklayouts aller Kunden in einer Lösung zu sammeln wirkt unsicher
• Druck-Layouts werden mit kundenspezifischen Daten erst vernünftig erstellbar,
die Daten fehlen aber in den Development-Umgebungen
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Die klassische Lösung
Man baut einfach ein Ducklayout-File mit externen Datenquellen in alle
Dokumente …
+ Absurd schnell
– Bricht, wenn sich die Struktur der angebundenen Lösungen ädert
– Jeder Benutzer, der Layout-Access in dieser Druckdatei hat, hat Zugang zu
allen Daten
– ? Mit einem solchen Zugang könnte auch ein Button angelegt werden, der ein
Script in einer verbundenen Datei aufruft.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Der neue Weg
Unsere Zielsetzung :
• Ein Benutzer startet ein Script, wo immer er dazu berechtigt ist
• Dieses Script sammelt die Daten, die benötigt werden, um den Datensatz zu
drucken.
• Die Daten werden an das Druckfile übergeben
• Das Druckfile sollte so wenig wie möglich von dem Daten-Quellfile wissen
• Jeder Administrator sollte technisch in der Lage sein, die Drucklayouts selbst,
oder mit Unterstützung durch einen beliebigen FM-Partner abzuändern
• Das Druckfile sollte ohne Ruheverschlüsselung auskommen können
• Die Daten im Druckfile sollten nie auf der Festplatte ankommen
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Was haben wir (nur) getan!
… um das möglich zu machen:
• Wir verwenden die MBS("QuickList") Funktion, um die Daten über die
Filegrenzen hinweg zu transportieren
• Wir verwenden separate Listen für Text, Zahlen und Datumsformate
• Wir verwenden JSON Data-Struktur um diese Listen lesbar zu halten
• Wir verwenden MagicalValueLists in der Druckdatei um das JSON wieder
aufzulösen
• Wir verwenden Wiederholfelder, um nur 6 Formelfelder synchronisiert zu
halten, anstatt 300!
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Probleme, auf die wir gestoßen sind
… und wie wir sie gelöst haben.
• JSON wird in FileMaker alphabetisch sortiert. Eine Umbenennung würde also
die Reihenfolge zerstören. Stellt man dem Feldnamen jedoch die FeldID voran,
dann klappt das immer!
• Wir teilen die QuickLists nach Datentyp, damit auch ordentliche
Feldformatierung in den Layouts funktionieren.
• Um den Überblick zu behalten bauen wir nicht 3 sondern 6 Listen, in den
Zusätzlichen finden sich die Feldnamen.
• Man kann also Felder wiederverwenden, aber nie den Datentyp ändern!
• Wenn man per PSOS drucken will, muss man die QuickLists im Namen durch
UUIDs erweitern — sonst könnten die Daten von parallelen Serverprozessen
gemischt werden.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
So ist das nun …
• Wir haben mit einer CF angefangen ( GibDatensatzAlsJSON) und das Ergbnis
in eine MBS(“QuickList”) gestopft.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
So ist das nun …
• Dann haben wir verstanden, dass wir die Struktur separat auslesen können, um
sie für die Datennahme wiederverwenden zu können.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
//=================
// Autor: 72solutions (PAP)
// 30.04.2020
// Gibt einen Datensatz als JSON Struktur
//
// Parameter:
// [x] NormalCalculated
// Values: "Normal,Calculated" | "Normal" | "Calcualted"
// defines, what classes of fields should be included
//
// [x] FeldTyp
// Values: "varchar,decimal,date" | "Normal" | "Calcualted"
// defines, what classes of fields should be included//
//=================
Let ([
§_class = NormalCalculated ;
§_Type = Lower( VarcharDecimalDate );
§_table = Substitute ( Get ( LayoutTableName ); "_oB"; "");
§_FldList = ExecuteSQL ( "
SELECT DISTINCT
f.BaseTableName , f.FieldName, f.FieldClass , f.FieldType, f.FieldReps,f.FieldID
FROM
FileMaker_BaseTableFields f
WHERE
f.BaseTableName = '"& §_table &"'
AND
f.FieldType='" & §_Type & "'
AND
'"& §_class &"' LIKE '%'+f.FieldClass+'%'
"; "•" ; "¶" ) ;
§_VarName = "$$_FldList_" & Substitute ( §_Type & §_class; ","; "" );
§_result = Evaluate ( "Let ( " & §_VarName & " = " & Quote( §_FldList) & " ; 1 ) " )
];
§_result
)
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
So ist das nun …
• Jetzt können wir diese Strukturinformation aus der global-Variablen wiederholt
verwenden, um die Daten auszulesen.
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
//=================
// Autor: 72solutions (PAP)
// 30.04.2020
// Gibt einen Datensatz als JSON Data
//
// Parameter:
// [x] NormalCalculated
// Values: "Normal,Calculated" | "Normal" | "Calcualted"
// defines, what classes of fields should be included
//
// [x] FeldTyp
// Values: "varchar,decimal,date" | "Normal" | "Calcualted"
// defines, what classes of fields should be included//
//=================
While ([
$_FldList = Evaluate( "$$_FldList_" & Substitute ( VarcharDecimalDate & NormalCalculated; ","; "" ) ) ;
$_TO = Case(
PatternCount(
Get ( LayoutTableName );
"_oB");
"ALL";
""
) ;
$_FLDcount = ValueCount ( $_FldList) ;
$_jsontext = "";
$_count = 1
];
$_count < $_FLDcount + 1
;
[
$_FLDline = Substitute ( GetValue( $_FldList; $_count ); "•"; "¶");
$_FLDclass = GetValue ($_FLDline ; 3) ;
$_FLDtype = GetValue ($_FLDline ; 4) ;
$_FLDreps = GetAsNumber( GetValue ($_FLDline ; 5)) ;
$_FLDtalbe = GetValue ($_FLDline ; 1) & Case( $_TO = "ALL";"_oB"; "") ;
$_FLDname = GetValue ($_FLDline ; 2) ;
$_FLDid = Right( "0000" & GetValue ($_FLDline ; 6);4) ;
// … the rest is the same as in the first CF
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
So ist das nun …
• Auf der Empfängerseite kalkulieren wir den Feldwert in Wiederholfeldern nach
folgendem Muster (Beispiel hier das Textfeld):
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Schauen wir uns das gemeinsam an…
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu
Vielen Dank unseren Sponsoren