SlideShare a Scribd company logo
www.filemaker-konferenz.com
FileMaker Konferenz | Hamburg | 22.-24. Juni 2022
… oder: Wie druckt man in einer vertikalen Lösung


Philipp A. Puls


72solutions GmbH
Drucklayouts über Dateigrenzen hinweg…
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
//=================


// Autor: 72solutions (PAP)


// 30.04.2020

// Gibt einen Datensatz als JSON


//// Parameter:


// [x] NormalCalculated


// Values: "Normal,Calculated" | "Normal" | "Calcualted"


// defines, what classes of fields should be included


//// [x] includeBinaryData


// Values: 1 | "" | 0

// if set to 1, a container Fld will be base64 encoded, otherwise only


// the name of the file will be included


//=================


While ([


$_class = NormalCalculatedGlobal ;


$_includeBinaryData = includeBinaryData ;


$_TO = Case(


PatternCount(


Get ( LayoutTableName );


"_oB");


"ALL";


""


) ;


$_table = Substitute ( Get ( LayoutTableName ); "_oB"; "");


$_FldList = ExecuteSQL ( "


SELECT DISTINCT


f.BaseTableName , f.FieldName, f.FieldClass ,


	
	
	
f.FieldType, f.FieldReps


FROM


FileMaker_BaseTableFields f


WHERE


f.BaseTableName = '"& $_table &"'


AND


'"& $_class &"' LIKE '%'+f.FieldClass+'%'


AND


f.FieldType NOT LIKE 'global%'


"; "•" ; "¶" ) ;


$_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) ;


$_json = While ( [


_FLDclass = $_FLDclass ;


_FLDtype = $_FLDtype ;


_FLDreps = $_FLDreps ;


_FLDtalbe = $_FLDtalbe ;


_FLDname = $_FLDname ;


_rep = GetAsNumber(1) ;


_jsontext = $_jsontext


] ;


_rep < _FLDreps + 1


;


[


_RepString = Case( _FLDreps > 1; "[" & _rep & "]" ; "");


_repMinEins = Case( _FLDreps > 1; "[" & _rep - 1 & "]" ; "");


// tbc … 
// … continued


_filename = Evaluate


(


Case(


(PatternCount ( _FLDtype; "binary") and $_includeBinaryData);


_FLDtalbe &"::"& _FLDname & _RepString;


""


)


) ;


_FLDvalue = Case(


(PatternCount ( _FLDtype; "binary") and $_includeBinaryData and


IsEmpty (Evaluate ( _FLDtalbe &"::"& _FLDname & _RepString)) );


Substitute(


JSONSetElement ( "" ;


["FileData" ; "null" ; JSONNull ];


["FileName" ; "null" ; JSONNull ]


)


;[""{"; "{"];["}""; "}"] )


;


(PatternCount ( _FLDtype; "binary") and $_includeBinaryData);


Substitute(


JSONSetElement ( "" ;


["FileData" ;


	
	
	
Evaluate (


"Base64Encode( " & _FLDtalbe & "::" & _FLDname & _RepString


&")" ) ; JSONString ];


["FileName" ; _filename ; JSONString ]


)


;[""{"; "{"];["}""; "}"] )


;


Evaluate ( _FLDtalbe &"::"& _FLDname & _RepString)


) ;


_jsonTYPE = Case(


IsEmpty ( _FLDvalue );


"JSONNull";


PatternCount ( _FLDtype; "varchar" );


"JSONString";


PatternCount ( _FLDtype; "date" );


"JSONString";


PatternCount ( _FLDtype; "decimal" );


"JSONNumber";


(PatternCount ( _FLDtype; "binary") and $_includeBinaryData);


"JSONObject";


PatternCount ( _FLDtype; "binary" );


"JSONString";


"JSONString"


);


_json = JSONSetElement ( $_json ;


$_FLDid &"•"&_FLDname & _repMinEins ;


Case(


IsEmpty ( _FLDvalue );


_FLDvalue;


PatternCount ( _FLDtype; "varchar" ) ;


MBS( "Text.Serialize"; _FLDvalue) ;


_FLDvalue


) ;


Evaluate(_jsonTYPE)


);


_rep = _rep + 1


] ;


_json


)


;


$_count = $_count + 1


];


// tbc … 
// … continued


Let(


[


§_json = $_json;


$_json = "";


$_class = "" ;


$_includeBinaryData = "" ;


$_TO = "";


$_table = "";


$_FldList = "";


$_FLDcount = "";


$_jsontext = "";


$_count = "";


$_FLDline = "";


$_FLDclass = "";


$_FLDtype = "";


$_FLDreps = "";


$_FLDtalbe = "";


$_FLDname = ""


];


§_json


)


)
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
Case(


Extend (VirtualListChild_VirtualList::ID) > MBS( "QuickList.Count"; "Text"& Case (Length ($$uuid); "_"&$
$uuid; "") ) ;


"";


Let([


§id = Extend (VirtualListChild_VirtualList::ID) - 1;


§ListTyp = "Text"& Case (Length ($$uuid); "_"&$$uuid; "");


§rn = Get ( CalculationRepetitionNumber );


§json = MBS( "QuickList.GetValue"; §ListTyp; §id )


;


§jsonKeys= JSONListKeys ( MBS( "QuickList.GetValue"; §ListTyp; §id );"")


;


§listCount = MBS( "QuickList.Count"; §ListTyp )


;


§key = GetValue ( §jsonKeys ; §rn )


;


§Value = Case(


(§id > §listCount) ;


"";


Length ( §key )<1 ;


"";


GetAsText( JSONGetElement ( §json ; §key ))


)


];


Case( Length( §Value) >0;


MBS( "Text.Deserialize"; §Value );


""


)


)


)
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

More Related Content

What's hot

Hide Android applications in images
Hide Android applications in imagesHide Android applications in images
Hide Android applications in imagesAnge Albertini
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyAlexander Kukushkin
 
Code igniter - A brief introduction
Code igniter - A brief introductionCode igniter - A brief introduction
Code igniter - A brief introductionCommit University
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and NettyConstantine Slisenka
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战mysqlops
 
Grokking TechTalk #27: Optimal Binary Search Tree
Grokking TechTalk #27: Optimal Binary Search TreeGrokking TechTalk #27: Optimal Binary Search Tree
Grokking TechTalk #27: Optimal Binary Search TreeGrokking VN
 
I got 99 problems, but ReST ain't one
I got 99 problems, but ReST ain't oneI got 99 problems, but ReST ain't one
I got 99 problems, but ReST ain't oneAdrian Cole
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Matt Raible
 
100 PHP question and answer
100 PHP  question and answer100 PHP  question and answer
100 PHP question and answerSandip Murari
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKYoungHeon (Roy) Kim
 
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redisZhichao Liang
 
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...Torsten Lodderstedt
 
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...VMware Tanzu
 
Distributed unique id generation
Distributed unique id generationDistributed unique id generation
Distributed unique id generationTung Nguyen
 
My sql failover test using orchestrator
My sql failover test  using orchestratorMy sql failover test  using orchestrator
My sql failover test using orchestratorYoungHeon (Roy) Kim
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulationborkweb
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Toshiaki Maki
 

What's hot (20)

Hide Android applications in images
Hide Android applications in imagesHide Android applications in images
Hide Android applications in images
 
Patroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easyPatroni - HA PostgreSQL made easy
Patroni - HA PostgreSQL made easy
 
Redis 101
Redis 101Redis 101
Redis 101
 
Code igniter - A brief introduction
Code igniter - A brief introductionCode igniter - A brief introduction
Code igniter - A brief introduction
 
Networking in Java with NIO and Netty
Networking in Java with NIO and NettyNetworking in Java with NIO and Netty
Networking in Java with NIO and Netty
 
新浪微博开放平台Redis实战
新浪微博开放平台Redis实战新浪微博开放平台Redis实战
新浪微博开放平台Redis实战
 
Grokking TechTalk #27: Optimal Binary Search Tree
Grokking TechTalk #27: Optimal Binary Search TreeGrokking TechTalk #27: Optimal Binary Search Tree
Grokking TechTalk #27: Optimal Binary Search Tree
 
I got 99 problems, but ReST ain't one
I got 99 problems, but ReST ain't oneI got 99 problems, but ReST ain't one
I got 99 problems, but ReST ain't one
 
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022Comparing Native Java REST API Frameworks - Seattle JUG 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
 
Estrutura de Dados - Ponteiros
Estrutura de Dados - PonteirosEstrutura de Dados - Ponteiros
Estrutura de Dados - Ponteiros
 
100 PHP question and answer
100 PHP  question and answer100 PHP  question and answer
100 PHP question and answer
 
MySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELKMySQL Audit using Percona audit plugin and ELK
MySQL Audit using Percona audit plugin and ELK
 
A simple introduction to redis
A simple introduction to redisA simple introduction to redis
A simple introduction to redis
 
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...
How to Build Interoperable Decentralized Identity Systems with OpenID for Ver...
 
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
Automated Virtualized Testing (AVT) with Docker, Kubernetes, WireMock and Gat...
 
ERC Identity
ERC IdentityERC Identity
ERC Identity
 
Distributed unique id generation
Distributed unique id generationDistributed unique id generation
Distributed unique id generation
 
My sql failover test using orchestrator
My sql failover test  using orchestratorMy sql failover test  using orchestrator
My sql failover test using orchestrator
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulation
 
Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1Introduction to Spring WebFlux #jsug #sf_a1
Introduction to Spring WebFlux #jsug #sf_a1
 

Similar to FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls

FMK2016 - Holger Darjus und Jörg Köster - Migration und Synchronisation
FMK2016 - Holger Darjus und Jörg Köster - Migration und SynchronisationFMK2016 - Holger Darjus und Jörg Köster - Migration und Synchronisation
FMK2016 - Holger Darjus und Jörg Köster - Migration und SynchronisationVerein FM Konferenz
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelNETWAYS
 
FMK2018- Kalender in FileMaker Otmar Kramis
FMK2018- Kalender in FileMaker Otmar KramisFMK2018- Kalender in FileMaker Otmar Kramis
FMK2018- Kalender in FileMaker Otmar KramisVerein FM Konferenz
 
FMK2018-Migration und Synchronisation Holger Darjus
FMK2018-Migration und Synchronisation Holger DarjusFMK2018-Migration und Synchronisation Holger Darjus
FMK2018-Migration und Synchronisation Holger DarjusVerein FM Konferenz
 
FMK2019 Fun mit Fenster Und Layouts by Arnold Kegebein
FMK2019 Fun mit Fenster Und Layouts by Arnold KegebeinFMK2019 Fun mit Fenster Und Layouts by Arnold Kegebein
FMK2019 Fun mit Fenster Und Layouts by Arnold KegebeinVerein FM Konferenz
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
Javascript done right
Javascript done rightJavascript done right
Javascript done rightDirk Ginader
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notesdominion
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignGregor Biswanger
 
Datenformate und Standards
Datenformate und StandardsDatenformate und Standards
Datenformate und StandardsJakob .
 
Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Jens Grochtdreis
 
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-Verein FM Konferenz
 
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...frankstaude
 
Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Jens Grochtdreis
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersUlrich Krause
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGTorsten Kleiber
 

Similar to FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls (20)

FMK2016 - Holger Darjus und Jörg Köster - Migration und Synchronisation
FMK2016 - Holger Darjus und Jörg Köster - Migration und SynchronisationFMK2016 - Holger Darjus und Jörg Köster - Migration und Synchronisation
FMK2016 - Holger Darjus und Jörg Köster - Migration und Synchronisation
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
 
TYPO3 Translations
TYPO3 Translations TYPO3 Translations
TYPO3 Translations
 
Spark vs. PL/SQL
Spark vs. PL/SQLSpark vs. PL/SQL
Spark vs. PL/SQL
 
FMK2018- Kalender in FileMaker Otmar Kramis
FMK2018- Kalender in FileMaker Otmar KramisFMK2018- Kalender in FileMaker Otmar Kramis
FMK2018- Kalender in FileMaker Otmar Kramis
 
FMK2018-Migration und Synchronisation Holger Darjus
FMK2018-Migration und Synchronisation Holger DarjusFMK2018-Migration und Synchronisation Holger Darjus
FMK2018-Migration und Synchronisation Holger Darjus
 
FMK2019 Fun mit Fenster Und Layouts by Arnold Kegebein
FMK2019 Fun mit Fenster Und Layouts by Arnold KegebeinFMK2019 Fun mit Fenster Und Layouts by Arnold Kegebein
FMK2019 Fun mit Fenster Und Layouts by Arnold Kegebein
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
Javascript done right
Javascript done rightJavascript done right
Javascript done right
 
Dojo Und Notes
Dojo Und NotesDojo Und Notes
Dojo Und Notes
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
 
Datenformate und Standards
Datenformate und StandardsDatenformate und Standards
Datenformate und Standards
 
Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)Am Ende ist doch alles HTML (Jax 2010)
Am Ende ist doch alles HTML (Jax 2010)
 
Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1Web Entwicklung mit PHP - Teil 1
Web Entwicklung mit PHP - Teil 1
 
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-
FMK2017 - Schnittstellen zu Fremdsystemen by Robert Rohrkemper-
 
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...
Ein PHP-Wrapper für die Internet-Suchmaschine ht://Dig oder: „Google selbstg...
 
Node.js für Webapplikationen
Node.js für WebapplikationenNode.js für Webapplikationen
Node.js für Webapplikationen
 
Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)Am Ende ist doch alles HTML (Uni Mainz)
Am Ende ist doch alles HTML (Uni Mainz)
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AGQualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
Qualitätssicherung in ADF Projekten der IKB Deutschen Industriebank AG
 

