Jump to content
  • 0

Slechts 1 gebruiker per bestand


Leen

Question

Hallo,

Ik loop tegen het feit dat wanneer 2 gebruikers tegelijkertijd in een bestand bezig zijn wat wordt gehost, dit problemen oplevert omdat er dingen verdwijnen. Ik geef ze toegang via een menu wat ook wordt gehost en zou graag willen dat wanneer er door de tweede gebruiker voor het zelfde bestand toegang wordt gevraagd, hier een afwijzing voor komt. Ik weet dat met Get UserCount kan worden uitgelezen hoeveel gebruikers in het bestand zitten, maar dan moet het bestand eerst worden geopend en dat is wat ik niet wil. Ik zou dit graag doen voordat het gevraagde bestand wordt geopend, dus bij de keuze in het menu. Is dit mogelijk in FileMaker 19?

Alvast bedankt.

Link to comment

15 answers to this question

Recommended Posts

  • 1

Een oplossing met het vlaggetje in je hoofdmenu is makkelijk te maken mbv een openings- en sluit script in bestand B.

Verder: voor zover ik weet is het ook met de data api niet mogelijk om metadata op te vragen die het aantal gebruikers van een bepaalde DB geeft.

Je kunt dit echter wel direct aan FileMaker Server vragen met een command line opdracht: fmsadmin -u <username> -p <password> status file <filename>

Dit geeft je een regel terug waarin je het aantal clients dat is ingelogd op de file kunt vinden. Bijvoorbeeld

ID File        Clients Size     Status Enabled Extended Privileges                                   Encrypted 
16 ESkol.fmp12 1       28729344 Normal fmapp fmphp fmwebdirect fmurlscript fmrest fmreauthenticate0  Yes  

 

Edited by Banach
Link to comment
  • 0

Lijkt een beetje de vraag van de kip en het ei. Ik lees dat het bestand wordt gehost. Is dat FileMaker Server? Zo ja dan is daar wel achter te komen zonder met een FileMaker client op het bestand in te loggen.

Maar wellicht is het beter om jouw oplossing aan te passen zodat het wél geschikt is voor een multiuser omgeving. Een heel eenvoudig truukje kan zijn door een vlaggetje te zetten in bestand A wanneer iemand inlogt op bestand B en dat vlaggetje weer uit te zetten wanneer bestand B verlaten wordt. Lees het vlaggetje uit dat in bestand A staat en je weet of iemand in bestand B zit.

Dit is niet 100% safe; het vlaggetje blijft ook staan wanneer iemand op oneigenlijke wijze uitlogt, dus maak ook iets waarmee je het vlaggetje handmatig uit kunt zetten.

 

Edited by Banach
Link to comment
  • 0

Dank je wel Banach, Ja het wordt door FileMaker Server 19 gehost. Ik zal het iets duidelijker omschrijven.

Wat ik eigenlijk wil is dat ik in het hoofdmenu (bestand A) een script opneem dat wanneer men vanuit hier naar bestand B wil gaan, in bestand A leest of het bestand B al een gebruiker heeft. Dus eigenlijk leest in bestand B: Get UserCount > 0, maar dan zonder dat B wordt geopend. Mijn gedachte is dat wanneer de uitkomst 0 is, er toegang tot bestand B kan worden gegeven, maar wanneer het 1 is, dit wordt geweigerd. Alleen dat lezen in een ander bestand zonder het te openen lukt me niet. 

Edited by Leen
Link to comment
  • 0

In wat je vraagt voorziet FileMaker niet. De Get ( UserCount ) werkt alleen als het bestand open is…

Je zult dus eerst het bestand moeten openen om te controleren of er een gebruiker is ingelogd. Zo ja, dan sluit je het bestand weer.

Alternatieve oplossing zou kunnen zijn als je vanuit DB A via de Server API vraagt of er een gebruiker is ingelogd. Nu moet ik zeggen dat ik dit nog nooit heb geprobeerd (sterker, ik weet niet eens of de API het aantal gebruikers voor een DB teruggeeft, dus het is theorie). Als dat werkt kun je het wel ondervangen.

Al vraag ik me af waarom je een bestand op een server zet om het niet te delen, maar daar zul je redenen voor hebben.

Link to comment
  • 0
33 minuten geleden, bigbadwolf zei:

