Autor Thema: markiertes Dokument ansprechen  (Gelesen 15695 mal)

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
markiertes Dokument ansprechen
« am: 13.12.04 - 09:24:43 »
Servus,

habe ich das richtig in der Designer Hilfe verstanden, mit dem "UnprocessedDocuments" Befehl, kann kann ich die markierten Dokumente herausfinden ?

Ich möchte nämlich auf markierte Documente zugreifen, und diese dann in eine andere Datenbank kopieren.

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #1 am: 13.12.04 - 09:36:01 »
Ich poste euch mal den Code. Da hier irgendwie die Documente nicht gefunden werden in der Datenbank und auch in der anderen. Es werden viele Variablen deklariert, die nicht verwendet werden. Das kommt davon, dass ich auf einen vorher geschriebenen Script von mir aufbaue und am Ende, wenn alles funzt, die Variablen Leichen herausnehmen.

Der Code soll alle markierten Documente herausfinden und ein Document ( markiert ) nach dem anderen abarbeiten. Das markierte Document hat einen Feldnamen "listname" in welchen der Name des Documentes steht ( Gruppenname). Dieses Document existiert in 2 Datenbanken. Aufgabe ist, das Dokument in beide Datenbanken kopieren und das alte vorhanden Dokument in den 2 anderen Datenbanken löschen. Damit nur das aktuelle vorhanden ist. Als es ist ein Verteiler.

Nochmal. Das Dokument in der THIS Datenbank ist ein kopie aus den 2 anderen Datenbanken.Jetzt soll das Dokument in die 2 Datenbanken wieder zurückkopiert werden. In dem Dokument in der THIS Datenbank wurde nur kleine Inhaltsänderungen vorgenommen. Deshalb sollen die alten Dokumente gelöscht werden. So dass alle 2 Datenbanken am Ende immer auf dem aktuellen Stand sind.

Hier der Code. Problem ist, dass es mir so vorkommt, dass dieser Script die markierten Dokumente nicht findet und somit auch die alten Dokumente anhand des Namens nicht in den 2 anderen Datenbanken finden kann.



Sub Initialize
   Dim session As New NotesSession
   Dim db1 As NotesDatabase
   Dim db2  As NotesDatabase
   Dim thisdb As NotesDatabase
   Dim searchview1 As NotesView
   Dim searchview2 As NotesView
   Dim searchview3 As notesview
   Dim vc As NotesViewEntryCollection
   Dim entry As NotesViewEntry
   Dim docDB1 As NotesDocument
   Dim docdb2 As NotesDocument
   Dim docEingabe As NotesDocument
   Dim Copydoc As NotesDocument
   Dim  DB1GroupName As Variant
   Dim db1GroupNameE As String
   Dim FirstDocCheckDB1 As Boolean
   Dim Db1EntryCount As Integer
   Dim DB1EntryCounter As Integer
   Dim db1VS As Variant
   Dim db2vs As Variant
   Dim Nam As NotesName
   Dim StringConv As String
   Dim StringConvE As String
   Dim intStrLaenge As Integer
   Dim intStrLaengeF As Integer
   Dim strSearchMemory As String
   Dim SearchMemoryA As Variant
   Dim Nullstatus As Integer
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim collection As NotesDocumentCollection
   Dim item As NotesItem
   
   Set uidoc = workspace.CurrentDocument
   Set thisdb = session.CurrentDatabase
   Set searchview3=thisdb.GetView("vergleichsAusgabe")
   Set db1 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB1.nsf" )
   Set db2 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB2.nsf" )
   Set searchview1=db1.GetView("Groups")
   Set searchview2 =db2.GetView("Groups")
   
   Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
   
   
   While Not(copydoc Is Nothing)
      db1Groupname = copydoc.GetItemValue("Listname")
      StringConv = db1Groupname(0)
      Set nam = New NotesName( StringConv  )
      
      
      db1GroupNameE = msg & nam.Abbreviated & Chr(13)
      intStrLaenge = Len(db1GroupNameE)
      intStrLaengeF=intStrLaenge - 1
      StringConvE=Left$(db1GroupNameE, intStrLaengeF)
      Set item = copydoc.GetFirstItem( "Listname" )
      Set docdb1= searchview1.GetDocumentByKey(StringConvE)
      Set docdb2= Searchview2.GetDocumentByKey(StringConvE)
      If item.Contains( docdb1.listname ) Then
         Call docdb1.remove(False)
         Call docdb2.Remove(False)
         
         'Call copydoc.Save( False, True )
      End If
      Set copydoc = collection.GetNextDocument(copydoc)
      
   Wend
   
   