More from Verein FM Konferenz

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfVerein FM Konferenz
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsVerein FM Konferenz
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzVerein FM Konferenz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzVerein FM Konferenz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzVerein FM Konferenz
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinVerein FM Konferenz
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserVerein FM Konferenz
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtVerein FM Konferenz
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtVerein FM Konferenz
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonVerein FM Konferenz
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussVerein FM Konferenz
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussVerein FM Konferenz
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonVerein FM Konferenz
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoVerein FM Konferenz
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaVerein FM Konferenz
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaVerein FM Konferenz
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairVerein FM Konferenz
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinVerein FM Konferenz
 
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management  by Jörg KösterFMK2019 Layout und Eigene Menüs-Management  by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management by Jörg KösterVerein FM Konferenz
 
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...Verein FM Konferenz
 

More from Verein FM Konferenz (20)

FMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdfFMK2022 Excel und FileMaker Schittko.pdf
FMK2022 Excel und FileMaker Schittko.pdf
 
FMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp PulsFMK2022 Custom Functions von Philipp Puls
FMK2022 Custom Functions von Philipp Puls
 
FMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin SchwarzFMK2022 FileMaker Fehler von Martin Schwarz
FMK2022 FileMaker Fehler von Martin Schwarz
 
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard SchulzFMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
FMK2022 FileMaker Server unter Linux Workshop von Bernhard Schulz
 
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard SchulzFMK2022 FileMaker DataAPI und Java von Bernhard Schulz
FMK2022 FileMaker DataAPI und Java von Bernhard Schulz
 
FMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam AugustinFMK2022 FileMaker und Javascript von Adam Augustin
FMK2022 FileMaker und Javascript von Adam Augustin
 
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert KaiserFMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
FMK2022 Arbeiten mit SVG in FileMaker - Robert Kaiser
 
FMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas HirtFMK2022 Dokumentation - Thomas Hirt
FMK2022 Dokumentation - Thomas Hirt
 
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas HirtFMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
FMK2022 CustomFunctions Fuer Einsteiger - Thomas Hirt
 
FMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell WatsonFMK2022 FileMaker Integrated Development Environment - Russell Watson
FMK2022 FileMaker Integrated Development Environment - Russell Watson
 
FMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph KlussFMK2022 Datenschutz DSGVO Christoph Kluss
FMK2022 Datenschutz DSGVO Christoph Kluss
 
FMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph KlussFMK2022 Rechnungen Inkasso - Christoph Kluss
FMK2022 Rechnungen Inkasso - Christoph Kluss
 
FMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell WatsonFMK2019 bug off lightning talk by Russell Watson
FMK2019 bug off lightning talk by Russell Watson
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
 
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza KoudelkaFMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
FMK2019 FileMaker Performance Update 2019 by HOnza Koudelka
 
FMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza KoudelkaFMK2019 Hardware Integrated by HOnza Koudelka
FMK2019 Hardware Integrated by HOnza Koudelka
 
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald MairFmk2019 Produktentwicklung mit FileMaker by Harald Mair
Fmk2019 Produktentwicklung mit FileMaker by Harald Mair
 
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen by Adam Augustin
 
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management  by Jörg KösterFMK2019 Layout und Eigene Menüs-Management  by Jörg Köster
FMK2019 Layout und Eigene Menüs-Management by Jörg Köster
 
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens  ...
FMK2019 FileMaker – das Lizenzmodell Alles was Sie wissen wollen by Klemens ...
 

