Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet 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
-
Diese Kurznotation
RessourceName="Firmenwagen1" OR "Firmenwagen2" OR "VW Transporter"
geht nicht.
Muss so sein:
RessourceName="Firmenwagen1" OR RessourceName="Firmenwagen2" OR RessourceName="VW Transporter"
-
Hallo, habe den Rat befolgt. Nun bekomme ich allerdings die Fehlermeldung " Ein Operator oder Semikolon wurde erwartet, aber nicht gefunden: 'OR' " ???
gruß fidel
-
.. sollte so gehen :
RessourceName="Firmenwagen1" | RessourceName="Firmenwagen2" | RessourceName="VW Transporter"
und die runden Klammern beachten bei "and" und "or" Verknüpfungen !
klaus
-
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
-
Ach so, das ist ja Formel, da ist der OR Operator | (pipe-Zeichen) und nicht ausgeschrieben
-
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
-
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
-
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
-
AND hat eine stärkere Verknüpfung als OR.
wie bitte?
-
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
-
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
-
Fidel: Schnapp Dir dringend mal ein Buch über formale Logik, sonst wirst Du mit solchen Konstrukten nie fertig.
-
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
-
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
-
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>