Jump to content

andries

Leden
  • Content Count

    1459
  • Joined

1 Follower

About andries

  • Rank
    zoem zoem

FileMaker profiel

  • FMSummit(s)
    2016 - Antwerpen
    2015 - Brugge
    2014 - Scheveningen
    2013 - Gent
    2012 - Antwerpen
    2011 - Antwerpen
    2010 - Utrecht
    2009 - Antwerpen
    2008 - Antwerpen
  • FBA
    Platinum
  • FileMaker Certificatie
    FileMaker 18
    FileMaker 17
    FileMaker 16
    FileMaker 15
    FileMaker 14
    FileMaker 13
    FileMaker 12
    FileMaker 11
    FileMaker 11
    FileMaker 9

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. wij zijn bezig met een FileMaker add on om Excel files te maken waar dit wel in zou kunnen! vanaf iets demo waardigs zal ik het tonen!
  2. je kan wel vanuit een kleurcode dynamisch een 1x1 pixel in die kleur laten aanmaken, als je die berekening in een container zet kan je die tonen in je portaal. https://excelisys.com/filemaker-pro-13-tip-n-trick-v2-filemaker-pro-progress-bar/ het voorbeeld gaat om een hele progressbar, maar je kan ook enkel het deel gebruiken om je kleur te maken. succes!
  3. he Peter blij dat het je boosheid onverschilligheid wordt, en ik ben er zeker van dat we dit wel nog tot een goed einde gaan maken. ik wil toch nog graag nuanceren dat het niet gaat om 1 keer iets te delen. Het is ook meer dan een custom function, zoals je zelf tijdens het gesprek aanhaalt. De angst is dat als die in open source wordt gelanceerd (waar ik zelf ook voorstander van ben), dat die code door een niet betrokken partij integraal, zondere enige toevoeging van meerwaarde, in een file wordt gestoken waar je dan opeens voor moet betalen. Ik snap die angst ook, want het is al gebeurd in het verleden. Zonder zelfs vermelding van waar het idee kwam, of de code, of het idee. De personen die daar over klagen delen ook al jarenlang in de FileMaker community, dus egoisten zou ik ze zeker niet noemen Maar ik denk dat hier even wat tijd moet over gaan (een weekje of zo) en dan vinden we wel weer de energie en goesting (voor de Nederlanders: zin) om hier mee verder te gaan! Een leuke week aan jullie Groetjes! Andries
  4. Quickfind? of nieuwe requests maken, dan doe je een OR find: of in dit veld of in dat veld. Enter Find Mode Set Field [ CompanyName ; $name ] New Record/Request Set Field [ FirstName ; $name ] New Record/Request Set Field [ LastName ; $name ] Perform Find Dit zal zowel in CompanyName, FirstName als LastName gaan zoeken.
  5. het kan dus wel, als je de functie die filemaker.performscript in een async gooit. async function callFileMaker(){ let result = await FileMakerWrapper.performScript ( "SaveRecord" , $record ); alert(result); } callFileMaker();
  6. ik vrees dat we er niet gaan geraken. want await kan enkel binnen een asynchrone functie.... wat dus wil zeggen dat mijn functie eerst en vooral dus al asynchroon moet zijn... en dus binnen een asynchrone functie kan ik synchroon wachten op een andere asynchrone functie... begrijpen wie begrijpen kan
  7. een andere voorbeeld in fullcalendar is de drop event. waar je een info object binnenkrijgt met een revert functie (hun error functie dus). en dan kan je doen. fm.performScript ( "update record", event ).catch ( (error ) = > info.revert() ); waar info.revert() is de functie die je kreeg van fullcalendar die je moet aanroepen als het opslaan misloopt.
  8. haha, net het voorbeeld dat ik ga geven zo meteen op dotfmp ik heb verder de await nog eens onderzocht, but as usual: filemaker implements dinosaurs... so not supported in webviewer
  9. en zie wat ik hier vind (thanks to russel) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await kunnen we doen var response = await fm.PerformScript() waarin response dus het scriptresultaat van filemaker zal zijn. iedereen blij
  10. top! hoewel ik het niet snap waarom je daar zo hard aan vasthoudt, eender welke integratie dat je ooit wil gaan doen zal met callbacks werken en niet met pauzes. persoonlijk ben ik dan van zoiets meer fan om de performscript nog wat uit te breiden met een timeout, die dan een error gooit als timeout bereikt is. fm.performscript ( "myscript", "myparam", timeout ) .then ( () => alert("filemaker script called" ) ) .catch( () => alert("timeout") )
  11. er is geen pauze in JavaScript... dat is het hele punt net van asynchroon programmeren: doe dit, als het goed gaat doe dan dat. Daarom dat Promises er zijn gekomen, omdat je dan overzichtelijk kan programmeren zonder in de callback hell terecht te komen. $("GET","/myData") .then ( ( data ) => fm.performScript( "SaveData" , data ) ) .then ( ( fmScriptResult ) => alert( "data has been saved:" + fmScriptResult ) ) .catch ( alert ( "something went wrong" ) ); "data has been saved" zal pas aangeroepen worden als filemaker klaar is met zijn functie. De code "wacht" dus wel om uitgevoerd te worden. Of beter gezegd: de code staat geregistreerd om uitgevoerd te worden, indien filemaker zegt dat alles goed is gegaan en dat de rest mag uitgevoerd worden. Dit lijkt mij de juistere (of in ieder geval meer Javascript gerichte) manier van werken, ipv een valse pause te gaan maken (want je code loopt wel verder, alleen zit die in een continue loop).
  12. eigenlijk ging dit vroeger ook al met het hash change trucje dat ik toonde op een fmsummit enkele jaren geleden. Voordeel is dat nu dat hele complexe stuk eruit kan.
  13. dat moet je aan hun vragen, zij spreken over VBS ik denk dat het om VisualBasic script gaat, dus een macro in outlook of zo.
  14. Haai haai, @Peter Wagemans hierbij je voorbeeldje. Het is zonder bibliotheek, maar ik heb wel een eigen klasse moeten schrijven die FileMaker.PerformScript een beetje extend naar FileMaker.PerformScript ( scriptname, parameter, successCallback, errorCallback ). een klein voorbeeldje om 2 way interactie te gaan doen tussen FileMaker en Webviewer. Dit maakt gebruikt van callbacks en/of Promises, een manier waarmee in Javascript vaak een extern iets wordt aangeroepen en afhankelijk of het allemaal goed is gegaan (success) of er iets is misgegaan (error) laat je dan iets gebeuren in je Javascript applicatie. Het komt dus eigenlijk hier op neer: "Filemaker, roep dit script aan, als alles goed is gegaan doe dan dit, als alles fout is gegaan doe dan dat." Een concreet voorbeeld voor bijvoorbeeld een kalendarintegratie is. Indien de gebruiker een event van plek veranderd, roep dan FileMaker aan om dit weg te schrijven in de databank. Indien dit NIET gelukt is (error bij wegschrijven naar record bijvoorbeeld), revert dan de beweging en zet het event weer op de oorspronkelijke plaats zodat de gebruiker ziet dat het niet bewaard is. Dit heet asynchroon programmeren, en is eigenlijk een must om goed te snappen als je wil verder gaan met Javascript. Als een tijdslijn gebeurt dus eigenlijk dit: 1. Actie in Javascript wordt aangeroepen, met daarbij direct de acties: wat als het goed gaat, wat als het mis gaat. 2. Intern worden deze acties geregistreerd, en Javascript roept FileMaker aan. 3. Javascript code stopt nu met werken, dit is ook GEEN PAUZE, we zijn effectief aan het einde van de code gekomen 4. FileMaker doet zijn ding, en bepaalt of hij aan de Webviewer wil zeggen of het goed of slecht is gelopen. 5. De webviewer voert de stukjes code (geregistreerd in stap 1) uit. In code: function onEventDrop(event,revertDrop){ //fm.performScript (scriptname, parameter, successCallback, errorCallback ) fm.performScript("Bewaar Event",event, //success callback deze wordt nadien aangeroepen als FileMaker OK terugstuurt function ( data ) { //data is teruggestuurd vanuit filemaker alert("hoi pipeloi, het is bewaard"); }, //error callback deze wordt nadien aangeroepen als FileMaker ERROR terugstuurt function( error ) { //error is teruggestuurd vanuit filemaker alert("oeps, foutcode in filemaker: " + code ); //revertDrop is een functie die we kregen van FullCalendar om een drop te annuleren, dus roepen we die aan. revertDrop(); } } In FileMaker: #BUSINESS LOGICA #hier kan je heel wat logica doen en bijvoorbeeld proberen weg te schrijven naar een filemaker record #ALS DEMO: een custom dialog Show Custom Dialog [ Title: "Keuze"; Message: "Is de record bewaard?"; Default Button: “Yes”, Commit: “No”; Button 2: “No”, Commit: “No” ] If [ Get ( LastMessageChoice ) = 1 ] #we pass success to the callback Set Variable [ $result; Value:JSONSetElement ( "" ; [ "id" ; JSONGetElement ( Get ( ScriptParameter ) ; "id" ) ; JSONString ]; [ "success" ; Get ( LastMessageChoice ) = 1 ; JSONString ] )] Else If [ Get ( LastMessageChoice ) = 2 ] #we pass error to the callback Set Variable [ $result; Value:JSONSetElement ( "" ; [ "id" ; JSONGetElement ( Get ( ScriptParameter ) ; "id" ) ; JSONString ]; [ "error" ; Get ( LastMessageChoice ) = 2 ; JSONString ] )] End If #RETURN TO WEBVIEWER Perform JavaScript in Web Viewer [ Object Name: "wv"; Function Name: "fmcallback"; Parameter 1: $result ] Zoals je in het voorbeeld zult zien heb ik toch een eigenlijk bibliotheek er in gezet. Heeft me veel bloed zweet en tranen gekost om dit helemaal werkende te krijgen. Ik wil dit gerust wel eens uitleggen hoe het allemaal werkt, maar het komt hier op neer: Ik heb de FileMaker.performScript een beetje uitgebreid zodat je nu ook een success callback en error callback kunt meegeven. Deze registreer ik, en ik roep dan het filemaker script aan. De parameter pas ik wat aan, want ik voeg er nog een "id" aan toe en dan de parameter zoals doorgegeven. Bekijk dit als een soort "telefoon lijn waarop filemaker kan terugroepen". Als FileMaker met dit ID de webviewer opnieuw aanroept, weet de webviewer dus om welke actie het ging. Eigenlijk zegt de webviewer tegen filemaker: hallo, ik ben actie 23 en ik zou willen dat je de record bewaart. Nadien zegt Filemaker tegen de webviewer, actie 23 is helemaal goed gelopen! En hierbij het voorbeeldje, speel er eens mee, en als er vragen zijn shoot! het is nogal een moeilijk concept, maar éénmaal dat je asynchroon kopieren onder de knie hebt, zou je dit eigenlijk ook in Filemaker willen Oh ja, voor de diehards: dit werkt ook met Promises (toch op Mac, op Windows niet zeker), dus je kan ook dit doen: fm.performScript ( "getData", "" ) .then ( (data) => { //data is scriptresultaat van van getData data.sort(); fm.performScript ( "storeData", data); }) .then ( ( data ) => { //data is script resultaat van storeData //doe hier nog dingen }) .catch ( ( error ) => { //dit is ofwel de error van getData of van storeData, cool he :) alert(error); }) callback.fmp12
  15. ik zal straks eens iets in elkaar knutselen om 2 way communicatie te demonstreren.
×
×
  • Create New...