Jump to content
  • 0
nielsdev

Web Viewer roept URL dubbel aan

Question

Had in Filemaker Pro 11 een prima werkend script waarbij er via een script een URL in Web Viewer werd aangeroepen. Na migratie naar FileMaker Pro 18 Advanced (Mac) roept datzelfde ongewijzigde script plotseling twee keer achter elkaar dezelfde URL aan, dubbel dus.

Omdat deze URL wordt gebruikt om daarmee een formulier online aan te maken, maakt dit script nu steeds dubbele formulieren aan. Als ik in de debug-modus het huidige script stapje voor stapje doorloop (dus langzaam), roept hij de URL maar één keer aan. Alleen op normale scriptsnelheid doet hij dit twee keer.

Heb al een Script Onderbreken/Hervatten van een paar seconden toegevoegd na het aanroepen van de URL in Web Viewer, maar dan volgt die tweede aanroep van de URL alsnog. Als ik in plaats van Script Onderbreken/Hervatten een Loop maak van een paar seconden doet Web Viewer gek genoeg helemaal niets meer met die URL, dus dat lijkt ook geen optie.

Het is voor mij een raadsel, ik zag een andere gebruiker met hetzelfde probleem hier (maar geen oplossing) dat zich toen alleen op de Mac voordeed, en niet op PC  https://fmforums.com/topic/91754-web-viewer-loading-twice/

Is er iemand die dit herkent en ooit de oplossing heeft gevonden? Zou er enorm mee geholpen zijn.

 

Share this post


Link to post

10 answers to this question

Recommended Posts

  • 0

Je schijft dat je het script stapje voor stapje doorloopt. Wat doe je daarin dan allemaal? Het lijkt mij namelijk logisch dat je slechts één stap doet: Het veld instellen waarop de webviewer is gebaseerd met de gewenste URL, de webviewer wordt dan meteen getriggerd om te verversen.

Iedere wijziging die je aanbrengt met "veld instellen", zal de webviewer opnieuw laten verversen. Met een $$variabele als basis voor de webviewer gebeurt dat niet, dan kan je bijvoorbeeld object-verversen gebruiken om de webviewer te laten verversen.

Share this post


Link to post
  • 0
Posted (edited)

In FMP11 roept precies hetzelfde script de URL maar één keer aan, en als ik in FMP18 de debug-modus het script met Stap in (F6) stapje voor stapje doorloop ook. Maar zodra ik dit script gewoon draai, krijg ik in 95% van de gevallen twee maal de aanroep van dezelfde URL. Het gekke is dat als ik de pauze verkort (script onderbreken/hervatten van 2 naar 1 seconde) de kans dat hij het dubbel doet kleiner wordt, maar dan is er ook weer het risico dat het script te snel is, en dat de URL helemaal niet wordt aangeroepen.

Ik staar mij echt blind op het onderstaande script, kan het niet bedenken. Hoop dat iemand het ziet...

Het maakt trouwens niet uit of ik een Web Viewer aanmaak die in de instellingen daarvan verwijst naar $url, of dat ik een lege Web Viewer zonder URL op mijn layout zet, en daarna Web Viewer Instellen [ Objectnaam: "webviewer"; URL: $url ] gebruik.
Voor alle duidelijkheid: ik ga in onderstaande variant naar een layout waar aan de Web Viewer nog geen URL is toegekend

 

Variabele instellen [ $url; Waarde:"https://www.apekool.nl/TransactionRequest? returnurl=http://www.klantnaam.com&shopid=&merchantid=1234567&purchaseid=" &

If ( IsEmpty ( MIJNBESTAND::KLANTNRexact ) ; MIJNBESTAND::Klantnr ;

MIJNBESTAND::KLANTNRexact ) &
If ( MIJNBESTAND::betaal = "apekool" ; "F" ; "P" ) &
Right ( "000000" & MIJNBESTAND::FactuurNr ; 6 ) & "&amount=" &
MIJNBESTAND::Bruto factuur_Val * 100 & "&payment=acceptgiro&entrancecode=" & MIJNBESTAND::FactuurNr & "&description=Verz. Factuur " & MIJNBESTAND:: FactuurNr & "'&billing_firstname=" &
GetAsURLEncoded ( MIJNBESTAND::Voorl. ) & "&billing_lastname=" &
If ( not IsEmpty ( MIJNBESTAND::tv_1 ) ;GetAsURLEncoded ( MIJNBESTAND::tv_1 ) & " " ; "" ) &
If ( not IsEmpty ( MIJNBESTAND::tv_2 ) ;GetAsURLEncoded ( MIJNBESTAND::tv_2 ) & " " ; "" ) &
If ( not IsEmpty ( MIJNBESTAND::Contactpersoon ) ;GetAsURLEncoded ( MIJNBESTAND::Contactpersoon ) & " " ; "" ) &
"&billing_mail=" & MIJNBESTAND::emailklant & "&days=3&including=true&sha1=" & MIJNBESTAND::_global
]

Nieuw venster [ Stijl: Document; Naam: "apekool transactie"; Met lay-out: <Huidige lay-out>; Hoogte: 400; Breedte: 1200; Boven: 100; Links: 100; Sluiten: Ja; Minimaliseren: Ja; Maximaliseren: Ja; Vergroten/verkleinen: Ja ]

Ga naar lay-out [ “apekool transactie” (MIJNBESTAND) ]

Script onderbreken/hervatten [ Duur (seconden): 1 ]


Web Viewer instellen [ Objectnaam: "webviewer"; URL: $url ]

Script onderbreken/hervatten [ Duur (seconden): 3 ]

Variabele instellen [ $result; Waarde:GetLayoutObjectAttribute ( "webviewer" ; "content" ) ]

Venster sluiten [ Huidig venster ]


If [ PatternCount ( $result ; "error" ) ]

Aangepast dialoogvenster tonen [ Titel: "Alert"; Bericht: "Foutje"; Standaardknop: “OK”, Vastleggen: “Ja” ]

Else
Variabele instellen
[
$xml_result; Waarde:ExtractXML ( $result; "trxid" ; 1) ] Veld instellen [ MIJNBESTAND::apekool_id; $xml_result ]

Nieuw venster [ Stijl: Document; Met lay-out: <Huidige lay-out>; Sluiten: Ja; Minimaliseren: Ja; Maximaliseren: Ja; Vergroten/verkleinen: Ja ]

End If
Venster sluiten
[ Huidig venster ]

Edited by nielsdev

Share this post


Link to post
  • 0

Nog een kanttekening: in FMP11 draaide het op een lokale FileMaker Server, nu draait het in een hosted FMP18 Server omgeving.

Share this post


Link to post
  • 0

Ik zou de weergave van de webviewer wijzigen zodat het adres vanuit een $$var of van een GlobalField wordt gevoed ipv de scriptstap "Instellen webviewer"

Begin je script door $$var of het GlobalField eerst léég te maken, daarna je nieuwe venster te maken (en de webviewer te tonen).

De volgende stap is dan $$var of GlobalField in te stellen, maar als je $$var gebruikt, moet je de webviewer nog verversen met RefreshObject. Gebruik je GlobalField, dan hoef je niet te verversen, de webviewer triggert dan meteen.

Daarna pik je de content op met GetLayoutObjectAttribute

Dit is bijna exact hetzelfde als wat jij doet, maar toch net even anders.

[edit]Niet vergeten $$var of GlobalField te legen na gebruik :-) [/edit]

 

Share this post


Link to post
  • 0

Ik zie nu pas dat je een URL met een call-back aftrapt. Is het voor jou niet handiger om dan gewoon "Insert from URL" en het resultaat meteen in een variabele te knallen? Dan is het in feite hetzelfde alsof je met cURL op de commandline werkt en weet je meteen zeker dat de call ook slechts éénmaal wordt verstuurd .... is maar een gedachte hoor :-)

 

Share this post


Link to post
  • 0
Posted (edited)

Jouw tips getest, maar probleem blijft ook na herschrijven op jouw manier.

Ik moet een pauze inbouwen zodat de gegevens opgehaald kunnen worden. Dat doe ik met Script onderbreken/hervatten voor 2 seconden. Als ik deze op 2 seconden zet wordt de URL twee maal aangeroepen.