Recently uploaded

Recently uploaded (8)

DIN-A4-Links 25.03.2024 - Version 3 ab 15_05_2024 - Metin Akgün - Zwangsthera...
DIN-A4-Links 25.03.2024 - Version 3 ab 15_05_2024 - Metin Akgün - Zwangsthera...DIN-A4-Links 25.03.2024 - Version 3 ab 15_05_2024 - Metin Akgün - Zwangsthera...
DIN-A4-Links 25.03.2024 - Version 3 ab 15_05_2024 - Metin Akgün - Zwangsthera...
 
Metin Akgün - Die Bundesregierung plant mit der neuen türkischen Regierung mi...
Metin Akgün - Die Bundesregierung plant mit der neuen türkischen Regierung mi...Metin Akgün - Die Bundesregierung plant mit der neuen türkischen Regierung mi...
Metin Akgün - Die Bundesregierung plant mit der neuen türkischen Regierung mi...
 
Metin Akgün - Zwangstherapie und Januarkonferenz
Metin Akgün - Zwangstherapie und JanuarkonferenzMetin Akgün - Zwangstherapie und Januarkonferenz
Metin Akgün - Zwangstherapie und Januarkonferenz
 
Metin Akgün - Die Bundesregierung plant mich zu ermorden
Metin Akgün - Die Bundesregierung plant mich zu ermordenMetin Akgün - Die Bundesregierung plant mich zu ermorden
Metin Akgün - Die Bundesregierung plant mich zu ermorden
 