Al vraag ik me af waarom je een bestand op een server zet om het niet te delen, maar daar zul je redenen voor hebben.

Dank je wel BBW, nee is ook een antwoord. Ik wil het bestand wel delen, maar niet tegelijk. ;)

Link to comment
  • 0

Nu ik je reactie in je eerste en laatste post nog een keer goed doorlees zie ik wel een oplossing Banach. Soms valt het kwartje bij mij niet zo snel. ;) Wanneer het vlaggetje wordt geplaats in bestand A bij het openen van bestand B kan de toegang vanuit bestand A naar B bij bestand A worden geblokkeerd. 😁 Prima oplossing, dank je wel.

Link to comment
  • 0

Ik ben een leek op servergebied, dus misschien een domme vraag: gaat het al fout als twee mensen in hetzelfde bestand werken of treed het pas op als ze in hetzelfde record werken? Blokkeren van toegang tot een record is waarschijnlijk makkelijker dan blokkeren van de gehele file.

Link to comment
  • 0
10 minutes ago, hiker said:

Ik ben een leek op servergebied, dus misschien een domme vraag: gaat het al fout als twee mensen in hetzelfde bestand werken of treed het pas op als ze in hetzelfde record werken? Blokkeren van toegang tot een record is waarschijnlijk makkelijker dan blokkeren van de gehele file.

De domste vraag is die die niet gesteld wordt… ;o)

Nee, er kunnen honderden mensen tegelijk in een database werken als dat nodig is, alleen niet in hetzelfde record. FileMaker regelt het blokkeren van een record zelf. Al zijn er wel opties om foutmeldingen aan gebruikers te geven/vermijden door bijvoorbeeld te vragen of een record open is voor een andere gebruiker.

Link to comment
  • 0

Binnenkort 1000 gebruikers in een bestand, dus uw borst mag nat gemaakt. :-)

hoewel ik je wens om zo toegang tot een bestand te beperken  raar vind (mogelijk typisch geval van hartstochtelijk een oplossing ontwikkelen voor het verkeerde probleem - ) zou je kunnen overwegen:  

1. opening script in B dat bestand direct sluit als get(user count) > 1  (ja, het bestand wordt kortstondig geopend, maar so what?);

2. Gebruik de admin API waarbij je de meest sophisticated server/metadata kunt scripten, al dan niet server-side. (Vergelijk bijvoorbeeld de FMS monitor van Menno. Wij bouwden op basis hiervan een server omgeving waarin we zelfs het bestandsbeheer (online/offline zetten, verwijderen, dupliceren ) door FMS kunnen laten plaatsvinden. )

Link to comment
  • 0

@Leen zou het ergens op te lossen zijn, door ongeveer dit:

  • geef iedereen lees-toegang tot db B. Als het dus voor data-info is, is je user sneller bedient.
  • Als users iets willen aanpassen, zet dat in een queue-soort systeem, waardoor niemand tegelijk iets probeert te wijzigen.
  • daarnaast: je kan ook script-gewijs controleren of iemand iets gelockt heeft. Zolang niemand een record gelockt heeft, mag iedereen die beginnen aanpassen. 

Soit, allemaal beetje mogelijkheden, die misschien niet ter zake doen, omdat de echte reden van "één user tegelijk" niet echt meegegeven is.
Let wel op, want users komen dit in IT landschap quasi-nooit tegen, dus niet zo eenvoudig uit te leggen denk ik dat dit de beste/enige oplossing is.

Link to comment
  • 0

Wim en Menno, alle twee enorm bedankt. Misschien moet ik de reden even toelichten. Er werken twee personen aan een database. Ik zal details besparen, maar er gaan gegevens verloren omdat men soms los van elkaar en op hetzelfde moment in hetzelfde bestand werkt. Een melding dat er al iemand in het betreffende bestand zit, wordt ijverig weg geklikt en men gaat door. Marsau heeft gelijk, een oplossing voor het verkeerde probleem, maar het juiste probleem is helaas door mij niet op te lossen en is toegang weigeren voor meer personen tijdens gebruik van de database het enige wat ik kan doen. ;) Menno, ik heb van Banach al een oplossing gekregen die werkt, maar omdat die van jou niet uit te schakelen is, is deze misschien handiger. Nogmaals, heel hartelijk bedankt.

Link to comment

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...