Ga naar inhoud

Alle activiteit

Deze stream update zichzelf

  1. Vandaag
  2. Dank, Menno. Het werkt! Maar wie had anders verwacht? 😃
  3. Marsau

    OttoFMS

    Inderdaad, geweldig. De (niet equivalente) alternatieven zijn betaald. Denk aan Deploy van 360Works, waar ik nu nog intensief mee werk.
  4. https://github.com/minfaatong/ubuntu-orange-pi5
  5. Ik heb het eens aan Ian Jempson gevraagd. FileMaker developer, ook gek van Pi's en heeft een tijdje geleden een Pi5 gekocht. Ikzelf heb een Pi4B draaien in mijn mobiel kantoortje, en hoef eigenlijk geen 5 wegens meer verbruik. [EDIT] heb het ding in een GeekWorm case gestoken, dus heeft een SSDtje. Ik heb de ventilator vervangen door een Noctua, is een stuk stiller.
  6. Peter Wagemans

    OttoFMS

    De kans lopend dat jullie dit zien als reklame, maar gezien dit gratis software geworden is… toch even bekijken! Ik heb de betalende versie al een paar jaar in gebruik bij een grote klant en als ik tel, kom ik uit op bijna 100 deployments. En het laatste jaar zonder enige foutmelding. Dus dit product is echt bruikbaar en zal je als FileMaker developer enorm veel tijd besparen. https://www.proofgeist.com/products/filemaker-data-migration-tool-ottofms-superpowers/ Ik ken Todd vrij goed, en geloof hem dan ook als hij de redenen opgeeft dat dit nu gratis geworden is. https://docs.ottofms.com/otto3/transition-faqs#why-such-a-big-change
  7. Werkt ook met http:// requests geloof ik, niet? Heb het een jaar of 5 geleden eens geinstalleerd, en herinner mij een uitgebreide web interface met heeeeeel veel opties. Het kon parallel met HomeKit draaien, maar ik merkte dat ik het eigenlijk niet gebruikte, en heb de setup afgebroken.
  8. Afgelopen week
  9. Ik ontdekte dat op layouts waar de lijnen paars i.p.v. zwart werden getoond, dit leidde tot problemen in de pdf. Klanten meldden ons ineens dat ze facturen niet meer konden openen met Acrobat, wel met Voorvertoning. Ik kon dit oplossen door de lijnen te vervangen. Het probleem dat de lijnen op het beeldscherm verdwijnen als op de layout wordt ingezoomd werd niet opgelost.
  10. Zet in layout modus de page breaks aan en zorg ervoor dat het stippellijntje dat deze pagina onderbrekingen aangeeft zichtbaar is op de layout. maak daarvoor de layout iets langer. Wanneer dit lijntje ook maar 1 pixel onder die layoutgrens ligt wordt een nieuwe (lege) pagina afgedrukt.
  11. Bij het afdrukken van een layout(factuur-layout) krijg ik na de afdruk steeds een extra lege pagina. in principe is de layout binnen het a4 formaat gecreeerd. Wat kan dit veroorzaken en hoe kan ik dit uitzoeken/oplossen ? prettig weekend 👍
  12. Eerdere
  13. De regularchars is het deel waarin je de toegelaten karakters bepaalt. Ik heb dat deel even aangepast, in de variable 'include' kies je dan welke deel van het karakter-pallet je wilt toelaten, hier heb ik nu ingevuld "Diacritic" , maar als je die leeghaalt, dan hou je allen de 'normale' karakters over: While ( [ i = 64 ; include = "Diacritic" ; /* empty or Diacritic or Greek or Cyrillic (Russia, Ukraine, Belarus, Serbia) */ regular = "" /* No numbers, signs or symbols */ ] ; i < Case ( IsEmpty ( include ) ; 122 ; /* European no diacritics */ include = "Diacritic" ; 255 ; /* European including diacritics */ include = "Greek" ; 969 ; /* European + Greek */ include = "Cyrillic" ; 1119 ; /* European + Greek + Cyrillic */ 0 ) ; [ i = i + Case ( i = 90 ; 7 ; /* Latin capital */ i = 122 ; 70 ; /* Latin lowercase */ i = 214 ; 2 ; /* Diacritics capital */ i = 246 ; 2 ; /* Diacritics lowercase */ i = 382 ; 531 ; /* Greek capital */ i = 937 ; 8 ; /* Greek lowercase */ i = 969 ; 55 ; /* Russian. Ukrainian, Serbian and Belarussian */ 1 ) ; regular = regular & Char ( i ) ] ; regular )
  14. Ik denk dat ie zonder diakrieten zo moet worden: Let ( [ addresslist = Substitute ( MailSendItems::Email ; [ "; " ; ¶ ] ; [ ";" ; ¶ ] ; [ ", " ; ¶ ]; [ "," ; ¶ ] ) ; found = ValueCount ( addresslist ) ; specialchars = ".!#$%&'*+-/=?^_`{|}~0123456789@" ; regularchars = While ( [ i = 64 ; include = "" ; /* empty or Greek or Cyrillic (Russia, Ukraine, Belarus, Serbia) */ regular = "" /* No numbers, signs or symbols */ ] ; i < Case ( IsEmpty ( include ) ; 122 ; /* European no diacritics */ include = "Greek" ; 969 ; /* European + Greek */ include = "Cyrillic" ; 1119 ; /* European + Greek + Cyrillic */ 0 ) ; [ i = i + Case ( i = 90 ; 7 ; /* Latin capital */ i = 122 ; 70 ; /* Latin lowercase */ i = 214 ; 2 ; /* Diacritics capital */ i = 246 ; 2 ; /* Diacritics lowercase */ i = 382 ; 531 ; /* Greek capital */ i = 937 ; 8 ; /* Greek lowercase */ i = 969 ; 55 ; /* Russian. Ukrainian, Serbian and Belarussian */ 1 ) ; regular = regular & Char ( i ) ] ; regular ) ; allowedchars = specialchars & regularchars ; validaddresses = While ( [ result = "" ; x = 0 ] ; x < found ; [ x = x + 1 ; probe = Trim ( GetValue ( addresslist ; x ) ) ; a = Let ( [ p = Position ( probe ; " <"; 1; 1 ) ; r = Right ( probe; 1 ) = ">" and p ] ; If ( r ; GetValue ( Replace ( Left ( probe; Length ( probe ) - 1 ) ; p ; 2 ; ¶ ); 2 ) ; probe ) ); b = Filter ( a ; allowedchars ) ; c = GetValue ( FilterValues ( a ; b ) ; 1 ) ; /* may not be empty */ d = Right ( c ; Length ( c ) - Position ( c ; "@" ; Length ( c ) ; -1 ) ) ; /* Fqdn */ e = Left ( c ; Position ( c ; "@" ; 1 ; 1 ) - 1 ) ; /* Localpart */ f = Right ( d ; Length ( d ) - Position ( d ; "." ; Length ( d ) ; -1 ) ) ; /* TLD */ g = ( Length ( d ) - Position ( d ; "." ; Length ( d ) ; -1 ) >= 2 ) ; h = ( PatternCount ( c ; ".." ) = 0 ) ; i = ( PatternCount ( c ; "@" ) = 1 ) ; j = PatternCount ( d ; "." ) ; k = ( Left ( d ; 1 ) ≠ "." ) ; l = ( Left ( e ; 1 ) ≠ "." ) ; m = ( Right ( d ; 1 ) ≠ "." ) ; n = ( Right ( e ; 1 ) ≠ "." ) ; o = ( Length ( c ) <= 254 ) ; p = ( Length ( e ) <= 64 ) ; q = Exact ( f ; Filter ( f ; regularchars ) ) ; result = List ( result ; Case ( not ( g and h and i and j and k and l and m and n and o and p and q ) ; ""; probe <> a; probe; a ) ) ] ; result ) ] ; validaddresses ) Je hoeft alleen de regularchars aan te passen
  15. Hallo< ik wil u vriendelijk bedanken voor het popup voorbeeld , ik denk dat ik daar wel wat mee kan, heb er even vluchtig naar gekeken en kom er spoedig op terug.
  16. Het is een mooie functie. Ik had problemen met een mailserver dat geen "ë" in het adres accepteert. De CF haalt deze er niet uit en het is mij niet duidelijk hoe je dan dat voorkomt. Ik gebruik dan een andere functie om de alle accenten eruit te halen. Verder struikelt de functie als je adressen hebt als "Voornaam Achternaam <mail@ergens.com>". Ik heb een kleine toevoeging gemaakt dat in dit geval het adres splitst, het mailadres-gedeelte toetst en indien ok, het volledige adres herstelt. Let ( [ addresslist = Substitute ( MailSendItems::Email ; [ "; " ; ¶ ] ; [ ";" ; ¶ ] ; [ ", " ; ¶ ]; [ "," ; ¶ ] ) ; found = ValueCount ( addresslist ) ; specialchars = ".!#$%&'*+-/=?^_`{|}~0123456789@" ; regularchars = While ( [ i = 64 ; include = "" ; /* empty or Greek or Cyrillic (Russia, Ukraine, Belarus, Serbia) */ regular = "" /* No numbers, signs or symbols */ ] ; i < Case ( IsEmpty ( include ) ; 382 ; /* European excl. Greek and Cyrillic */ include = "Greek" ; 969 ; /* European + Greek */ include = "Cyrillic" ; 1119 ; /* European + Greek + Cyrillic */ 0 ) ; [ i = i + Case ( i = 90 ; 7 ; /* Latin capital */ i = 122 ; 70 ; /* Latin lowercase */ i = 214 ; 2 ; /* Diacritics capital */ i = 246 ; 2 ; /* Diacritics lowercase */ i = 382 ; 531 ; /* Greek capital */ i = 937 ; 8 ; /* Greek lowercase */ i = 969 ; 55 ; /* Russian. Ukrainian, Serbian and Belarussian */ 1 ) ; regular = regular & Char ( i ) ] ; regular ) ; allowedchars = specialchars & regularchars ; validaddresses = While ( [ result = "" ; x = 0 ] ; x < found ; [ x = x + 1 ; probe = Trim ( GetValue ( addresslist ; x ) ) ; a = Let ( [ p = Position ( probe ; " <"; 1; 1 ) ; r = Right ( probe; 1 ) = ">" and p ] ; If ( r ; GetValue ( Replace ( Left ( probe; Length ( probe ) - 1 ) ; p ; 2 ; ¶ ); 2 ) ; probe ) ); b = Filter ( a ; allowedchars ) ; c = GetValue ( FilterValues ( a ; b ) ; 1 ) ; /* may not be empty */ d = Right ( c ; Length ( c ) - Position ( c ; "@" ; Length ( c ) ; -1 ) ) ; /* Fqdn */ e = Left ( c ; Position ( c ; "@" ; 1 ; 1 ) - 1 ) ; /* Localpart */ f = Right ( d ; Length ( d ) - Position ( d ; "." ; Length ( d ) ; -1 ) ) ; /* TLD */ g = ( Length ( d ) - Position ( d ; "." ; Length ( d ) ; -1 ) >= 2 ) ; h = ( PatternCount ( c ; ".." ) = 0 ) ; i = ( PatternCount ( c ; "@" ) = 1 ) ; j = PatternCount ( d ; "." ) ; k = ( Left ( d ; 1 ) ≠ "." ) ; l = ( Left ( e ; 1 ) ≠ "." ) ; m = ( Right ( d ; 1 ) ≠ "." ) ; n = ( Right ( e ; 1 ) ≠ "." ) ; o = ( Length ( c ) <= 254 ) ; p = ( Length ( e ) <= 64 ) ; q = Exact ( f ; Filter ( f ; regularchars ) ) ; result = List ( result ; Case ( not ( g and h and i and j and k and l and m and n and o and p and q ) ; ""; probe <> a; probe; a ) ) ] ; result ) ] ; validaddresses )
  17. Inderdaad interessant, en wellicht ook precies een oplossing voor dit probleem. Maar vind het toch weinig aanlokkelijk. Maar toch: in FileMaker hebben we alle bouwstenen om dit zelf te bouwen, op dit laatste stukje na.
  18. Als je handig bent met API's is het ook wel interessant om gebruik te maken van software als https://www.printnode.com/en hiermee worden ook computers apart opgeslagen en de daaronder liggende printers en papierformaten.
  19. Hoi daar, ik ben nog wel wat aan het uitproberen in de lijstweergave met een popup maar vind het ingewikkeld , voor mensen die weten hoe dat moet is het waarschijnlijk een simpel klusje . is er niemand die zegt ik zal wel even wat in elkaar knutselen ,en als je dat wat lijkt heb je een voorbeeld voor jou situatie . maar schijnbaar werkt het niet zo, en misschien denk ik daar wel gemakkelijk over? Ik heb momenteel even niet te veel tijd om er mee bezig te zijn (andere verplichtingen) maar ik kom er nog wel weer op terug. Vriendelijke Groet,
  20. Ha, leuk om te zien, dank je wel. Vind het steeds een fascinerende vraag: hoe organiseer je de logica binnen een applicatie? Het is prachtig om voor een bepaald stuk functionaliteit een generieke, herbruikbare module te bouwen met gedetailleerde (json) parameterisering. De voordelen zijn duidelijk. Tegelijk is er ergens een omslagpunt: dat je beter wat kunt opsplitsen om meer complexe routines snel neer te zetten, of dat je bepaalde logica gewoon elders moet neerleggen, omdat het dan beter aansluit op andere zaken. Ik geef hier toch de voorkeur aan aparte sub-scriptjes, omdat de print-instellingen in de scriptstappen worden opgeslagen. Eén keer de verkeerde openen op een bepaalde machine, en je moet terug naar het betreffende werkstation om te herstellen.. Het is toch wel stom dat we dit niet dynamisch kunnen scripten. In serieuze productieomgevingen met meerdere labelwriters en printers heb je dit gewoon nodig. Volgens mij is er t.a.v. deze scriptstappen sinds begin jaren 90 helemaal niets veranderd.
  21. Ik ben nogal bezig met Home Assistant. Dat is een open source smart home system, zonder vendor lock-in. Wie heeft er al connecties voor gemaakt of er anderszins ervaring mee?
  22. Op zich denk ik dat je 1 script kan inrichten (kan een groot script worden). Ik probeer het in ieder geval zoveel mogelijk centraal te houden. En gebruik JSON parameters om de verschillende opties te verwerken. Dit is een voorbeeld van één van de versies die ik gebruik. Ik sleutel er nog regelmatig aan als ik weer tegen wat extra opties aanloop. # General | Print v2 in file Base (DFMO2) # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # Function : GENERAL PRINT/PDF COMMAND # Modified : 14-09-2023 # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- // # ##### DO NOT RENAME THIS SCRIPT IT IS REFERENCED IN THE SCRIPTS TABLE BY SERIAL NO. XXX # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- Allow User Abort [ On ] Set Error Capture [ On ] // Set Error Logging [ On ] # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # Notes: # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # ----- PARAMETER STRING # JSONSetElement ( "" ; [ "dialog" ; false ; 5 ] // OPTIONS: true / false ; [ "output" ; "print" ; 1 ] // OPTIONS: print / pdf ; [ "record" ; "current" ; 1 ] // OPTIONS: current / browsed ; [ "pdf.append" ; false ; 5 ] // OPTIONS: true / false ; [ "pdf.open" ; false ; 5 ] // OPTIONS: true / false ; [ "pdf.file" ; "filename" ; 1 ] // Complete filepath // PDF OPTIONS ; [ "pdf.option.title" ; "" ; 1 ] ; [ "pdf.option.subject" ; "" ; 1 ] ; [ "pdf.option.author" ; "" ; 1 ] ; [ "pdf.option.keywords" ; "" ; 1 ] ; [ "pdf.option.startpage" ; "" ; 2 ] ; [ "pdf.option.allpages" ; true ; 5 ] // OPTIONS: true / false ; [ "pdf.option.firstpage" ; "" ; 2 ] ; [ "pdf.option.lastpage" ; "" ; 2 ] ) // 14-09-2023 # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # ----- PARAMETER(S) # [record] : What are we printing? OPTIONS: current / browsed # [dialog] : Show dialog for selecting printer? OPTIONS: true / false # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- // Perform Script [ Specified: From list ; “General | Print v2” ; Parameter: JSONSetElement ( "" ; [ "dialog" ; False ; 1 ] // OPTIONS: true / false ; [ "record" ; "current" ; 1 ] // OPTIONS: current / browsed ) // 14-12-2021 ] Set Variable [ $scriptparams ; Value: Get ( ScriptParameter ) ] # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- # If [ JSONGetElement ( $scriptparams ; "record" ) = "current" ] If [ JSONGetElement ( $scriptparams ; "output" ) = "print" ] If [ JSONGetElement ( $scriptparams ; "dialog" ) ] Print [ Restore: HP OfficeJet Pro 7740 series ; With dialog: On ] Else Print [ Restore: HP OfficeJet Pro 7740 series ; With dialog: Off ] End If # Else If [ JSONGetElement ( $scriptparams ; "output" ) = "pdf" ] If [ JSONGetElement ( $scriptparams ; "dialog" ) ] If [ JSONGetElement ( $scriptparams ; "append" ) ] If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; Append ; With dialog: On ; “$pdf” ; Automatically open ; Current record ; Create folders: On ] Else Save Records as PDF [ Restore ; Append ; With dialog: On ; “$pdf” ; Current record ; Create folders: On ] End If Else If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; With dialog: On ; “$pdf” ; Automatically open ; Current record ; Create folders: On ] Else Save Records as PDF [ Restore ; With dialog: On ; “$pdf” ; Current record ; Create folders: On ] End If End If Else If [ JSONGetElement ( $scriptparams ; "append" ) ] If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; Append ; With dialog: Off ; “$pdf” ; Automatically open ; Current record ; Create folders: On ] Else Save Records as PDF [ Restore ; Append ; With dialog: Off ; “$pdf” ; Current record ; Create folders: On ] End If Else If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; With dialog: Off ; “$pdf” ; Automatically open ; Current record ; Create folders: On ] Else Save Records as PDF [ Restore ; With dialog: Off ; “$pdf” ; Current record ; Create folders: On ] End If End If End If End If # Else If [ JSONGetElement ( $scriptparams ; "record" ) = "browsed" ] If [ JSONGetElement ( $scriptparams ; "output" ) = "print" ] If [ JSONGetElement ( $scriptparams ; "dialog" ) ] Print [ Restore: HP OfficeJet Pro 7740 series ; With dialog: On ] Else Print [ Restore: HP OfficeJet Pro 7740 series ; With dialog: Off ] End If # Else If [ JSONGetElement ( $scriptparams ; "output" ) = "pdf" ] If [ JSONGetElement ( $scriptparams ; "dialog" ) ] If [ JSONGetElement ( $scriptparams ; "append" ) ] If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; Append ; With dialog: On ; “$pdf” ; Automatically open ; Records being browsed ; Create folders: On ] Else Save Records as PDF [ Restore ; Append ; With dialog: On ; “$pdf” ; Records being browsed ; Create folders: On ] End If Else If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; With dialog: On ; “$pdf” ; Automatically open ; Records being browsed ; Create folders: On ] Else Save Records as PDF [ Restore ; With dialog: On ; “$pdf” ; Records being browsed ; Create folders: On ] End If End If Else If [ JSONGetElement ( $scriptparams ; "append" ) ] If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; Append ; With dialog: Off ; “$pdf” ; Automatically open ; Records being browsed ; Create folders: On ] Else Save Records as PDF [ Restore ; Append ; With dialog: Off ; “$pdf” ; Records being browsed ; Create folders: On ] End If Else If [ JSONGetElement ( $scriptparams ; "open" ) ] Save Records as PDF [ Restore ; With dialog: Off ; “$pdf” ; Automatically open ; Records being browsed ; Create folders: On ] Else Save Records as PDF [ Restore ; With dialog: Off ; “$pdf” ; Records being browsed ; Create folders: On ] End If End If End If End If # End If # # ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- // Set Error Logging [ Off ] # ----- HISTORY of CHANGES ---- # 04-11-2015 Initial script # 14-12-2021 Rebuild to JSON parameters # Changed default printer # 14-09-2023 Added pdf option
  23. Dank voor jullie reacties. Wat ik nu doe: - inderdaad één enkel centraal basisscript met een $printtype (labeltje, papierformaat) als parameter, volledig gericht op de print-opdracht. - dit script stuurt een subscript aan op naam: "print " & $printtype & " " & get ( persistentID) - het subscript moet dan bestaan, anders wordt een generieke printopdracht uitgevoerd met open dialogen. - het subscript stelt de Printer-instelling en voert vervolgens de eigenlijke printopdracht uit, als de persistentID ook klopt. Geen dialogen. Dit werkt op zich goed. Het nadeel is natuurlijk dat je voor elk werkstation waar specifieke printers zijn gewenst een apart script moet maken voor de prints. Je zou dit soort configuratie-dingetjes natuurlijk liever in de interface regelen.
  24. Printen blijft altijd een heikel punt met inregelen. Zelf gebruik ik (zoveel mogelijk) een basisscript. Dat moet je dan 1 keer inrichten, maar door middel van parameters kun je dan wel zoveel mogelijk sturen.
  25. nope... toch niet dat ik weet... ik doe het nog altijd met de eerste keer "vragen" (dus met dialoog), en dan als global instellen dat ik het heb bewaard en dan altijd daar printen. Maar dat gaat natuurlijk enkel goed als je telkens voor die gebruiker tijdens de sessie op dezelfde printer wil printen.
  26. Beste guru's, Wat is de beste wijze om dynamisch tot een printerkeuze/instelling te komen, zodat je deze per machine/job en wellicht zelfs gebruiker kan aansturen? Zijn we echt nog steeds aangewezen op dure plugin's? Ik kom niet verder dan per machine een eigen script vast te leggen; niet bepaald dynamisch dus. Any thoughts?
  1. Laad meer activiteit
×
×
  • Nieuwe aanmaken...