DIN-A4-Links 25.03.2024 - Version 1 - Metin Akgün - Zwangstherapie und Januar...
DIN-A4-Links 25.03.2024 - Version 1 - Metin Akgün - Zwangstherapie und Januar...DIN-A4-Links 25.03.2024 - Version 1 - Metin Akgün - Zwangstherapie und Januar...
DIN-A4-Links 25.03.2024 - Version 1 - Metin Akgün - Zwangstherapie und Januar...
 
DIN-A4-Verkaufsschild - Metin Akgün - Zwangstherapie und Januarkonferenz
DIN-A4-Verkaufsschild - Metin Akgün - Zwangstherapie und JanuarkonferenzDIN-A4-Verkaufsschild - Metin Akgün - Zwangstherapie und Januarkonferenz
DIN-A4-Verkaufsschild - Metin Akgün - Zwangstherapie und Januarkonferenz
 
Die Bundesregierung plant mit der neuen türkischen Regierung mich zu ermorden
Die Bundesregierung plant mit der neuen türkischen Regierung mich zu ermordenDie Bundesregierung plant mit der neuen türkischen Regierung mich zu ermorden
Die Bundesregierung plant mit der neuen türkischen Regierung mich zu ermorden
 
DIN-A4-Links 25.03.2024 - Version 2 ab 14_05_2024 - Metin Akgün - Zwangsthera...
DIN-A4-Links 25.03.2024 - Version 2 ab 14_05_2024 - Metin Akgün - Zwangsthera...DIN-A4-Links 25.03.2024 - Version 2 ab 14_05_2024 - Metin Akgün - Zwangsthera...
DIN-A4-Links 25.03.2024 - Version 2 ab 14_05_2024 - Metin Akgün - Zwangsthera...
 

FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls

  • 1. www.filemaker-konferenz.com FileMaker Konferenz | Hamburg | 22.-24. Juni 2022 … oder: Wie druckt man in einer vertikalen Lösung Philipp A. Puls 72solutions GmbH Drucklayouts über Dateigrenzen hinweg…
  • 2. 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
  • 3. 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…
  • 4. 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
  • 5. 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.
  • 6. 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
  • 7. 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!
  • 8. 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.
  • 9. 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.
  • 10. 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 //// Parameter: // [x] NormalCalculated // Values: "Normal,Calculated" | "Normal" | "Calcualted" // defines, what classes of fields should be included //// [x] includeBinaryData // Values: 1 | "" | 0 // if set to 1, a container Fld will be base64 encoded, otherwise only // the name of the file will be included //================= While ([ $_class = NormalCalculatedGlobal ; $_includeBinaryData = includeBinaryData ; $_TO = Case( PatternCount( Get ( LayoutTableName ); "_oB"); "ALL"; "" ) ; $_table = Substitute ( Get ( LayoutTableName ); "_oB"; ""); $_FldList = ExecuteSQL ( " SELECT DISTINCT f.BaseTableName , f.FieldName, f.FieldClass , f.FieldType, f.FieldReps FROM FileMaker_BaseTableFields f WHERE f.BaseTableName = '"& $_table &"' AND '"& $_class &"' LIKE '%'+f.FieldClass+'%' AND f.FieldType NOT LIKE 'global%' "; "•" ; "¶" ) ; $_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) ; $_json = While ( [ _FLDclass = $_FLDclass ; _FLDtype = $_FLDtype ; _FLDreps = $_FLDreps ; _FLDtalbe = $_FLDtalbe ; _FLDname = $_FLDname ; _rep = GetAsNumber(1) ; _jsontext = $_jsontext ] ; _rep < _FLDreps + 1 ; [ _RepString = Case( _FLDreps > 1; "[" & _rep & "]" ; ""); _repMinEins = Case( _FLDreps > 1; "[" & _rep - 1 & "]" ; ""); // tbc …  // … continued _filename = Evaluate ( Case( (PatternCount ( _FLDtype; "binary") and $_includeBinaryData); _FLDtalbe &"::"& _FLDname & _RepString; "" ) ) ; _FLDvalue = Case( (PatternCount ( _FLDtype; "binary") and $_includeBinaryData and IsEmpty (Evaluate ( _FLDtalbe &"::"& _FLDname & _RepString)) ); Substitute( JSONSetElement ( "" ; ["FileData" ; "null" ; JSONNull ]; ["FileName" ; "null" ; JSONNull ] ) ;[""{"; "{"];["}""; "}"] ) ; (PatternCount ( _FLDtype; "binary") and $_includeBinaryData); Substitute( JSONSetElement ( "" ; ["FileData" ; Evaluate ( "Base64Encode( " & _FLDtalbe & "::" & _FLDname & _RepString &")" ) ; JSONString ]; ["FileName" ; _filename ; JSONString ] ) ;[""{"; "{"];["}""; "}"] ) ; Evaluate ( _FLDtalbe &"::"& _FLDname & _RepString) ) ; _jsonTYPE = Case( IsEmpty ( _FLDvalue ); "JSONNull"; PatternCount ( _FLDtype; "varchar" ); "JSONString"; PatternCount ( _FLDtype; "date" ); "JSONString"; PatternCount ( _FLDtype; "decimal" ); "JSONNumber"; (PatternCount ( _FLDtype; "binary") and $_includeBinaryData); "JSONObject"; PatternCount ( _FLDtype; "binary" ); "JSONString"; "JSONString" ); _json = JSONSetElement ( $_json ; $_FLDid &"•"&_FLDname & _repMinEins ; Case( IsEmpty ( _FLDvalue ); _FLDvalue; PatternCount ( _FLDtype; "varchar" ) ; MBS( "Text.Serialize"; _FLDvalue) ; _FLDvalue ) ; Evaluate(_jsonTYPE) ); _rep = _rep + 1 ] ; _json ) ; $_count = $_count + 1 ]; // tbc …  // … continued Let( [ §_json = $_json; $_json = ""; $_class = "" ; $_includeBinaryData = "" ; $_TO = ""; $_table = ""; $_FldList = ""; $_FLDcount = ""; $_jsontext = ""; $_count = ""; $_FLDline = ""; $_FLDclass = ""; $_FLDtype = ""; $_FLDreps = ""; $_FLDtalbe = ""; $_FLDname = "" ]; §_json ) )
  • 11. 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.
  • 12. 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 )
  • 13. 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.
  • 14. 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
  • 15. 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):
  • 16. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022 Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu Case( Extend (VirtualListChild_VirtualList::ID) > MBS( "QuickList.Count"; "Text"& Case (Length ($$uuid); "_"&$ $uuid; "") ) ; ""; Let([ §id = Extend (VirtualListChild_VirtualList::ID) - 1; §ListTyp = "Text"& Case (Length ($$uuid); "_"&$$uuid; ""); §rn = Get ( CalculationRepetitionNumber ); §json = MBS( "QuickList.GetValue"; §ListTyp; §id ) ; §jsonKeys= JSONListKeys ( MBS( "QuickList.GetValue"; §ListTyp; §id );"") ; §listCount = MBS( "QuickList.Count"; §ListTyp ) ; §key = GetValue ( §jsonKeys ; §rn ) ; §Value = Case( (§id > §listCount) ; ""; Length ( §key )<1 ; ""; GetAsText( JSONGetElement ( §json ; §key )) ) ]; Case( Length( §Value) >0; MBS( "Text.Deserialize"; §Value ); "" ) ) )
  • 17. 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…
  • 18. FileMaker Konferenz | Hamburg | 22.-24. Juni 2022 Drucken über Dateigrenzen hinweg — Philipp A. Puls - Philipp A. Puls - 72solutions.eu Vielen Dank unseren Sponsoren