Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: snore am 13.01.14 - 19:35:44
-
Servus,
ich möchte von einer Maske "B" (hier werden laufend neue Dokumente erstellt) das Datum beim Speichern in die Maske "A" mit den Stammdaten = bereits bestehende Dokumente (ca. 50 Stück) übernehmen. Das ganze in Abhängigkeit eines Schlüsselwortes, welche in beiden Masken identisch ist und in den Dokumenten von "A" nur immer in einem Dokument vorkommt...
Kann mir da jemand helfen - oder einen Ansatz geben ?!
Danke
snore
::)
-
Hallo Snore,
Maske = Design
Dokument = Daten
Du möchtest aus Deinem geöffneten Dokument (gestaltet mit Maske "B") einen Wert in 1-n Dokument(e) schreiben, die mit Maske "A" erzeugt wurden.
Das geht mit Script recht einfach, in dem Du nach Form = "A" und Feld = "X" suchst. Feld = Feldname in dem bei Nutzung von Maske "A" der Suchwert gespeichert wird und "X" ist der Suchwert.
Dann bekommst Du eine DocumentCollection mit 1-n Dokumenten, die Du dann ändern kannst.
CU,
Axel
-
@Snore
kleine Ergänzung zur vorigen Antwort:
1. Suchansicht bauen
Selektiere alle Dokumente mit Form="A". Eine Spalte reicht, dort kommt Dein Schlüsselwert rein. Wichtig: diese Spalte muß sortiert sein.
2. Action-Button (LotusScript) in Deiner Maske B anlegen (zum Testen/Herumspielen)
Lies in der Notes Developer Hilfe die Beispiele zur GetDocumentByKey Methode der NotesView Klasse und benutze die Beispiele in diesem ActionButton.
Du soltest damit in der Lage sein, EIN Dokument (das erste) aus der Liste aller "A" Dokumente zu finden in Abhängigkeit des Schlüsselwertes.
3. Falls es mehrere "A"-Dokumente mit gleichem Schlüsselwort gibt, dann folgt der Wechsel von GetDocumentByKey zu GetAllDocumentsByKey und der von WildVirus schon angesprochenen NotesDocumentCollection. Am besten auch hier mal die Beispiele aus der DeveloperHilfe bemühen.
Tip:
Den Button zum Schluß natürlich wieder rauswerfen, nachdem Du den getesten Scriptcode an eine andere Stelle verschoben hast (z.B. QuerySave oder QueryClose Event).
Wichtig:
Beim Updaten der "A"-Dokumente darauf achten, ob sich diese im Zugriff befinden, um Speicherkonflikten aus dem Weg zu gehen!
Viel Erfolg.
-
Servus,
ich bin schon weit gekommen mit meinen Script-Kenntnissen......
Aber noch folgende Bitte:
-> kann mal jemand über das Script schauen und überflüssige Zeilen entfernen (evtl. mit kuzer Begründung)
-> ich muss den Datumswert ohne ZEIT übergeben ... das bekomm ich einfach nicht hin..
Danke
snore
Sub Initialize
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim Key As String
Set uidoc = workspace.CurrentDocument
Print Cstr("Start Kontrolleintrag .....")
Key = uidoc.FieldGetText( "Feldname" )
Print Cstr(("Filiale=Key setzten: ") & (key))
Set db = session.CurrentDatabase
Set view = db.GetView ("(Ansicht für Hinweismailversand)" )
Set doc = view.GetDocumentByKey (Key)
Dim Datum As New NotesDateTime(Now)
Call Datum.setAnyTime()
If Not (doc Is Nothing) Then
Print "Key über Ansicht gefunden - Wert kann geschrieben werden"
Else
Messagebox "Achtung: Der Kontrolleintrag konnte nicht vollständig gespeichert werden - ...."
End If
doc.DatumderletztenKontrolle =????wie übergebe ich hier das aktuelle Datum ohne Zeit ???
Call doc.save (False, False)
End Sub
-
Guten Abend,
Servus,
????wie übergebe ich hier das aktuelle Datum ohne Zeit ???
Du möchtest Dir m.E. die Klasse NotesDateTime in der Hilfe durchlesen.
CU
Axel
-
Und was heisst überhaupt "ohne Zeit"? Das ist Quatsch und das gibt es real gar nicht.
Zum Datumswechsel ist der Datumswert eine ganze Zahl, bis zum nächsten Datumswechsel wird das Datum durch reelle Zahlen dargestellt.
Bernhard
-
Und was heisst überhaupt "ohne Zeit"? Das ist Quatsch und das gibt es real gar nicht.
Jein. Ohne "Zeit" heißt m.E. "NotesDateTime.setAnyTime" und hat durchaus seine Berechtigung.
Denk z.B. mal an Fest/Feiertage. Es wäre ja blöd, wenn man den 31.12.2013 mit Zeitkomponente 00:00 Uhr abspeichert, da Notes in einer anderen Zeitzone dann den 30.12.2013/23:00 zurückgibt. (SetAnyTime entfernt auch die Zeitzone)
Oder an ganztägige Termine.
(wobei sich hier Notes auch eine Sonderlösung einfallen lassen hat, und diese von 04:00-20:00 Uhr anlegt, vermutlich weil die Zeitdifferenz von Ostküste zur Westküste der USA 4h beträgt)
Man muss sich halt immer Gedanken machen, was würde passieren, wenn ich den Zeitpunkt mit abspeichere und die Zeitzone ändere und dann entscheiden, was ist richtig(er)
Gruß
Roland
-
...ich hab's nun so gelöst:
Grund: Damit mein zweiter Agent w/ Hinweismails die Dokumente der Stammdaten mit diesem Datumsfeld älter 30 Tage ermitteln kann....
Sub Initialize
Dim session As New NotesSession
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim doc As NotesDocument
Dim Key As String
Dim Datum As New NotesDateTime(Today)
Set db = session.CurrentDatabase
Set view = db.GetView ("(Ansicht für Hinweismailversand)" )
Set uidoc = uiws.CurrentDocument
Key = uidoc.FieldGetText( "KontrolleFiliale" )
Set doc = view.GetDocumentByKey (Key)
Print {"START: Speichern des Kontrolldatums in der Datenbank...."}
Print "Das heutige Datum ermitteln: " & Datum.DateOnly
If Not (doc Is Nothing) Then
Print "Filiale >> " & CStr(key) &_
" << in der Suchansicht gefunden - Wert kann geschrieben werden"
Else
MessageBox "Achtung: Der Eintrag konnte nicht ordnungsgemäß" & Chr$ (10) &_
"gespeichert werden, Bitte wenden Sie sich an ...."
Print {"Logeintrag: Die Filiale konnte nicht aus den
Stammdaten zugeordnet werden - das Datum wurde nicht gespeichert - ENDE"}
GoTo p_ende
End If
Print "Das Datum als Text an das Stamm-Daten-Dokument übergeben ...."
doc.DatumderletztenKontrolle =Datum.DateOnly
Print "Das gewählte Dokument aktualisieren und den Datumswert als DATUM ohne Gänsefüsschen speichern"
If doc.ComputeWithForm(True, True) Then
Call doc.Save(True, False)
Print "Datum erfolgreich aktualisiert - ENDE"
Else
Print "Fehler beim Aktualisieren des Stamm-Dokuments - ENDE"
End If
p_ende:
End Sub
Gruß
snore