Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: macom111 am 10.04.07 - 17:03:11

Titel: @Promt Fehlermeldung
Beitrag von: macom111 am 10.04.07 - 17:03:11
Hallo zusammen,

ich möchte das ausfüllen eines Urlaubscheines in Notes bereitstellen.
Das ganze muß nicht sehr Aufwendig sein, es soll nur den schriftlichen Urlaubsschein ersetzen.

Unter anderm gibt es 4 Felder:
Name, Typ: Autoren, Berechnet beim anlegen
User1, Typ: Namen, Bearbeitbar
User11; Typ: Namen, Berechnet - @SetField ("User11"; User1), verborgen
Genehmigt: Typ: Namen, Bearbeitbar

Es gibt 2 Aktionen:
Senden Antragsteller -

_mailempfaenger := User1; SendTo;

@MailSend(_mailempfaenger; ""; ""; "Urlaubsantrag"; "Sie erhalten soeben einen neuen Urlaubsantrag."
      + @NewLine +
            "Bitte klicken Sie auf die Verknüpfung um das Dokument zu öffnen."; "";
      [IncludeDoclink]);
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow])


Senden Vorgesetzter -

_mailempfaenger := Name; SendTo;

@MailSend(_mailempfaenger; "xxxxxxxxxxx"; ""; "Urlaubsantrag"; "Sie erhalten soeben die Bestätigung od. Ablehnung Ihres Urlaubsantrages."
      + @NewLine +
            "Bitte klicken Sie auf die Verknüpfung um das Dokument zu öffnen."; "";
      [IncludeDoclink]);
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow])

Im Feld „User1“ trägt der Antragsteller den Namen des Empfängers (Vorgesetzer) ein und klickt dann auf „Senden Antragsteller“.

Der Empfänger (Vorgesetzter), trägt im Feld „Genehmigt“ seinen Namen ein und klickt auf „Senden Vorgesetzter“. Die Mail geht zurück an den Absender (Feld "Name"), eine Kopie wird dabei an die Buchhaltung gesendet (der Empfänger ist vorgegeben).
So weit, so gut. So funktioniert´s.

Ich möchte noch prüfen, ob in den Feldern „User1“ und „User11“ auch wirklich 2x der selbe Name steht und erweitere die Formel der Aktion „Senden Vorgesetzter“:

@If (User11 != User1; @Return (@Prompt ([Ok]; "Info"; "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"));

_mailempfaenger := Name; SendTo;

@MailSend(_mailempfaenger; "xxxxxxxxxxxxx"; ""; "Urlaubsantrag"; "Sie erhalten soeben die Bestätigung od. Ablehnung Ihres Urlaubsantrages."
      + @NewLine +
            "Bitte klicken Sie auf die Verknüpfung um das Dokument zu öffnen."; "";
      [IncludeDoclink]);
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow]))

Obwohl die Namen in beiden Feldern übereinstimmen, kommt die Promt-Meldung!  ???

Jetzt dachte ich mir, als Test soll die Meldung erscheinen, wenn beide Namen stimmen.
@If (User11 = User1;.........

Die Fehlermeldung: Falscher Datentyp für Operator oder @Funcktion: Zahl erwartet  ???

Wo bitte mache ich einen Fehler?

Vielen Dank schon mal für Eure Hilfe.

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 10.04.07 - 17:16:41
Warum setzt Du "User1" in Anführungszeichen?
Laut Deinem Code vergleichst Du den Inhalt des Feldes User11 mit dem String "User1" (der mit dem Inhalt des gleichnamigen Feldes soviel zu tun hat wie ein Atom-Uboot mit einer Knoblacuhzehe).

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 10.04.07 - 17:27:15
Anführungszeichen weg!
Funktioniert aber auch nicht.
Auch hier die Fehlermeldung: Falscher Datentyp für Operator oder @Funcktion: Zahl erwartet

Was für eine Zahl ???

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 10.04.07 - 17:34:12
Und was steht laut Document properties in den Items User 1 und User11? Das ist schwer von hier aus zu beurteilen ...

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 10.04.07 - 17:52:58
Da ich nicht weiss, wie der aktuelle Code jetzt aussieht: Mit höchster Wahrscheinlichkeit hat das mit dem Fehler nichts zu tun, aber

Code
_mailempfaenger := User1; SendTo
ist falsch! SendTo erwartet Text oder eine Textliste, also entweder
User1
oder
User1 : SendTo

Die DesignerHelp ist da nun wirklich sehr hilfreich.

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 10.04.07 - 22:41:23
Und was steht laut Document properties in den Items User 1 und User11? Das ist schwer von hier aus zu beurteilen ...

Es steht in beiden Items der selbe Name.
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 10.04.07 - 22:44:43
Ich bitte vielmals um Entschuldigung, aber ich habe in meinem ersten Posting was falsch beschrieben. Auch habe ich noch was ergänzt, was vielleicht "sachdienlich" sein könnte.
Bitte nochmal durchlesen.

Vielen Dank.

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 10.04.07 - 23:16:15
Bitte nochmal durchlesen.

Also ich werde das jetzt ganz bestimmt nicht erneut durchflöhen, um aus der Erinnerung die Unterschiede zu erkennen.

Wenn Du Hilfe brauchst, postet Du am besten folgendes:
- Genau die eine Codezeile (komplett!), in der der Fehler gemeldet wird.
- Die exakten Inhalte der Felder User1 und User11
Und der Fehler sollte genau durch diesen Einzeiler nachvollziehbar sein - hierzu also bitte einen entsprechenden Agent bauen, der nur auf dem fehlerprovozierenden Code basiert und nichts anderes posten.

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: m3 am 10.04.07 - 23:22:13
1) Bitte nicht Postings modifizieren, wenn schon darauf bezug genommen wurde, da kommen alle durcheinandern. Besser nochmal posten, wenn Du Änderungen vorgenommen hast.

