Hab' noch ein wenig dran gefeilt...
(Hübsche Trennlinie usw. (s. Edit))
Hab' noch ein wenig dran gefeilt...
(Hübsche Trennlinie usw. (s. Edit))
Tach Timo,
und, hat's geklappert?
Für alle Fälle - hier ein kompletter Agent, sogar getestet...
Eine etwas andere Lösung mit der bequemen Mail-DB-Auswahl.
[color=006600]Sub Initialize
'Agent (Agent_Signatur)
Dim nuiws As New notesuiworkspace
Dim ndoc As notesdocument
Dim dc As notesdocumentcollection
Dim xAdressbuch As String
Dim ns As New NotesSession
Dim mailDb As NotesDatabase
Dim mailprof As NotesDocument
Dim xServer As String
Dim xDB As String
Dim fileNum As Long
xServer = ns.Currentdatabase.Server
xAdressbuch = "names.nsf"
fileNum = Freefile()
Open "c:\test.txt" For Output As fileNum
Set dc = nuiws.PickListCollection(PICKLIST_CUSTOM, True, xServer, xAdressbuch, "Personen", "Mail-Datenbanken", "Wählen Sie..." )
Set ndoc = dc.getfirstdocument
While Not ndoc Is Nothing
xDB = ndoc.MailFile(0) + ".nsf"
Set mailDb = ns.GetDatabase( xServer, xDB, False )
'Auf diese DB muss der Script-Ausführer min. die Leserechte haben!
Set mailprof = maildb.GetProfileDocument("CalendarProfile") 'Benutzer-Profil, auf dieses Doc muss der Script-Ausführer min. die Leserechte haben!
Print #fileNum, mailprof.Signature(0); '<-- Dieser Befehl überträgt den Inhalt des Text-Feldes in die Textdatei mit ; als Trennzeichen
Print #fileNum,"" '<-- Dieser Befehl erstellt den Zeilenumbruch in der Textdatei, damit der nächste Datensatz in die neue Zeile kommt
Print #fileNum,"" '<-- und noch eine leere Zeile
Print #fileNum, Ustring$(80,"|") '<-- irgendeine Trennlinie
Print #fileNum,"" '<-- und noch eine leere Zeile
Set ndoc = dc.getnextdocument(ndoc)
Wend 'Not ndoc Is Nothing
Close fileNum
End Sub[/color]
[/color][color=000099]Edit 25.09.07 13:40:[/color] Print wurde in die Schleife verlagert; nicht das Feld Signature_1 sondern das berechnete Feld Signature wird wegexportiert.
So, jetzte aber Schluß, muss heute noch was arbeiten!
[Blockierte Grafik: http://lexass.spb.ru/smilies/kos.gif]
Dirk war schneller...
[Blockierte Grafik: http://lexass.spb.ru/smilies/ven.gif]
Mein Script würde so ähnlich aussehen, aber ich würde vor jedem Export die alte txt-Datei killen...
[color=000099]Dim xTextDatei As String
Dim fileName As String
Dim fileNum As Long
xTextDatei = "Pfad\Dateiname.txt"
fileName = Dir$(xTextDatei, 0)
If Not fileName ="" Then
Kill xTextDatei
End If[/color]
...
Dim ns As New NotesSession
Dim mailDb As NotesDatabase
Dim mailprof As NotesDocument
Dim xUserSignatur As String
Dim xServer As String
Dim xDB As String
%REM
'In einer Schleife (z.B. die DocumentCollection aus dem Adressbuch abarbeiten) xServer und xDB holen, Mail-DB öffnen und die Profil-Daten holen
%END REM
Set mailDb = ns.GetDatabase( xServer, xDB, False )
'Auf diese DB muss der Script-Ausführer min. die Leserechte haben!
Set mailprof = maildb.GetProfileDocument("CalendarProfile") 'Benutzer-Profil, auf dieses Doc muss der Script-Ausführer min. die Leserechte haben!
xUserSignatur = xUserSignatur + Chr(13) + Chr(13) + mailprof.Signature_1(0)
...
Alles anzeigen
Wie du die Textdatei mit diesen Strings erstellst, weißt du?
Tja, bei mir ist's noch sehr übersichtlich und es sind insgesamt 33 und nicht 29 Beiträge...
Gruß
Laura
[Blockierte Grafik: http://lexass.spb.ru/smilies/nap.gif]
P.S. Mit diesem da 34 und nicht 30
Ach so, lass mich raten...
Im Knopf steckt @Command([MailForward])...
Und die Standard Diskussions-DB wird als Formular-Sammlung benutzt.
Michael, dafür ist Lotus Notes fast zu schade...
Dabei kann man auch ohne Script, nur mit der Formelsprache tolle Sachen machen.
Nur Mut!
Ich hoffe, ich habe die Frage richtig verstanden...
Die Lösung:
nicht am Body-Feld in der Mail-Maske rummanipulieren,
sondern in der Krankmeldung-Maske zwei "Berechnet beim Anlegen" Felder erstellen,
eins mit @Today (vom Typ Datum),
eins mit @Name([CN];@UserName) (vom Typ Text)
Fertig!
Ohhh, wie goldig, ich bin mit meinen 0 Beiträgen auf Platz 9!
[Blockierte Grafik: http://lexass.spb.ru/smilies/bis.gif]
Hallo lapfandi,
Hat der User mit der Rolle [AL] die Manager-Rechte?
(Nur die Manager dürfen die ACL verändern!)
Wenn ja, dann versuch' doch mal nach EnableRole und DisableRole die ACL zu save'n...
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc=ws.CurrentDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Set db=session.CurrentDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Set acl = db.ACL
Set entry = acl.GetEntry( session.UserName )
If entry.IsRoleEnabled("[AL]") Then
If Not entry.IsRoleEnabled( "[Problemstatus]" ) Then
Call entry.EnableRole( "[Problemstatus]" )
[color=0000FF]Call acl.save[/color]
Call uidoc.FieldSetText("Problemstatus","angefordert")
Call entry.DisableRole( "[Problemstatus]" )
[color=0000FF]Call acl.save[/color]
End If
Bin nicht sicher, ob's dann funzt.
Aber probieren kann man es doch...
[Blockierte Grafik: http://lexass.spb.ru/smilies/poz.gif]
[color=0000CC][size=medium]Alles Gute![/size][/color]
LG, Laura
Hat der User den Zugriff auf diese Ansicht?
Guck mal in den Eigenschaften, wer diese Ansicht verwenden darf...
Es stimmt, danke für die Ergänzung! (Obwohl ich denke, Bobby wäre selbst drauf gekommen ;o)
Vielleicht hat er ganz einfache "Bäumchen", nur eine Antwortebene...
Hallo Bobby,
brauchst du wirklich nur die Anzahl der Antwort-Dokumente im Hauptdokument, mit der du rechnen kannst?
Wie oft ändert sich diese Anzahl?
Ist die Datenbank auf mehreren Server repliziert?
Wenn nicht sehr oft und es gibt keine Repliken, dann würde ich folgendes machen.
1. Statt einem berechneten Feld mit DbLookup ein "berechnet beim Anlegen" Feld "XY" vom Typ Zahl mit dem Wert 0 erstellen.
2. Nach dem Speichern von Antwort-Dokument einen Script (Beispiel s. unten) laufen lassen, der das Parentdoc zu diesem Antwort-doc sucht.
3. Parentdoc.XY = Parentdoc.Responses.Count
4. Parentdoc speichern
Fertig!
P.S. Nicht vergessen, die direkte Löschung von Dokumenten sollte man dann im Datenbankscript verbieten. Statt dessen einen Button "Löschen" anbieten, der einen Agent ausführt, der unter anderem auch den Parentdoc sucht und nach der Löschung vom Antwort-doc das Feld XY aktualisiert.
Viel Erfolg!
Function Search_Parentdoc ( doc As NotesDocument ) As NotesDocument
%REM
Ermittlung von Hauptvorgang höchster Ebene (Elternteil vom doc)
Bei der Baumstruktur
AAA
BBB
CCC
findet diese Funktion immer AAA, egal ob aus AAA, BBB oder CCC gestartet!
======================================================
-------------------------------------------------------------------------------------------------------------
Parameter:
doc
-------------------------------------------------------------------------------------------------------------
Rückgabewert:
Der angeforderte Hauptvorgang höchster Ebene, ansonsten doc selbst
-------------------------------------------------------------------------------------------------------------
%END REM
Dim ns As New NotesSession
Dim db As NotesDatabase
Dim suchdoc As NotesDocument
Dim Parentdoc As NotesDocument
Dim xKey As String
' -------------------------------------------------------------------------------------------------------------
Set db = ns.CurrentDatabase
Set suchdoc = doc
' -------------------------------------------------------------------------------------------------------------
xKey = doc.ParentDocumentUNID
If Not xKey = "" Then 'doc ist ein Antwort-Doc
Set Parentdoc = db.GetDocumentByUNID(xKey) ' Finden das "Eltern"-Dokument
If Not Parentdoc Is Nothing Then 'Parentdoc gefunden
Set suchdoc = Search_Parentdoc (Parentdoc) 'Prüfen, ob dieses Parentdoc auch "Eltern" hat
Else 'Not Parentdoc Is Nothing << Parentdoc existiert nicht
'nix machen
End If 'Not Parentdoc Is Nothing
End If 'Not xKey = ""
Set Search_Parentdoc = suchdoc
End Function
Alles anzeigen
Bist du sicher, dass bei der Beschriftung "Suchen" wirklich in den Hochkommas steht?
Das ist eine Formel, evtl. kann Notes mit der Formel
nichts anfangen...
Und der Name der Aktion wird nur dann angezeigt, wenn die Beschriftung leer ist. (Der Name der Aktion wird übrigens ohne Hochkommas geschieben...)
Edit:
...[color=990033]geschieben[/color]?
Nee, [color=330099]geschrieben[/color]!
...oder doch, geschoben?
Deutsche Sprache - schwere Sprache...
spiderman
Was meinst du, woher ich das weiß...
Bin selbst schon auf die Nase gefallen...
Freut mich, dass es geklappt hat.
Schönes WE!
Ist das doc beim Weitersenden auch noch im Frontend (zum Editieren) geöffnet?
Wenn es so ist, dann kann der User das im Backend geänderte Dokument nicht mal speichern, kriegt eine nette Meldung, dass ihm die Rechte fehlen...
Hab' so eine Erfahrung gemacht, die Lösung war: nicht im Weitersenden-Agent, sondern beim Querysave die Rechte verändern / wegnehmen.
Nur so ein Tipp, vielleicht hilft's...
Ach so, jetzt verstehe ich...
Dann klick doch bei den Maskeneigenschaften die Option
"Felder automatisch aktualisieren" an.
OK, das ist das komplette Code für das kritische Feld.
User kann das Feld nicht verlassen, wenn er die leere Zeilen nicht löscht.
Sub Exiting(Source As Field)
Dim ws As New NotesUIWorkspace
Dim doc As notesdocument
Dim uidoc As NotesUIDocument
Dim xWert As String
Set uidoc = ws.CurrentDocument
Set doc=uidoc.Document
'Prüfung, ob es in diesem Feld leere Zeilen gibt
Set uidoc = ws.CurrentDocument
Set doc=uidoc.Document
xWert = uidoc.FieldGetText("Feldname")
If Textfeld_Kontrolle_Leere_Zeilen (xWert) = 1 Then
Msgbox "Bitte löschen Sie leere Zeilen in diesem Feld!",64, "Warnung! In diesem Feld sind leere Zeilen nicht erlaubt!!!"
uidoc.GoToField ("Feldname")
Else 'Textfeld_Kontrolle_Leere_Zeilen (xWert) = 1
doc.Feldname = Trim(doc.Feldname(0)) 'Leerzeichen werden auch gelöscht
End If 'Textfeld_Kontrolle_Leere_Zeilen (xWert) = 1
End Sub
Alles anzeigen
(Für die Prüfung auf 42 Zeichen baust du am besten eine Extra-Function, die auch 1 liefert, wenn die Länge > 42 ist.)
...mit Hide when Formeln!?
Hacken setzen bei "Absatz verbergen, wenn Formel wahr" und die Formel dazu, z.B.
Status = "blabla"
Oder habe ich die Frage nicht verstanden?
Schau mal da...
http://www.dominoforum.de/modu…t_id=89537#forumpost89537
Kannste bisschen verändern und deine User erziehen...
LG, Laura