Ga naar inhoud

Marsau

Leden
  • Items

    741
  • Registratiedatum

  • Laatst bezocht

Alles dat geplaatst werd door Marsau

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

    OttoFMS

    Inderdaad, geweldig. De (niet equivalente) alternatieven zijn betaald. Denk aan Deploy van 360Works, waar ik nu nog intensief mee werk.
  3. 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 )
  4. 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.
  5. 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.
  6. 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.
  7. 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?
  8. Ik heb twee instanties van FileMaker op een Mac Studio, laatste versie macOS etc., en ik dacht ze allebei met de updater naar de laatste versie gebracht te hebben. Ik denk dat de update niet correct is uitgevoerd, want bij één van de apps werd de update weer aangeboden. Het probleem is nu opgelost. Kennelijk zat ik toch nog in de vorige versie. Hoewel ik versie echt wel gecheckt had.
  9. Dag Menno, ik pas steeds weer de toolbar aan. Even werden knoppensetje voor bladeren vastgehouden, zoals we mogen verwachten. Daarna kan je deze actie herhalen; steeds krijg je weer de lege toolbar. 😡
  10. Ik was even blij, maar het probleem is gebleven. Bladeren in layout-modus werkt bij mij nog steeds niet stabiel.
  11. Marsau

    Max(lidnr)

    Op het moment dat je calculatie geëvalueerd wordt, krijg je 420? Dat betekent dat de verwijzing niet klopt. En idd.: met globale opslag is ook een her-calculatie niet gegarandeerd. Om de ‘Max’ functie te laten werken moet ie verwijzen naar een andere tabel occurance. Of gebruik ‘ExecuteSQL’ om het laatste lidnummer te vinden.
  12. While ( [ d = Date ( 1 ; 1 ; 2024 ) ; end = Date ( 1; 5 ; 2024 ) ; result = "" ] ; d ≤ end ; [ result = List ( result; getastext ( d) ) ; d = d + 1 ] ; result )
  13. Als het op specifieke machines en vanaf een specifieke layout niet werkt, dan lijkt het me zinvol om op de betreffende machine even kopie te maken van de layout en systematisch alle fonts op de layout na te lopen, en zo de boosdoener te isoleren. Daarna het betreffende font vervangen en correct installeren.
  14. Gevoelige data aan een Excel bestand toevertrouwen lijkt me sowieso een request for trouble. Ik meen dat de 'beveiliging' van Excel niet zozeer betrekking heeft op data-toegang, als wel het voorkomen van ongeoorloofde wijzigingen. Dus ik ben eigenlijk niet zo verbaasd. Overigens kan je met plugins wel specifiekere data-imports scripten. Ik denk vooral aan Scribe van 360Works, en ook MBS (hoewel daar ook weer iets aanvullends nodig is, als ik me niet vergis). En aangezien een xlsx in essentie een gezipte xml file is, denk dat er ook native wel wat valt te hacken.
  15. Ik heb de indruk dat het relevante gedeelte niet is afgebeeld in het screenshot van je script. check met de debugger. Kennelijk gaat er iets mis met de parameters richting Woo.
  16. Check de Java-installatie. Bij versie 19 is het soms nodig om een Java development kit te (her) installeren. https://www.oracle.com/java/technologies/downloads/ SSL kan ook kritisch zijn. Volgens mij start de wpe ook niet zonder geldig certificaat.
  17. Ik vind dat je datastructuur niet klopt, tenzij je uitgaat van één speler (en één spel). Als je op spel-niveau het aantal doelen opgeeft (alsmede locatie en de deelnemers), kan je een script maken dat de scores klaarzet voor elke deelnemer in het spel. Script heeft een dubbele loop: bij elke deelnemer een loop waarin de score-records worden aangemaakt. Je wilt per spel een totaal zien van de pijl 1, 2 en 3. Simpel: je hebt de velden al. Maak een layout voor elke participant ( = schutter bij een wedstrijd). Portal met zijn/haar scores. Onder de portal plaats je de Resume-velden van pijl1 etc. Ik neem aan dat je de schoten per deelnemer wilt scoren, en niet de scores op wedstrijd-niveau. In een portaal met de deelnemers kan je de totaalscores weergeven en de winnaar zien.
  18. Je tekst is niet geheel duidelijk, dus vergt wat meer inleving en denkwerk om te begrijpen wat je zoekt. Ik heb je appje bekeken en denk wel iets te kunnen zeggen: - ik zou een tabel 'games' o.i.d. invoeren; zijnde een event, op een locatie, met x deelnemers. - een aparte tabel voor koppeling aan deelnemers, of een veld per game waarin je de id van de deelnemers als lijst vastlegt. Als je een aparte tabel doet, dan kan je eventueel ook boogtype daar vastleggen (ervan uitgaande dat een schutter wellicht meerdere bogen heeft en daarin afwisselt.) - een aparte tabel voor de doelen aanmaken. - bij het aanmaken van een game, opgeven deelnemers laat je een script het opgegeven aantal doelen genereren. - bij het schieten bij een doel wordt per deelnemen een score aangemaakt ( game/doel/deelnemer: pijl 1, 2, 3 ). (Ik vraag me af over 3 pijlen per beurt een vast gegeven is of ook wellicht kan variëren). - een benadering is het hanteren van herhalende velden voor de pijlen. Je kan ze eenvoudig resumeren per deelnemer, per game of overall. Per context kan je verschillende zaken nog uitrekenen.
  19. O ja, als de server geen vast IP heeft, dan moet je deze zo instellen (of in DHCP machinespecifiek een bepaald adres reserveren).
  20. Controleer de adressen. Intern moet de IP van de Mac mini worden gebruikt op je LAN, en dat is niet 127.0.0.1 waar de machine naar zichzelf verwijst. Extern je publieke IP, waarbij poort 5003 en 443 naar het interne IP adres wordt gestuurd. Dat moet je instellen op je router, of de Mac in DMZ zetten (goed beveiligen dan).
  21. Je kan een apart veldje uren maken dat je vult met inhoud van invoerveld uren als weekdag >1 en kleiner dan 7. Voeg meteen een weekcode toe om ook gemakkelijk per week te resumeren. als je strak inricht heb je geen weektabel nodig.
  22. Dag Tom, Ik geloof er geen barst van dat je opzet er iets mee te maken heeft; waarschijnlijk zie je ten onrechte je gewijzigde setup als oorzaak van het probleem (evenals de omgevingstemperatuur, luchtdruk etc. 😀) Ik zie veel dingen in je script die tot een fout of (nul-uitvoer) kunnen leiden. Doe eens een debugger met dataviewer: zijn de variabelen die je gebruikt wel beschikbaar? Wil ook opmerken dat je script dramatisch ingekort kan worden. (doe jezelf een plezier een gebruik een CF om variabelen uit een json te halen...)
  23. Ja, veel ervaring mee. Gezien het belang van continuïteit zul je een aparte FMS moeten inrichten. Daarnaast een synchronisatieplan maken: inventariseren welke gegevens waar nodig zijn, selectie van te syncen applicaties, éénrichting of tweerichtingssync, integraal/gedeeltelijk, bedrijfskritisch of niet, omvang van de data, kans op gebruiksconflicten/recordlocking, etc. Daarna kan je keuzen maken over de strategie. Als het bijv alleen maar gaat om voorraadmutaties, en artikel gegevens, zou je wellicht kunnen volstaan met een eenvoudig Data API scriptje dat elke mutatie inschiet in de centrale database en scheduled nachtelijk script om de basisgegevens te syncen. Je kan er ook ervoor kiezen om alles en altijd te syncen door een pakket als bijvoorbeeld MirrorSync van 360Works te gaan gebruiken. Ook dan moet je de apps wat aanpassen (in elke tabel wat systeemvelden maken) om het te laten werken. Wat je je ook moet afvragen of het risico van internet-uitval wel zo groot is dat het de opzet van een gedistribueerde architectuur noodzakelijk zou maken )en de kosten van dit ontwikkelingstraject). Kan me bijvoorbeeld voorstellen dat bij een internet uitval ook geen betalingsverkeer mogelijk is; dus wat heb je dan aan een synchrone lokale database?
  24. Zijn er überhaupt al mensen met Claris Studio bezig? De integratie met FileMaker biedt m.i. fantastische nieuwe mogelijkheden.
×
×
  • Nieuwe aanmaken...