2) Poste bitte RICHTIGEN Code. Der von Dir muss schon bei einem Speicherversuch der Maske im Designer einen Fehler schmeissen.

a) Das If-Statement für den Prompt:
@If ( User11 != User1;
        @Return (
            @Prompt ( [Ok]; "Info";
                      "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"
                    )
                );

Hier fehlt
i) Der Else-Zwieg des @If
ii) Die schließende Klammer des @If

b) _mailempfaenger := Name; SendTo;
Sollte _mailempfaenger einen Multivaluewert enthalten, müssen die Werte durch ":", nicht durch ";" getrennt werden.
Wenn Du in _mailempfaenger einen String speichenr willst und in diesem die Werte von name und SendTo durch ein ";" getrennt werden soll, musst Du ein paar Stringoperationen "drüberstreuen".

c) Vergleich "User11 != User1"
Wenn User1 oder User11 Multivalue-felder ist/sind, funktioniert der Vergleich so nicht.


So, vergiss alles, was ich da oben gschrieben habe. Mir graut fürchterliches.
Kann es sein, dass Du "früher" C oder VB oder so etwas programmiert hast? Dann bist Du vermutlich Konstrukte wie
Code
If total = firstnum + secondnum And Val(sum.Text) <> 0 Then
    correct.Visible = True
    wrong.Visible = False
Else
    correct.Visible = False
    wrong.Visible = True
End If
gewohnt, bei denen man unterhalb des IF bzw. ELSE mehrere Statements anbringen kann.

Dem ist in @-Formelsprache nicht so. Für die Aktion im IF bzw. ELSE Fall ist genau EINE Aktion vorgesehen.
Dein Plan, das
Code
_mailempfaenger := Name; SendTo;
@MailSend...
in den "ELSE" Zweig zu hängen, kann IMHO so nicht klappen. Dafür willst Du Dir @Do ansehen.

Oder Du ziehst alle "Berechnungen", die Du für das @MailSend brauchst aus dem @ELSE-Zweig vor das @IF.
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 12.04.07 - 18:02:34

So, vergiss alles, was ich da oben gschrieben habe. Mir graut fürchterliches.
Kann es sein, dass Du "früher" C oder VB oder so etwas programmiert hast?


Leider NEIN. Bin froh, wenn ich mit den @Funktion zurechtkomme!

Poste jetzt nochmal neu und hänge eine TestDB an.
Der Fehler ist vermutlich ganz einfach, aber ich sehe ihn einfach nicht.

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 12.04.07 - 18:05:38
Also,

hier nochmal das ganze mit einer TestDB im Anhang (ich denke, das ist wohl das beste) und der richtigen Erklärung:

Unter anderm gibt es 4 Felder:
Name, Typ: Autoren, Berechnet beim anlegen
User1, Typ: Namen, Bearbeitbar
User11; Typ: Namen, Berechnet - @SetField ("User11"; User1)
Genehmigt: Typ: Namen, Bearbeitbar

Es gibt 2 Aktionen:

Senden Antragsteller -    Funktioniert einwandfrei!


Senden Vorgesetzter -

Im Feld „User1“ trägt der Antragsteller den Namen des Empfängers (Vorgesetzer) ein und klickt dann auf „Senden Antragstellter“.

Der Empfänger (Vorgesetzter), trägt im Feld „Genehmigt“ seinen Namen ein und klickt auf „Senden Vorgesetzter“. Die Mail sollte zurück an den Absender gehen (Feld "Name").

Die Fehlermeldung: Falscher Datentyp für Operator oder @Funcktion: Zahl erwartet 

Lasse ich die Anweisung

@If (User11 != User1; @Return (@Prompt ([Ok]; "Info"; "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"));

weg, funktioniert´s.

Wo bitte mache ich den Fehler?

Vielen Dank schon mal für Eure Hilfe.

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 12.04.07 - 18:09:13
Wo ist denn in der Zeile (ohne die es klappt) zum @If der Else-Zweig? Schweinerei, das der R6-Designer das abnimmt, aber ...

@If (User11 != User1; @Return (@Prompt ([Ok]; "Info"; "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"); "");
wäre syntaktisch korrekt.

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: macom111 am 12.04.07 - 18:55:58
Stehe gerade im Badezimmer beim Umziehen und dabei kommt mir ein schrecklicher Gedanke:  ???

Und tatsächlich.... meine Vermutung hat sich bestätigt:

In der Aktion Vorgesetzter stehht

@If (User11 != User1; @Return (@Prompt ([Ok]; "Info"; "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"));

_mailempfaenger := Name; SendTo;

@MailSend(_mailempfaenger; "Tobias Roth/GRUMA/DE"; ""; "Urlaubsantrag"; "Sie erhalten soeben die Bestätigung od. Ablehnung Ihres Urlaubsantrages."
      + @NewLine +
            "Bitte klicken Sie auf die Verknüpfung um das Dokument zu öffnen."; "";
      [IncludeDoclink]);
@PostedCommand([FileSave]);
@PostedCommand([FileCloseWindow]))


_mailempfaenger := Name; SendTo;
muß in der ersten Zeile stehen und nicht wie bei mir nach der @IF - Anweisung.

So was blödes auch  >:(

Danke Euch trotzdem für Eure Bemühungen!

Gruß Siggi
Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 12.04.07 - 21:15:01
Irgendwie kommt hier immer mehr syntaktisch falsches zum Vorschein!

Code
_mailempfaenger := Name; SendTo;

Das sind zwei getrennte Formel-Terme! Das Zeichen ";" trennt Parameter (hier nicht erforderlich und daher komplett falsch).
Ich vernmute mal, dass der Inhalt der Felder "Name" und "SendTo" der Variablen "_mailempfaenger" zugewiesen werden sollen.

Und das müsste dann heissen:

_mailempfaenger := Name: SendTo;

Ich empfehle das gründliche Studium der DesignerHelp.

Bernhard
Titel: Re: @Promt Fehlermeldung
Beitrag von: m3 am 12.04.07 - 23:50:11
So, ich hab mir das jetzt mal im Detail herausgeholt:

Code
01 @If( User11 != User1; 
02            @Return (@Prompt ([Ok]; "Info"; "Sie sind nicht Unterschriftsberechtigt, da Sie nicht der richtige Empfänger dieser Mail sind !"));
03     _mailempfaenger := Name; 
04            SendTo;
05     @MailSend(_mailempfaenger; ""; ""; "Urlaubsantrag"; "Sie erhalten soeben die Bestätigung od. Ablehnung Ihres Urlaubsantrages." + @NewLine + "Bitte klicken Sie auf die Verknüpfung um das Dokument zu öffnen."; ""; [IncludeDoclink]);
06            @PostedCommand([FileSave]);
07     @PostedCommand([FileCloseWindow])
08   )

Dieses @IF-Konstrukt ist durchaus "valide", Bernhard, auch wenn dies a) nur durch Zufall und b) haarstäubend ist.

Es besagt nämlich aus, dass
a) Wenn User11 != User1 (Zeile 01) ist, der @Return Befehl in Zeile 02 ausgeführt wird
b) Wenn die ZUWEISUNG "_mailempfaenger := Name;" in Zeile 03 erfolgreich ist, "das Feld SendTo 'ausgeführt'" wird (Zeile 04, was immer dann auch passiert)
c) Wenn der @MailSend-Befehl in Zeile 05 erfolgreich war, wird @PostedCommand([FileSave]); (Zeile 06)ausgeführt
d) Wenn das alles nicht klappt, wird - als ELSE - @PostedCommand([FileCloseWindow]) in Zeile 07 ausgeführt.

Syntaktisch korrekt, inhaltlich komplett gaga.  ;D  ;)


Titel: Re: @Promt Fehlermeldung
Beitrag von: koehlerbv am 13.04.07 - 00:01:06
Danke, Martin. Mir war das zwar klar, dass Fehler 1 nur durch Fehler 2 und der durch Fehler 3 kompensiert worden sein könnte, aber ich hatte heute einfach nicht die Zeit, das durchzusehen und die konkrete Stelle auch noch herauszusuchen. Daher habe ich immer auf DIE fehlerhafte Zeile gepocht, die ja Siggi gezwungen hätte, den Code mal wirklich auseinander zu nehmen.

Irgendwie bin ich mir mittlerweile sicher, dass Siggi (und seine Firma) seit langer Zeit aus prinzipiellen Fehlern nichts lernt. Man kann doch nicht ewig friggeln ...

Bernhard