Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: snore am 13.01.14 - 19:35:44

Titel: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag 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
 ::)
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: WildVirus am 13.01.14 - 21:03:35
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
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: thkn777 am 14.01.14 - 16:55:24
@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.
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: snore am 27.01.14 - 17:13:52
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

Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: WildVirus am 27.01.14 - 20:19:04
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
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: koehlerbv am 27.01.14 - 21:24:18
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
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: pram am 27.01.14 - 21:52:26
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
Titel: Re: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen
Beitrag von: snore am 31.01.14 - 10:53:03
...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