Beiträge von bhort

    Es hängt ein wenig davon ab, welchen Zweck Deine Maske erfüllt.


    Wenn es nur darum geht, dass um die Ansicht herum z.B. Navigations-Elemente vorhanden sind, kannst Du eine Maske
    $$ViewTemplate For <Ansichtsname>
    bauen. In die Maske kommt an der Stelle, wo die Ansicht erscheinen soll, ein Feld $$ViewBody.


    Wenn die Ansicht nun über einen Link
    http://.../db.nsf/view?OpenView&ExpandView
    geöffnet wird, so werden die Kategorien automatisch "expanded".


    In der Maske kannst Du dann selber entscheiden, welche zusätzlichen Elemente erscheinen sollen.

    Das war natürlich mal wieder der Klassiker. Schnell ein Suchen und Ersetzen gemacht und dabei das Keyword von Name ebenfalls mit ersetzt. :(


    Der folgende Code ist nun richtig.



    _OriginalSentBy := @If(Principal = ""; From; Principal);
    _Name := @Explode( Name([cn];_OriginalSentBy); " ");
    _SentBy := @If(@Elements(_Name) > 1; @Subset(_Name; -1) + (", " + @Implode(@Subset(_Name; @Elements(_Name) -1))); _Name);
    _Who := @If(DeliveredDate != "" | SendTo = ""; _SentBy; @Subset(SendTo; 1));
    _CN1 := @Trim( Name([CN]; _Who));
    _CN2 := @Left(@Right(_Who;"/DDA:");"/" );
    _CN := @If(@Contains(_Who;"/DDA:");_CN2;@Contains(@Right(_Who;"@");">") & _CN1="";@Trim(_Who);_CN1);
    _G := @If(_CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; Name([G]; _SentBy); Name([G]; @Subset(SendTo; 1)))); "");
    _S := @If(_CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; Name([S]; _SentBy); Name([S]; @Subset(SendTo; 1)))); "");
    _Person := @If(_CN != ""; _CN; _G != ""; _G + " " + _S; _S != ""; _S; @Trim(X400FreeForm));
    _Person2 := @If(@Left(_Person;1)="\"" & @Right(_Person;1)="\""; @LeftBack(@RightBack(_Person;1);1); _Person);
    @If(Form = "Delivery Report" : "NonDelivery Report" : "Trace Report" : "Quota Report"; "Mail-Router"; _Person2)

    Ja, der Ordner ($Inbox) ist der Ordner für den Post-Eingang.


    Jedoch sei an dieser Stelle schon einmal die Warnung ausgesprochen, dass Änderungen an der Mail-Schablone nicht ohne sind.


    Das erste Thema ist was passiert mit Updates. Jedesmal, wenn eine neue Domino-Version installiert wird, wird auch die Mailschablone ersetzt. Es kann also gut sein, dass die mühevoll erarbeiteten Änderungen danach weg sind.


    Das zweite Problem besteht darin, dass von Anwendern angelegten Ordnern nicht automatisch das neue Design der Inbox erhalten. Standardmäßig wird zu dem Zeitpunkt, wenn ein neuer Ordner kopiert wird, das aktuell gültige Design kopiert. Es gibt zwar in der Mailschablone die Aktion "Ordnergestaltung aktualisieren". Allerdings muss der Anwender dafür aktiv werden.


    Das ist die Original-Formel aus einer 6er-Mailschablone:

    SentBy := @If(Principal = ""; From; Principal);
    Who := @If(DeliveredDate != "" | SendTo = ""; SentBy; @Subset(SendTo; 1));
    CN1 := @Trim(@Name([CN]; Who));
    CN2 := @Left(@Right(Who;"/DDA:");"/" );
    CN := @If(@Contains(Who;"/DDA:");CN2;@Contains(@Right(Who;"@");">") & CN1="";@Trim(Who);CN1);
    G := @If(CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; @Name([G]; SentBy); @Name([G]; @Subset(SendTo; 1)))); "");
    S := @If(CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; @Name([S]; SentBy); @Name([S]; @Subset(SendTo; 1)))); "");
    Person := @If(CN != ""; CN; G != ""; G + " " + S; S != ""; S; @Trim(X400FreeForm));
    Person2 := @If(@Left(Person;1)="\"" & @Right(Person;1)="\""; @LeftBack(@RightBack(Person;1);1); Person);
    @If(Form = "Delivery Report" : "NonDelivery Report" : "Trace Report" : "Quota Report"; "Mail-Router"; Person2)


    Die für deine Zwecke interessante Zeile ist die erste.

    SentBy := @If(Principal = ""; From; Principal);


    Mit folgender Modifikation sollte der Absender in der gewünschten Form erscheinen:

    _OriginalSentBy := @If(Principal = ""; From; Principal);
    _Name := @Explode(@Name([cn];_OriginalSentBy); " ");
    _SentBy := @If(@Elements(_Name) > 1; @Subset(_Name; -1) + (", " + @Implode(@Subset(_Name; @Elements(_Name) -1))); _Name);
    _Who := @If(DeliveredDate != "" | SendTo = ""; _SentBy; @Subset(SendTo; 1));
    _CN1 := @Trim(@Name([CN]; _Who));
    _CN2 := @Left(@Right(_Who;"/DDA:");"/" );
    _CN := @If(@Contains(_Who;"/DDA:");_CN2;@Contains(@Right(_Who;"@");">") & _CN1="";@Trim(_Who);_CN1);
    _G := @If(_CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; @Name([_G]; _SentBy); @Name([_G]; @Subset(SendTo; 1)))); "");
    _S := @If(_CN = ""; @Trim(@If(DeliveredDate != "" | SendTo = ""; @Name([_S]; _SentBy); @Name([_S]; @Subset(SendTo; 1)))); "");
    _Person := @If(_CN != ""; _CN; _G != ""; _G + " " + _S; _S != ""; _S; @Trim(X400FreeForm));
    _Person2 := @If(@Left(_Person;1)="\"" & @Right(_Person;1)="\""; @LeftBack(@RightBack(_Person;1);1); _Person);
    @If(Form = "Delivery Report" : "NonDelivery Report" : "Trace Report" : "Quota Report"; "Mail-Router"; _Person2)


    Ich verwende die Konvetion, dass temporäre Variablen mit einem Unterstrich anfangen sollten. :)


    Aber wie gesagt, Änderungen an der Mailschablone auf eigenes Risiko. :nono:

    Wenn das Debuggen in der Datenbank stattfindet, wird es keinen Unterschied machen, ob die zugehörige Maske im Domino Designer geöffnet ist. ;)


    Die Probleme beim Debuggen traten bei mir nur dann auf, wenn ich direkt aus der Maske heraus die Debug-Session per Notes-Vorschau gestartet habe.

    Ob Windows nun Standard ist oder nicht sei mal dahingestellt. Fakt ist, dass UNIX-Systeme Char(10) als Zeilenumbruch interpretieren, während DOS/Windows Char(13) + Char(10) erwarten.


    Das Zeichen %0A ist Hexadezimal für Char(10). Theoretisch müßte es also ausreichen, die Zeichen %0A (Char(10)) und %0D (Char(13)) hintereinander zu schreiben.
    In einem Windows-Notes-Client müsste das einen "richtigen" Zeilenumbruch ergeben.


    Soweit zumindest die Theorie. ;)


    Marooke, es wäre nett, wenn Du posten würdest, ob es funktioniert.

    Mal eine blöde Frage. Rufst Du die Maske zum Debuggen aus dem Notes Client oder aus dem Domino Designer heraus auf?


    Mir ist aufgefallen, dass die Events sporadisch nicht beim Debuggen berücksichtigt werden, wenn das Dokument / die Maske aus dem Designer heraus geöffnet wird.

    Eine Lösung mit LotusScript wäre, den Inhalt des Textfeldes in ein nicht bearbeitbares Richtext-Feld zu speichern. Wenn der Link in der Form http://www.... erscheint, wird er automatisch in einen Link umgewandelt.
    Das Richtext-Feld würde ich ausblenden, wenn das Dokument im Bearbeiten-Modus ist.


    Da Manipulationen via LotusScript an einem Richtext-Feld sowieso erst nach dem Speichern und erneuten Öffnen sichtbar werden, würde ich den Code in das QueryClose-Event packen.


    Am geschicksten ist es, bei einer Änderung des Inhaltes des Textfeldes das bestehende Richtext-Feld zu löschen und ein neues anzulegen.


    Eine Lösung ohne LotusScript besteht darin, das Textfeld im Lesemodus auszublenden und an seiner Stelle einen berechneten Text anzuzeigen. Wenn man nun über den berechneten Text einen "Aktion-Hotspot" mit @URLOpen einfügt, fühlt sich es fast wie ein richtiger Link an.

    Wie wäre es die Ansicht mit der URL
    http://.../db.nsf/view?OpenView&ExpandView
    zu öffnen.


    Der Befehl bewirkt das gleiche wie ViewExpandAll in dem Notes Client. Es werden also alle Kategorien aufgeklappt.


    Jetzt muss man nur noch mit CSS die Twisties auf hidden setzen. Dabei kann man sich zu Nutze machen, dass die Grafiken ja in einer Tabelle stecken.

    Der Code sollte funktionieren. ;)


    Erfahrungsgemäß gibt es beim Profile-Dokument Caching-Probleme. Ich habe bei einem Kunden einmal das Problem mit den laufenden Nummer wie folgt gelöst.


    Normales Notes-Dokument mit der letzten Nummer. Das Dokument geöffnet, den Zähler erhöht und dann versucht abzuspeichern mit docNr.Save(False, False). Das erste False bewirkt, dass kein Speichern erzwungen wird und das zweite False sorgt dafür, dass kein Replikationskonflikt erzeugt wird.


    Wenn der Rückgabewert von Save False war, bedeutet es, dass in der Zwischenzeit jemand anders das Dokument gespeichert hat. Ergo die Nummer bereits vergeben ist. Also muss eine neue Nummer vergeben werden.


    Der komplete Code-Abschnitt lautet
    If docNr.Save(False, False) = False Then
    If GetNextNr (strNextNr) = False Then Exit Function
    End If


    Wobei GetNextNr die Function zur Berechnung der nächsten Nummer ist und sich also rekursiv selbst aufruft. Das passiert so lange, bis das Speichern erfolgreich war.

    Moin,


    soweit ich weiß, gibt es keinen Befehl, der die gesamte Ausführung eines Agenten abbricht.


    Ich verwende im Allgemeinem statt Subs eher Functions. Wobei der Rückgabewert True ist, wenn die Function wie erwartet abgearbeitet wurde und der Rückgabewert False ist, wenn etwas unhervorgesehenes vorgefallen ist.


    Jeder Aufruf einer Function passiert nach dem Schema:


    If Unterfunction() = False Then Exit Function


    So kann ich im Fehlerfall an beliebiger Stelle abbrechen und durch die Rückgabewerte sicherstellen, dass die weitere Ausführung gestoppt wird.

    Am einfachsten geht es über die Klasse NotesUIDocument


    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = ws.CurrentDocument

    Call uidoc.FieldAppendText("Body", uidoc.ieldGetText("MailCInfo"))


    Über die Backend-Klasse ist es ein wenig schwieriger, weil "Body" ein Richtext-Field ist. Manipulationen an Richtext-Feldern werden erst sichtbar, wenn das Dokument gespeichert und neu geöffnet wird.