End Sub


Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: markiertes Dokument ansprechen
« Antwort #2 am: 13.12.04 - 09:39:33 »
Je nachdem, welches Ziel der Agent hat (alle Dokumente, neue Dokumente, etc.) ist das Ergebnis von UnprocessedDocuments verschieden.

Genaueres dazu sagt dir die Bescreibung der Eigenschaft in der Designer Hilfe
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #3 am: 13.12.04 - 09:53:55 »
Das blick ich ja leider nicht :(

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: markiertes Dokument ansprechen
« Antwort #4 am: 13.12.04 - 10:03:11 »
ich hab die Hilfe nicht hier.
poste doch mal den Teil, den du nicht verstehst und erkläre, was du nicht verstehst
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #5 am: 13.12.04 - 10:08:41 »
Ich blick das nicht, wie das meinem mit dem Auswählen und ansprechen.


Beispiel
Read-only. The documents in a database that the current agent or view action considers to be "unprocessed." The type of agent determines which documents are considered unprocessed.
Hinweis  This property is not implemented in COM.
Defined in
NotesDatabase
Data type
NotesDocumentCollection
Syntax
To get: Set notesDocumentCollection  = notesDatabase.UnprocessedDocuments
Usage
This method is valid only for agent or view action scripts and may be invoked only on NotesDatabase objects obtained from the CurrentDatabase property in NotesSession. In scripts that are not a part of an agent or view action, this method returns a NotesDocumentCollection with zero documents. When invoked on a NotesDatabase object that was not obtained from the CurrentDatabase property, this method raises an error.
The database must be open to use this property.
What documents are returned?
The following table describes the documents that are returned by the UnprocessedDocuments property. Document selection occurs once, before the agent runs.
Agent runs on   UnprocessedDocuments returns documents that meet all of these requirements
All documents in database   Meet the search criteria specified in Agent Properties box
All new & modified documents   Not been processed by this agent with UpdateProcessedDoc
   Created or modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
All unread documents in  view   Are unread and in the view
   Meet the search criteria specified in Agent Properties box
All documents in view   Are in the view
   Meet the search criteria specified in Agent Properties box
All selected documents
or
View action   Are selected in the view
   Meet the search criteria specified in Agent Properties box
None   Is the current document only
Newly received mail documents   Mailed to the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Newly modified documents   Modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
Pasted documents   Pasted into the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Using UpdateProcessedDoc
For agents that run on new and modified documents, newly received mail documents, pasted documents, or newly modified documents, you must use the UpdateProcessedDoc method in NotesSession to mark each document as "processed," which ensures that a document gets processed by the agent only once (unless it's modified, mailed, or pasted again). If you do not call this method for each document, the agent processes the same documents the next time it runs.
UpdateProcessedDoc marks a document as processed only for the particular agent from which it is called. Using UpdateProcessedDoc in one agent has no effect on the documents that another agent processes.
In all other agents and view actions, UpdateProcessedDoc has no effect.
View actions
When used in a view action, UnprocessedDocuments returns the same documents as an agent that runs on selected documents.
Language cross-reference
UnprocessedDocuments property in Java AgentContext class
@All function in formula language
Beispiel
Siehe auch
Collecting all documents and unprocessed documents


Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: markiertes Dokument ansprechen
« Antwort #6 am: 13.12.04 - 10:10:44 »
Hi,

was hast du denn bei "Für welche Dokumente soll er gelten" eingestellt?


Axel

Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline animate

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.540
  • Uh, I'm just gonna go find a cash machine.
    • LA2
Re: markiertes Dokument ansprechen
« Antwort #7 am: 13.12.04 - 10:14:43 »
das hier ist die im Moment entscheidende Stelle für dich:

Agent runs on   UnprocessedDocuments returns documents that meet all of these requirements
All documents in database   Meet the search criteria specified in Agent Properties box
All new & modified documents   Not been processed by this agent with UpdateProcessedDoc
   Created or modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
All unread documents in  view   Are unread and in the view
   Meet the search criteria specified in Agent Properties box
All documents in view   Are in the view
   Meet the search criteria specified in Agent Properties box
All selected documents
or
View action   Are selected in the view
   Meet the search criteria specified in Agent Properties box
None   Is the current document only
Newly received mail documents   Mailed to the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Newly modified documents   Modified since the agent last ran
   Meet the search criteria specified in Agent Properties box
Pasted documents   Pasted into the database since the agent last ran
   Meet the search criteria specified in Agent Properties box
Thomas

Fortunately, I'm adhering to a pretty strict, uh, drug, uh, regimen to keep my mind, you know, uh, limber.

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #8 am: 13.12.04 - 10:32:22 »
ich habe eingestellt, alle marierten Dokumente. Deshalb versteh ich das nicht. er spricht auch ein Dokument an, aber das ist nicht ausgewählt. Das ist ja gerade das schlimme daran.

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: markiertes Dokument ansprechen
« Antwort #9 am: 13.12.04 - 11:01:51 »
Hi Nexus
Du könntest auch das Property Documents der NotesUIView klasse verwenden.

gruss umi
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: markiertes Dokument ansprechen
« Antwort #10 am: 13.12.04 - 20:25:56 »
Nexus, grenz mal das ganze ein.

Nimm mal einen kurzen Agenten zum testen, ob es da immer noch so ist:

Code
Sub Initialize
	
	Const ITEM_NAME$ = "Listname"
	
	Dim session As New NotesSession
	Dim workspace As New NotesUIWorkspace
	Dim dbThis As NotesDatabase
	Dim collection As NotesDocumentCollection
	Dim docLoop As NotesDocument
	Set dbThis = session.CurrentDatabase
	Set collection = dbThis.UnprocessedDocuments
	
	Msgbox collection.Count & " Dokumente ausgewählt"
	
	Set docLoop = collection.GetFirstDocument()
	While Not(docLoop Is Nothing)
		Msgbox "Erster Wert von Feld <" & ITEM_NAME & ">:" & docLoop.GetItemValue(ITEM_NAME)(0)
		Set docLoop = collection.GetNextDocument(docLoop)
	Wend
	
End Sub

Weitere Tipps:
  • Schalte Option Declare ein
  • Benutze eine einheitliche Groß- und Kleinschreibung. Teilweise machst Du das bei den Variablen nämlich nicht. Dies mag hier unter LotusScript zwar funktionieren, aber dient nicht der Lesbarkeit des Codes. Außerdem sind andere Sprachen da nicht so großzügig (z.B. ist in Java zwischen hallo und Hallo ein Unterschied !).
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: markiertes Dokument ansprechen
« Antwort #11 am: 13.12.04 - 20:30:47 »
Zitat
z.B. ist in Java zwischen hallo und Hallo ein Unterschied !).
wohingegen Visual Basic die Schreibweise automatisch anpasst .. aber das hier nur am Rande...
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: markiertes Dokument ansprechen
« Antwort #12 am: 13.12.04 - 20:40:49 »
wohingegen Visual Basic die Schreibweise automatisch anpasst .. aber das hier nur am Rande...
Ist mir in VBA noch gar nicht aufgefallen (wohl weil ich nicht so oft in VBA code), wohl aber, dass sich z.B. in VBA ein "Exit Sub" automatisch in "Exit Function" ändert, wenn ich die Routine von Sub auf Function ändere im Kopf.

@Nexus:
Generell zu Agenten kannst Du Dir auch mal das hier ansehen:
AtNotes BP: Agenten in Notes/Domino
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: markiertes Dokument ansprechen
« Antwort #13 am: 13.12.04 - 20:47:41 »
ich sprach nicht von VBA ( Visual Basic for Application ) sondern von VB n ( Visual Basic ) ! n= {1,6}
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: markiertes Dokument ansprechen
« Antwort #14 am: 13.12.04 - 20:54:58 »
Ahh, danke für die Klarstellung, hatte ich überlesen. Ist übrigens in VBA (Excel 2003) auch so, hab gerade nachgesehen.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Glombi

  • Gast
Re: markiertes Dokument ansprechen
« Antwort #15 am: 13.12.04 - 21:34:17 »
Hat Nexus eigentlich explizit mal gesagt, WO der Code ist? Wir reden zwar alle von Agenten, aber evtl. sind wir auf der falschen Fährte.

Also: Steht der Code so in einem Agenten?
Wie wird der Agent aufgerufen?

Bei dem Code sehe ich nicht, warum das nicht funktionieren sollte.

Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: markiertes Dokument ansprechen
« Antwort #16 am: 13.12.04 - 22:22:07 »
@Andreas:
ich habe eingestellt, alle marierten Dokumente.

Ich denke schon, er spricht von einem Agent. Aber auch mir ist völlig unklar, warum das nicht funktionieren sollte. Wobei mich allerdings die Menge an Sinnloscode (in Bezug auf die Fragestellung) abgehalten hat, mich vorher intensiver mit der Sache zu beschäftigen.
Wenn mir sowas passiert: Ich schmeisse erstmal alles 'raus, was "mit der Sache" nix zu tun hat, um Nebenwirkungen ausschliessen zu können (in der Regel landet dann der Code in einem seperatem, temporäten Designelement in einer Kopie der betreffenden DB - da kann ich "spielen" bis zum Abwinken).

Woran merkst Du eigentlich, dass andere als markierte Docs berücksichtigt werden ?
Tip: Geh' den Agent im Debugger durch (das Teil sollte ja auch - oder müsste eigentlich nur (wenn ich mir so die expliziten Zuweisungen de DBs anschaue) - lokal laufen.

Ich nehme an, da läuft irgendwas ganz simples (Agent properties ?) schief.

Bernhard

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #17 am: 14.12.04 - 10:40:42 »
habe den eigentlich Code jetzt eingegrenzt.

Bestehend nur noch aus:

Variablen lass ich jetzt mal weg, da diese alle einwandfrei deklariert sind. Und von denen das Problem nicht ausgeht.



Set uidoc = workspace.CurrentDocument
   Set thisdb = session.CurrentDatabase
   Set searchview3=thisdb.GetView("vergleichsAusgabe")
   Set db1 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB1.nsf" )
   Set db2 = session.GetDatabase( "", "c:\Dokumente und Einstellungen\Markus\Eigene Dateien\Notes\vergleich\VergleichDB2.nsf" )
   Set searchview1=db1.GetView("Groups")
   Set searchview2 =db2.GetView("Groups")
   
   Set collection = thisdb.UnprocessedDocuments
   Set copydoc = collection.GetFirstDocument()
   
   
   
   While Not(copydoc Is Nothing)
      
      Call copydoc.RemoveItem(ERRdescription)
      Call copydoc.Save (True, True)
      Call copydoc.CopyToDatabase ( db1 )
      
      Call copydoc.CopyToDatabase ( db2 )
   Set copydoc = collection.GetNextDocument(copydoc)
      
   Wend
   Messagebox "Replacement finished"
   
End Sub


Also, er findet Dokumente. Aber nicht die, welche ich ausgewählt habe. Ich setze ja, getfirstdocument. Da sollte er das erste Dokumente anspringen, was ich ausgewählt habe und in der Collection ist. Macht er aber nicht. Er nimmt das Dokument in der Ansicht. 

Ja es ist ein Agent.

Habe auch eingestellt, in den Property, dass er nur die ausgewählten Exemplare durchlaufen soll.  Von daher... ich weiß nicht weiter.

Glombi

  • Gast
Re: markiertes Dokument ansprechen
« Antwort #18 am: 14.12.04 - 10:48:43 »
Was soll denn
  Set uidoc = workspace.CurrentDocument
 ???

Wo wird workspace gesetzt ?
Wo wird session gesetzt  ?

Wird der Agent aus einem Dokument aufgerufen?

Schalte mal den Debugger ein und dann insb. der Wert Count für collection. Was steht da?

Andreas

Offline Nexus

  • Junior Mitglied
  • **
  • Beiträge: 82
  • Geschlecht: Männlich
  • Lotus Notes Rulez !
Re: markiertes Dokument ansprechen
« Antwort #19 am: 14.12.04 - 10:52:03 »
ich habe 2 Dokumente ausgewählt.

Bei Count steht allerdings nur 1.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz