SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Rpp kurikulum 2013 SMP kelas 8 - Invitation Card
Rpp kurikulum 2013 SMP kelas 8 - Invitation CardRpp kurikulum 2013 SMP kelas 8 - Invitation Card
Rpp kurikulum 2013 SMP kelas 8 - Invitation CardMas Iis .
 
Major Project Report(Git Automation Script).pdf
Major Project Report(Git Automation Script).pdfMajor Project Report(Git Automation Script).pdf
Major Project Report(Git Automation Script).pdfPiyush Mishra
 
TIK_5. pembangunan knowledge
TIK_5.  pembangunan knowledgeTIK_5.  pembangunan knowledge
TIK_5. pembangunan knowledgejackpopo
 
Fastlane on Android 介紹
Fastlane on Android 介紹Fastlane on Android 介紹
Fastlane on Android 介紹Kros Huang
 

Tendances (8)

Clean Code - Clean Comments
Clean Code - Clean CommentsClean Code - Clean Comments
Clean Code - Clean Comments
 
Rpp kurikulum 2013 SMP kelas 8 - Invitation Card
Rpp kurikulum 2013 SMP kelas 8 - Invitation CardRpp kurikulum 2013 SMP kelas 8 - Invitation Card
Rpp kurikulum 2013 SMP kelas 8 - Invitation Card
 
Belajar Dasar-Dasar GIT
Belajar Dasar-Dasar GITBelajar Dasar-Dasar GIT
Belajar Dasar-Dasar GIT
 
Introduzione a Git
Introduzione a GitIntroduzione a Git
Introduzione a Git
 
Major Project Report(Git Automation Script).pdf
Major Project Report(Git Automation Script).pdfMajor Project Report(Git Automation Script).pdf
Major Project Report(Git Automation Script).pdf
 
TIK_5. pembangunan knowledge
TIK_5.  pembangunan knowledgeTIK_5.  pembangunan knowledge
TIK_5. pembangunan knowledge
 
Fastlane on Android 介紹
Fastlane on Android 介紹Fastlane on Android 介紹
Fastlane on Android 介紹
 
Macromedia flash 8
Macromedia flash 8Macromedia flash 8
Macromedia flash 8
 

Similaire à 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
 

Similaire à 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
 

Plus de 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 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
 
FMK2019 FM Data Migration Tool by Stefan Tischler
FMK2019 FM Data Migration Tool by Stefan TischlerFMK2019 FM Data Migration Tool by Stefan Tischler
FMK2019 FM Data Migration Tool by Stefan TischlerVerein FM Konferenz
 
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubFMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubVerein FM Konferenz
 

Plus de 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 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 ...
 
FMK2019 FM Data Migration Tool by Stefan Tischler
FMK2019 FM Data Migration Tool by Stefan TischlerFMK2019 FM Data Migration Tool by Stefan Tischler
FMK2019 FM Data Migration Tool by Stefan Tischler
 
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubFMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
 

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