Als ik deze op 1 seconde of iets korter zet meestal maar 1 keer, maar soms is dit te snel en is de URL nog niet verwerkt en komt er dus niets door. Dat is ook geen optie.

Als ik er 10 seconden van maak altijd twee keer.

En in Filemaker 11 roept hetzelfde script in ongewijzigde vorm gewoon altijd 1 keer de URL aan 

 

De opbouw van de URL is zoals de payment provider het graag ziet (conform hun handleiding) en zoals het ook al jaren werkt, ga ik ook nog even naar kijken

In ieder geval erg bedankt voor het meedenken!

Edited by nielsdev

Share this post


Link to post
  • 0

Wat gebeurd er als je (alleen) $url vervangt door $$url?

Natuurlijk wel zowel in het script als in de referentie voor de WebViewer.

Ik heb in het verleden een vergelijkbaar verhaal gemaakt en uiteindelijk omgebouwd naar MBS omdat ik tegen teveel problemen aanliep door verschillen in macOS/Windows. Maar ik zou nooit een webviewer naar een locale variable laten verwijzen…

Share this post


Link to post
  • 0

Zujuist geprobeerd met $$url i.p.v. $url, maar dat maakt niet uit. Wat wel nu opvalt:

De tweede keer de URL aanroepen gebeurt ná het hervatten van het script. Dus in onderstaand geval zitten er 10 seconden tussen de aanroepen van de URL:

1. Ga naar layout met Web Viewer die standaard naar $$url gaat
2. Script onderbreken/hervatten [ Duur (seconden): 10 ]
3. Variabele instellen [ $result; Waarde:GetLayoutObjectAttribute ( "webviewer" ; "content" ) ]
4. Venster sluiten [ Huidig venster ]

Als ik stap 3 uitschakel gebeurt het nog steeds. Het is net of hervatten van het script dus ook een reload van de URL uitlokt. Daarom heb ik al geprobeerd die pauze te vervangen door een Loop-timer, maar dan wordt de URL helemaal niet meer aangeroepen.

Share this post


Link to post
  • 0

Is "Insert from URL" (IFU) geen handiger werkwijze voor wat jij probeert te doen? De webviewer werd vaak gebruikt omdat IFU erg beperkt was. Met de huidige versie van FM heb inmiddels wél van alles om te controleren. Geklooi met zo'n Webviewer en GetLayoutAttribute is wel een beetje 2010 ipv 2020 😁

In het voorbeeldje zie je 3 methodes naast elkaar, waarbij je bij de eerste 2 (met webviewer) een pauze kan aan/uit zetten. De 3e (met IFU) klapt meteen het resultaat in een veld en is een stuk betrouwbaarder. Met IFU kan je ook een timeout opgeven (15 seconden in het voorbeeld)

Misschien is het wat voor je :-) 

ReadURL.fmp12

Share this post


Link to post
  • 0
Posted (edited)

Ik ben ook een beetje 2010 😀 Heb veel ontwikkeld vanaf Nashoba FileMaker (de allereerste) t/m FMP11 en pak de draad nu weer op bij FMP18. Ik ontdek hele mooie nieuwe features, maar helaas ook wat onhebbelijkheden na conversie, waar dit er eentje van is. Maar belangrijker: Menno's tip bij scenario 3 heeft het opgelost! 👍🎉

De oplossing is inderdaad:
Gebruik Insert from URL, en dus helemaal geen Web Viewer meer (daarbij) gebruiken. Daar zit het probleem dus in. Zodra je Script onderbreken/hervatten gebruikt bij een Web Viewer om de URL de kans te geven om te laden (noodzakelijk om resultaat te krijgen), wordt bij het hervatten na de ingestelde tijd de URL ten onrechte nog een keer aangeroepen 🐞

Voor de medelezers, zoiets als dit dus:

Invoegen vanuit URL [ Selecteren; Met Dialoogvenster: Uit; Doel: Bestandsnaam::Veldnaam; $url; Opties voor cURL: "-X GET --connect-timeout 15 --dump-header $$result -- cookie-jar $$cookies" ]

Vervolgens kan je het resultaat in Veldnaam verder ontrafelen, bijvoorbeeld met Patterncount.

Edited by nielsdev

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...