Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: FideL am 07.02.05 - 11:21:33

Titel: Problem mit Userroles + Reservierung :(
Beitrag von: FideL am 07.02.05 - 11:21:33
Hallo Spezis,
ich habe da ein kleines Problem mit einer Reservierungsdatenbank.
Und zwar sollen nicht alle Personen Firmenwagen reservieren dürfen.
Deswegen habe ich eine Rolle Cars angelegt. Nun möchte ich das beim Speichern (Speichernbutton klicken) abgefragt wird, ob das Feld Ressource ausgefüllt ist, ob sonst noch Fehler auftreten, ob der User in der Rolle Cars ist und die Firmenwagen als Reservierung eingetragen wurden.

Code:

REM {Notes only};
@If(ResourceName="" ;@Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern die Reservierung vollständig ausfüllen."));!@IsValid; @Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern alle Fehler korrigieren."));

@IsNotMember("[cars]";@UserRoles)) & RessourceName="Firmenwagen1" OR "Firmenwagen2" OR "VW Transporter" Then Msgbox"Sie dürfen keine Firmenwagen reservieren!" exit;

@Do(@PostedCommand([FileSave]); @PostedCommand([FileCloseWindow])))

Der mittlere Teil soll halt die neue Abfrage ergeben. Er soll immer abfragen, ob der Benutzer in der Gruppe cars ist und ob ein Firmenwagen ausgewählt wurde. Wenn etwas anderes reserviert wurde soll er dennoch Problemfrei die Ressource reservieren. Bin aber leider nicht so bewandert mit der Notes Programmierung :(
Ich hoffe mir kann jemand weiterhelfen :)
Vielen Dank für Antworten und Tipps.
Gruß Fidel
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Semeaphoros am 07.02.05 - 11:35:47
Diese Kurznotation

RessourceName="Firmenwagen1" OR "Firmenwagen2" OR "VW Transporter"

geht nicht.

Muss so sein:

RessourceName="Firmenwagen1" OR RessourceName="Firmenwagen2" OR RessourceName="VW Transporter"
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: FideL am 07.02.05 - 11:50:06
Hallo, habe den Rat befolgt. Nun bekomme ich allerdings die Fehlermeldung " Ein Operator oder Semikolon wurde erwartet, aber nicht gefunden: 'OR' "  ???
gruß fidel
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: klaussal am 07.02.05 - 12:05:30
.. sollte so gehen :

RessourceName="Firmenwagen1" | RessourceName="Firmenwagen2" | RessourceName="VW Transporter"

und die runden Klammern beachten bei "and" und "or" Verknüpfungen !

klaus
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Thomator am 07.02.05 - 12:19:04
Hi,

nur so als Ergänzung:

Die logischen Oder-Abfragen im @If kann man der Übersichtlichkeit halber auch als Liste übergeben.

z.B:

@If(Wert = "Vergelichswert1":"Vergelichswert2":"Vergelichswert3"; dann so; sonst so)

Ist etwas kürzer und übersichtlicher, find ich...

Thomas
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Semeaphoros am 07.02.05 - 12:22:41
Ach so, das ist ja Formel, da ist der OR Operator | (pipe-Zeichen) und nicht ausgeschrieben
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: FideL am 07.02.05 - 13:20:19
Vielen Dank schon mal für eure Hilfe, nun ist mir einiges schon klarer.
Der Code läuft nun zwar, aber nicht korrekt. Wenn ich jetzt eine andere Ressource reservieren möchte, geht das nicht mehr...
Wie kann ich das machen, das er erst abfragt, ob in dem Feld Firmenwagen steht, und wenn ja, dann soll er die Role überprüfen, wenn dort kein Firmenwagen, sondern was anderes drin steht, solll er normal abspeichern.

Hier der bisherige Code...

@If(ResourceName="" ;@Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern die Reservierung vollständig ausfüllen."));!@IsValid; @Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern alle Fehler korrigieren."));
@IsNotMember("[cars]";@UserRoles)) & RessourceName="Firmenwagen1" |  RessourceName="Firmenwagen2" | RessourceName="VW Transporter"; @Return(@Prompt([Ok];"Warnung!";"Sie sind nicht berechtigt einen Firmenwagen zu reservieren!!";
@Do(@PostedCommand([FileSave]); @PostedCommand([FileCloseWindow]))))

Bin für jeden Tipp dankbar... gruß fidel
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Thomator am 07.02.05 - 13:37:40
Ich glaub, Du musst die ganzen Firmenwagenbezeichnungen, also die Oder-Bedingungen noch einklammern.

Sonst wird auch, wenn der User die Rolle Cars hat, aber "Firmenwagen2" ausgewählt ist, nicht gespeichert.

Thomas
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: klaussal am 07.02.05 - 13:45:11
Zitat
Ich glaub, Du musst die ganzen Firmenwagenbezeichnungen, also die Oder-Bedingungen noch einklammern.

Das ist sogar so  ;D Siehe meinen Beitrag weiter oben. AND hat eine stärkere Verknüpfung als OR.

klaus
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: animate am 07.02.05 - 13:51:54
AND hat eine stärkere Verknüpfung als OR.

wie bitte?
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: FideL am 07.02.05 - 13:56:21
Hm, hab ich nun mal in Klammern gesetzt, falls ihr das so:

@If(ResourceName="" ;@Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern die Reservierung vollständig ausfüllen."));!@IsValid; @Return(@Prompt([Ok];"Fehler";"Sie müssen vor dem Speichern alle Fehler korrigieren."));
@IsNotMember("[cars]";@UserRoles)) & (RessourceName="Firmenwagen1") |  (RessourceName="Firmenwagen2") | (RessourceName="VW Transporter"); @Return(@Prompt([Ok];"Warnung!";"Sie sind nicht berechtigt einen Firmenwagen zu reservieren!!";
@Do(@PostedCommand([FileSave]); @PostedCommand([FileCloseWindow]))))

meintet. Leider ist es nun so: egal welche Rolle der User besitzt,
er kann nichts mehr reservieren. Ich bekomme immer das Fenster:
Sie sind nicht berechtigt einen Firmenwagen zu reservieren!!
Weiß noch jemand einen Rat? gruß fidel
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Semeaphoros am 07.02.05 - 14:00:05
Das ist schon richtig, Thomas, wenn auch nicht das richtige Wort dafür :)

Precedence of Operators heisst das und die Tabelle dazu gibts in der Designer-Hilfe, hier die Uebersichtstabelle:


Arithmetic
   ^   Exponentiation
   -   Unary negation (unary minus)
   *, /   Multiplication, floating-point division
   \   Integer division
   Mod   Modulo division (remainder)
   -, +   Subtraction, addition

Concatenation
   &   String concatenation

Relational (Comparison)
   =, <>, ><, <, <=, =<, >, >=, =>, Like   

Object reference comparison (Same precedence as Relational)
   Is, IsA   Tests object type, refers to the same object

Logical
    Not   Logical negation or one's complement
   And   Boolean or bitwise And
   Or   Boolean or bitwise Or
   Xor   Boolean or bitwise exclusive Or
   Eqv   Boolean or bitwise logical equivalence
   Imp   Boolean or bitwise logical implication

Assignment   =   Assignment
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Semeaphoros am 07.02.05 - 14:01:06
Fidel: Schnapp Dir dringend mal ein Buch über formale Logik, sonst wirst Du mit solchen Konstrukten nie fertig.
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Thomator am 07.02.05 - 14:51:36
Hi fidel,

das war so gemeint:

@IsNotMember("[cars]";@UserRoles)) & (RessourceName="Firmenwagen1" |  RessourceName="Firmenwagen2" | RessourceName="VW Transporter"); ...

Unabhängig davon solltest Du den Rat mit dem Buch über formale Logik wirklich befolgen, sonst bekommst Du in der Entwicklung von Software keinen Fuß auf den Boden  8)

Thomas
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: FideL am 07.02.05 - 15:18:54
Hallo alle zusammen!
Vielen Dank erst mal für eure Hilfe.
Ich habe nun eine Lösung die weitaus simpler
ist als etwas zu programmieren. Es gibt in der
Ressourcen DB die Möglichkeit auf dem Reiter Besitzeroptionen
die Personen einzutragen, die das Recht zu buchen bekommen
sollen.
Trotzdem noch mal vielen Dank an alle die mir hier Ratschläge gegeben haben. Wird mir sicher noch weiterhelfen. Den Ratschlag werde ich befolgen ;)
Gruß Fidel
Titel: Re: Problem mit Userroles + Reservierung :(
Beitrag von: Roalf am 07.02.05 - 16:59:12
noch'n kleiner Tipp:

beim Vegleichen von mehreren Varianten bietet sich tätsächlich die Liste an.

also:
compare_lst := "a" : "b" : "c";
tst := "a"
@if( tst = compare_lst; ...tue was; ...tue was anderes);


diese Beispiel funktioniert solange wie tst nicht selber eine Liste ist.
Wenn tst aber selber eine Liste ist, muss der "Permutativvergleichsoperator" her (  *= ). Und da der beim o.g. Beispiel funktioniert empfehle ich ihn einfach "default" zu benutzen....es kann einem später böse überraschungen ersparen.

also immer  "tst *= compare_lst"  statt "tst = compare_lst".


* <Ironie> ich liebe solche Wortungetüme wie "Permutativvergleichsoperator"....wie anders kann ein Profi effektiver einen Laien beeindrucken als durch solche erfurchtgebietenden Wortpanzer </ironie>