In een verkoopsysteem wordt afhankelijk van de aankoopprijs van een artikel, de aankoopprijs vermenigvuldigd met een bepaalde coëfficient om de verkoopprijs te kennen. Hoe hoger de aankoopprijs, hoe lager de coëfficient. Vanaf een bepaalde aankoopprijs ligt die coëfficient vast.
De velden conditie_n en parameter_n zitten in een aparte tabel die gerelateerd is aan de hoofdtabel met de aankooprijzen via een trigger-relatie (een altijd-geldende relatie)
Als je die opstelling bouwt in Filemaker, werkt dat perfect.
Maar omdat bepaalde verkopers de condities niet mogen kennen, moeten die velden ontoegankelijk zijn. Bepaal daarom via een PrivilegeSet in Accounts & Privileges dat de velden Conditie_n niet toegankelijk zijn. Ken die set toe aan bijvoorbeeld de gebruiker GAST.
Log nu in als GAST en kijk wat er gebeurt :
Alle berekeningen waarin de velden conditie_n gebruikt zijn, kloppen niet meer. Filemaker voert een berekening uit, zonder aan te geven dat ie dat eigenlijk niet mag berekenen omdat hij niet voldoende privileges heeft. Maw Filemaker voert die Case() uit, neemt de laatste voorwaarde en berekent daarmee de verkoopprijs. Een doorsnee gebruiker rekent dat resultaat niet na en verkoopt dus lager dan de normale verkoopprijs !
Ik heb de test gedaan in Filemaker 6, 7 en 8. Telkens de bestanden van scratch gebouwd, telkens dezelfde fout. Dat is dus iets wat er al jaren in zit, en ik heb dat nog nooit gehoord, gemerkt, gelezen, ....
Ik had als resultaat een vraagteken verwacht of een andere melding, maar zeker geen berekening die "op het eerste zicht" klopt. Ik heb dit voorbeeld gesimplifieerd, want in de praktijk zijn de condities complexer en bevatten meer berekeningen. Daardoor heb je zelfs geen idee wat de mogelijke verkoopprijs zou zijn. Als Filemaker dan een getal als resultaat geeft, ga je er vanuit dat dat ook juist is. Mooi niet dus !
Wie heeft dezelfde ervaring of wist dit al ?
De bug zit 'm dus in het gebruik van gerelateerde velden die ontoegankelijk gemaakt zijn. Filemaker beschouwt die velden als zijnde 0.
In dit voorbeeldje door het gebruik van een Case() ziet FM de kans schoon die 0 te overroepen en doet dan ook gewoon. Zonder boe of bah ! Ik vrees dat er met een If() hetzelfde gebeurt ...
ik heb een voorbeeldje (FM7 / FM8) bijgevoegd waarmee je kan testen.
Question
Rony Rabijns
Neem volgende praktijkopstelling :
In een verkoopsysteem wordt afhankelijk van de aankoopprijs van een artikel, de aankoopprijs vermenigvuldigd met een bepaalde coëfficient om de verkoopprijs te kennen. Hoe hoger de aankoopprijs, hoe lager de coëfficient. Vanaf een bepaalde aankoopprijs ligt die coëfficient vast.
In Filemakerees wordt dat dan :
case(
aankoopprijs <= conditie 1 ; aankoopprijs * parameter 1 ;
aankoopprijs <= conditie 2 ; aankoopprijs * parameter 2 ;
aankoopprijs <= conditie 3 ; aankoopprijs * parameter 3 ;
aankoopprijs * parameter 4
)
De velden conditie_n en parameter_n zitten in een aparte tabel die gerelateerd is aan de hoofdtabel met de aankooprijzen via een trigger-relatie (een altijd-geldende relatie)
Als je die opstelling bouwt in Filemaker, werkt dat perfect.
Maar omdat bepaalde verkopers de condities niet mogen kennen, moeten die velden ontoegankelijk zijn. Bepaal daarom via een PrivilegeSet in Accounts & Privileges dat de velden Conditie_n niet toegankelijk zijn. Ken die set toe aan bijvoorbeeld de gebruiker GAST.
Log nu in als GAST en kijk wat er gebeurt :
Alle berekeningen waarin de velden conditie_n gebruikt zijn, kloppen niet meer. Filemaker voert een berekening uit, zonder aan te geven dat ie dat eigenlijk niet mag berekenen omdat hij niet voldoende privileges heeft. Maw Filemaker voert die Case() uit, neemt de laatste voorwaarde en berekent daarmee de verkoopprijs. Een doorsnee gebruiker rekent dat resultaat niet na en verkoopt dus lager dan de normale verkoopprijs !
Ik heb de test gedaan in Filemaker 6, 7 en 8. Telkens de bestanden van scratch gebouwd, telkens dezelfde fout. Dat is dus iets wat er al jaren in zit, en ik heb dat nog nooit gehoord, gemerkt, gelezen, ....
Ik had als resultaat een vraagteken verwacht of een andere melding, maar zeker geen berekening die "op het eerste zicht" klopt. Ik heb dit voorbeeld gesimplifieerd, want in de praktijk zijn de condities complexer en bevatten meer berekeningen. Daardoor heb je zelfs geen idee wat de mogelijke verkoopprijs zou zijn. Als Filemaker dan een getal als resultaat geeft, ga je er vanuit dat dat ook juist is. Mooi niet dus !
Wie heeft dezelfde ervaring of wist dit al ?
De bug zit 'm dus in het gebruik van gerelateerde velden die ontoegankelijk gemaakt zijn. Filemaker beschouwt die velden als zijnde 0.
In dit voorbeeldje door het gebruik van een Case() ziet FM de kans schoon die 0 te overroepen en doet dan ook gewoon. Zonder boe of bah ! Ik vrees dat er met een If() hetzelfde gebeurt ...
ik heb een voorbeeldje (FM7 / FM8) bijgevoegd waarmee je kan testen.
NoAccess.fp7.zip
42 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.