Autor Thema: Beim Speichern ein Feld in eine andere Maske/Dokument übertragen  (Gelesen 3118 mal)

Offline snore

  • Aktives Mitglied
  • ***
  • Beiträge: 107
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
 ::)

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
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

Offline thkn777

  • Aktives Mitglied
  • ***
  • Beiträge: 176
@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.

Offline snore

  • Aktives Mitglied
  • ***
  • Beiträge: 107
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


Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline snore

  • Aktives Mitglied
  • ***
  • Beiträge: 107
...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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz