Autor Thema: Problem mit LotusScript  (Gelesen 2335 mal)

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Problem mit LotusScript
« am: 26.07.07 - 17:50:12 »
Hallo - ich habe ein Problem, an dem ich bereits seit Stunden sitze und ich verstehs nicht. Hoffe, mir kann irgend jemand erklären, was ich falsch mache!!
Folgendes: in einer DB (R6) existiert ein 1. Hauptdokument mit der Versionsnummer 0 und das Feld Archiv ist auch auf 0. Jetzt passiert folgendes: User sitzt auf Dok in Ansicht, klickt auf Aktion, die per Script eine Kopie des Dokumentes erstellt (dabei ein paar Felder und die ID des zu grunde liegenden Dokumentes füllt und ausliest). Alles wunderbar. In dem neuen Dokument nun gibt es eine weitere Aktion, die die gemachten Änderungen im neuen Dokument sper Script speichert und das Feld Archiv mit dem Wert 1 belegt, so dass das Dok ins Archiv verschoben wird und nur das neue, geänderte Dok noch existent ist. Das klappt alles ganz wunderbar beim erstn Mal. Wenn ich mich nun aber auf das eben erstellte Dokument setzte, welches jetzt die Versionsnr. 1 hat, eine neue Version erstelle (dann also ein neues Dok mit Vers.-nr.2) und dann die Änderungen speichern will, macht er das zwar, setzt mir aber nicht mehr den Wert 1 in das Archiv-Feld des nun zu grunde liegenden Dokumentes. Versteht ihr? Ich hoffe, ich hab mich schlüssig ausgedrückt.
Was mich eben so iritiert, ist, dass es beim erstn Mal funktioniert und ab dann nicht mehr. Werd gleich bekloppt.
Vielen Dank für die Hilfe - ich poste das Script direkt mal dazu:

Sub Click(Source As Button)   
   
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument
   Dim item As NotesItem
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim doc As NotesDocument
   Set doc = uidoc.document
   Dim doc_arch As NotesDocument
   Dim stamm_archiv As String
   Dim resp_item As NotesItem
   Dim i As Integer
   Dim user As String
   
   user=session.commonusername
   i=Messagebox ("Wollen Sie die Änderung speichern?",4,"Änderung speichern")
   If i = 6 Then       
      If doc.KTO(0)<>doc.KTO_1(0) Then
         Messagebox "Überprüfen Sie die Kontonummern auf Übereinstimmung",OK,"Kontonummern stimmen nicht überein!"
         Exit Sub
      Else
         
         If doc.Kennwort(0)<>doc.Kennwort_1(0) Then
            Messagebox "Überprüfen Sie die Kennworte auf Übereinstimmung",OK,"Kennworte stimmen nicht überein!"
            Exit Sub
            
            
         Else   
            
            Dim unitnr As String
            unitnr=doc.docidarchivrev(0)
            
            Set doc_arch = db.GetDocumentByUNID(unitnr)               
            
            doc_arch.stamm_archiv=1
            Call doc_arch.save(True,True)
            
            
            'Hier kommen Belegungen für Autoren-Felder ....
            
            Call uidoc.Save
            Call uidoc.Close
            Call doc.Save(True, True)
            Call doc_arch.save(True,True)
            Call doc.Save(True, True)
            
            
            
         End If
      End If   
   End If
End Sub

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit LotusScript
« Antwort #1 am: 26.07.07 - 18:37:56 »
Was spricht der Debugger?
Steht in doc.docidarchivrev auch die erwartete UuniversalID?

Bernhard

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Re: Problem mit LotusScript
« Antwort #2 am: 26.07.07 - 18:54:56 »
Hallo Bernhard -
Debugger sagt nix, IDs stimmen überein. Das is ja der Witz, dass es beim ersten mal hinhaut, alles was dann kommt, ist ja eigentlich nur eine Wiederholung. Die ID wird einfach immer wieder mitkopiert.
Grüße - Thomas.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit LotusScript
« Antwort #3 am: 26.07.07 - 19:00:20 »
Da der Code nicht vollständig ist (zwischen dem ersten doc_arch.Save und dem zweiten muss ja noch was passieren), wird es schwer, Deinen logischen Fehler von aussen zu entdecken. Der Code, den wir kennen, macht alles richtig (oder ich habe Tomaten auf den Augen).

Mehr Code - oder stell eine abgespeckte Version der DB hier ein, mit der man den Fehler reproduzieren kann. Was anderes sehe ich momentan nicht.

Bernhard

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Re: Problem mit LotusScript
« Antwort #4 am: 26.07.07 - 19:36:43 »
Super - mach ich entweder heute später oder morgen im Laufe des Tages. Vielen Dank fürs schaen auf alle Fälle!
Grüße - Thomas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Problem mit LotusScript
« Antwort #5 am: 26.07.07 - 20:03:40 »
Na dann: Willkommen im Forum, Thomas!

Bernhard

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Re: Problem mit LotusScript
« Antwort #6 am: 27.07.07 - 06:18:24 »
Guten Morgen und vielen Dank.
Anbei der Rest des Codes, es werden aber tatsächlich nur nich ein paar Autorenfelder gesetzt. Ich hatte zwischendurch auch den Effekt, dass das Archiv-Kennzeichen in das aktuelle Dokument geschrieben wird. Aber immer nur bei Versionen größer 1.... Hatte den Eindruck, dass ich mit Front- und Backend durcheinandergeraten bin, aber dann dürfte auch die erste Archiv-Aktion nicht funktionieren. Oder seh ich da was falsch? Wie auch immer: über Hilfe freue ich mich sehr.
Der Code in gänze - bei den Autoren-Feldern hab ich ein bisschen gespielt, aber wie gesagt - die erste Archivierung funktioniert:

Sub Click(Source As Button)   
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.CurrentDocument
   Dim item As NotesItem
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim doc As NotesDocument
   Set doc = uidoc.document
   Dim doc_arch As NotesDocument
   Dim stamm_archiv As String
   Dim resp_item As NotesItem
   Dim i As Integer
   Dim user As String
   
   user=session.commonusername
   i=Messagebox ("Wollen Sie die Änderung speichern?",4,"Änderung speichern")
   If i = 6 Then       
      If doc.KTO(0)<>doc.KTO_1(0) Then
         Messagebox "Überprüfen Sie die Kontonummern auf Übereinstimmung",OK,"Kontonummern stimmen nicht überein!"
         Exit Sub
      Else
         
         If doc.Kennwort(0)<>doc.Kennwort_1(0) Then
            Messagebox "Überprüfen Sie die Kennworte auf Übereinstimmung",OK,"Kennworte stimmen nicht überein!"
            Exit Sub         
            
         Else   
            
            Dim unitnr As String
            unitnr=doc.docidarchivrev(0)            
            Set doc_arch = db.GetDocumentByUNID(unitnr)                  
            
            doc_arch.stamm_archiv=1
            Call doc_arch.save(True,True)
            
            Set item = doc.GetFirstItem ("autoren_1")
            Call item.Remove
            Set item= New NotesItem( doc , "autoren_1" , "[admin]")
            item.IsAuthors = True         
            
            Set resp_item = doc_arch.GetFirstItem ("autoren_1")
            Call resp_item.Remove
            Set resp_item = New NotesItem( doc_arch , "autoren_1", "[admin]" )
            resp_item.IsAuthors=True            
            
            Set item = uidoc.document.GetFirstItem ("autoren_1")
            Call item.Remove
            Set item= New NotesItem( uidoc.document, "autoren_1" , user)
            item.IsAuthors = True
            
            Call uidoc.Save
            Call uidoc.Close
            Call doc.Save(True, True)
            Call doc_arch.save(True,True)
            Call doc.Save(True, True)            
            
         End If
      End If   
   End If
End Sub

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Problem mit LotusScript
« Antwort #7 am: 27.07.07 - 06:56:11 »
Hallo,

Du sagst

Zitat
User sitzt auf Dok in Ansicht,

Heißt das, dass er eine Ansicht geöffnet hat und ein min. ein Dokument markiert hat?
Betätigt er eine Aktion innerhalb der Ansicht?

Dann kannst/solltest Du nicht das CurrentDocument vom workspace nehmen.
Nimm lieber die UnprocessedDocuments:

....
dim coll as NotesDocumentCollection
set coll = db.UnprocessedDocuments
if coll.Count = 0 Then
     '??
else

set doc = coll.GetFirstDocument

While not doc is Nothing
     'dein COde
   Set doc = coll.GetNextDocument( doc )
Wend
end if

Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Re: Problem mit LotusScript
« Antwort #8 am: 28.07.07 - 18:10:19 »
Hallo Dirk -
der Ablauf ist wie folgt: User wählt ein Dokument in der Ansicht, klickt auf Aktion, die das Dokument kopiert und das neue Dokument zur Bearbeitung öffnet. Wenn der User dann die Änderungen durchgeführt hat, klickt er wieder auf eine Aktion (er befindet sich jetzt aber im Dok) und daraufhin soll die Vorgängerversion archiviert werden, also mit dem Kennzeichen 1 im Feld stamm_archiv versehen werden. Aber eben erst, wenn das neue, veränderte Dok abgeschlossen wurde.
Über weitere Hilfe würde ich mich immer noch sehr freuen, bin nämlich noch kein Stück weiter....
Grüße - Thomas.

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: Problem mit LotusScript
« Antwort #9 am: 30.07.07 - 07:26:01 »
Hallo

Code
 unitnr=doc.docidarchivrev(0)            
            Set doc_arch = db.GetDocumentByUNID(unitnr)                  
            
            doc_arch.stamm_archiv=1
            Call doc_arch.save(True,True)

Hier würde ich ein wenig mehr Fehlerbehandlung einbauen  ;)


Sind in dem Dokument "Version 1" auch alle Autorenfelder korrekt gesetzt?

Warum speicherst Du das Dokument am Ende nochmal??

Code
 Call uidoc.Close
            Call doc.Save(True, True)
            Call doc_arch.save(True,True)
            Call doc.Save(True, True)   
         


Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline thomas_xyz

  • Frischling
  • *
  • Beiträge: 9
Re: Problem mit LotusScript
« Antwort #10 am: 30.07.07 - 08:39:33 »
 :)
Ich hab das Problem gelöst!
Das Problem bestand tatsächlich in der ID, Bernhard. Und zwar wurde bei Erstellung einer Änderung immer das Ursprungs-Doc_id-Feld mitgeschleift, weshalb er dann bei der Speicherung auch immer auf das bereits archivierte Dok zugegriffen hat. Habe jetzt bei der Erstellung eines neuen Änderungsdokuments die UniversalID wieder neu vergeben, und was soll ich sagen: es funktioniert.
Vielen Dank für die Hilfe!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz