Autor Thema: Kopieren von docs über View  (Gelesen 3679 mal)

Offline iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Kopieren von docs über View
« am: 13.06.08 - 13:03:16 »
Hallo zusammen,

ich habe hier ein kleines Problemchen, ich denke es wird gleich auffallen wenn man sich den code anschaut. Zunächst aber was ich möchte ist, über eine view entsprechend X docs markieren und enige Feldwerte in ein neues doc kopieren. Das kopierte doc trägt dabei nach dem Kopiervorgang einen anderen Maskennamen.

Hier der code komplett: (das Ganze läuft als Action)

Sub Click(Source As Button)
   
   Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim newdoc As NotesDocument
   Dim zaehler As Integer
   Set db = session.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Set newdoc = New NotesDocument(db)
   
   zaehler = 1
   While Not (doc Is Nothing)
      
      newdoc.Form = "namemaske"
      newdoc.Feld1 = "Kopie"
      newdoc.Feld2 = doc.Feld2
      newdoc.Feld3 = doc.Feld3
      newdoc......
      newdoc.Feld20 = doc.Feld20

      If zaehler = 1 Then Print zaehler & "Dokument bearbeitet" Else Print zaehler & "Dokument bearbeitet"
      Call newdoc.ComputeWithForm(True,False)
      Call newdoc.Save(True, False)
      Set doc = dc.GetNextDocument(doc)
      zaehler = zaehler + 1
   Wend
   
End Sub

Nun zum Problem......meine LS Kenntnisse sind eher Anfänger.

1.Problem ist zunächst dass nicht alle in der view markierte docs kopiert werden, sondern immer nur der lettze in der view. Ich denke hier fällt einfach etwas code irgendwo oder?

2.wie leicht lässt sich das Löschen der bearbeiteten docs hier einbauen.

Danke schon mal für eure Hilfe.

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: Kopieren von docs über View
« Antwort #1 am: 13.06.08 - 13:10:54 »
zu 1. Du musst den Code in einen Agenten einbauen - Ausführung manuell -> Ziel "gewählte Dokumente"

Zu 2: sehr leicht  - ich würde mir die kopierten Docs in einer "Liste" (Collection) "merken" und nach dem ganzen Kopierern löschen ( doc.Remove( .. ) )

Code
...
call collDel.AddDocument( doc )
    Set doc = dc.GetNextDocument(doc)
      zaehler = zaehler + 1
   Wend

Call collDel.RemoveAll ...
« Letzte Änderung: 13.06.08 - 13:16:31 von dirk_2909 »
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 iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Kopieren von docs über View
« Antwort #2 am: 13.06.08 - 13:21:49 »
Hi,

danke für prompte Antwort.
Ok habe ich soweit gemacht...also den Agenten als "On event" --> Action menu selection" und Target --> "All selected Documents". Es wird dennoch nur ein doc erstellt, immer das letzte der vorhin markierten docs in der view.

Das Ding sieht jetzt so aus:

Sub Initialize
   Dim ws As New NotesUIWorkspace
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Set db = s.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Dim wert As String
   Dim zaehler As Integer
   Dim vStringArray As Variant
   Dim values(1) As Variant
   values(0) = "Carlos Parés-Salvador"
   values(1) = "Ralf Finger"
   
   vStringArray=ws.Prompt (PROMPT_OKCANCELLIST,"GF Setzen", "Bitte legen Sie einen GF fest",values(0), values)
   If Isempty(vStringArray) Then Exit Sub
   zaehler=1
   While Not (doc Is Nothing)   
      If doc.Form(0)="Maske1" Then
         doc.GF=vStringArray
      Elseif doc.Form(0)="frmKontakt" Then
         doc.Branche_resp=vStringArray
      End If
      If zaehler=1 Then Print zaehler & " Dokument bearbeitet" Else Print zaehler & " Dokumente bearbeitet"
      Call doc.Save(True, True)
      Set doc = dc.GetNextDocument(doc)
      zaehler=zaehler+1
   Wend
End Sub

Offline DerAndre

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.655
  • Geschlecht: Männlich
  • Keep cool!
Re: Kopieren von docs über View
« Antwort #3 am: 13.06.08 - 13:27:57 »
Das Ding erstellt ja auch keine neuen Dokumente sondern füllt nur eine Feld.

Oder verstehe ich mal wieder was falsch?
André

Elterninitiative diabetischer Kinder und Jugendlicher e.V.
-----------------------------------------------------------------------------
Fliegen ist die Kunst auf den Boden zu Fallen, aber daneben.
-----------------------------------------------------------------------------
Etwas mehr Hardware dazu zu kaufen ist viel billiger als
Software besser zu machen. ( Niklaus Wirth )

Offline iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Kopieren von docs über View
« Antwort #4 am: 13.06.08 - 13:57:06 »
Oh no....sorry mein Fehler. Habe ausversehen den falschen Agenten Code hier kopiert.

Das wäre jetzt also das Ding noch mal.

Sub Initialize
Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim newdoc As NotesDocument
   Dim zaehler As Integer
   Set db = session.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Set newdoc = New NotesDocument(db)
   
   zaehler = 1
   While Not (doc Is Nothing)
     
      newdoc.Form = "namemaske"
      newdoc.Feld1 = "Kopie"
      newdoc.Feld2 = doc.Feld2
      newdoc.Feld3 = doc.Feld3
      newdoc......
      newdoc.Feld20 = doc.Feld20

      If zaehler = 1 Then Print zaehler & "Dokument bearbeitet" Else Print zaehler & "Dokument bearbeitet"
      Call newdoc.ComputeWithForm(True,False)
      Call newdoc.Save(True, False)
      Set doc = dc.GetNextDocument(doc)
      zaehler = zaehler + 1
   Wend
   
End Sub

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Kopieren von docs über View
« Antwort #5 am: 13.06.08 - 14:00:51 »
Ich würd "Set newdoc = New NotesDocument(db)" in die Schleife ziehen. ;)
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Kopieren von docs über View
« Antwort #6 am: 13.06.08 - 14:06:12 »
Ok das war es. Set newdoc jetzt in der Schleife drin und nun werden auch alle selected docs auch erstellt.

Ok jetzt versuche ich mal die ´deletion einzubauen. Komme sicher wieder auf euch zurück. Aber bis hierhin nochmals tausend Dank.

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Kopieren von docs über View
« Antwort #7 am: 16.06.08 - 12:45:40 »
Call dc.RemoveAll(True)

nach der Schleife hilft dir weiter.

Gruß

Norbert
Situs vilate in isse tabernit.

Offline iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Kopieren von docs über View
« Antwort #8 am: 16.06.08 - 13:11:02 »

Zu 2: sehr leicht  - ich würde mir die kopierten Docs in einer "Liste" (Collection) "merken" und nach dem ganzen Kopierern löschen ( doc.Remove( .. ) )

Code
...
call collDel.AddDocument( doc )
    Set doc = dc.GetNextDocument(doc)
      zaehler = zaehler + 1
   Wend

Call collDel.RemoveAll ...

...so muss hier noch mal ansätzen. ich weiß, eigentlich sollte das kein Thema aber ich krieg das ganze nich so zusammen. muss die collection während des while loops passieren oder davor?

danke erneut...

klaussal

  • Gast
Re: Kopieren von docs über View
« Antwort #9 am: 16.06.08 - 13:24:56 »
Zitat
Call dc.RemoveAll(True)

nach der Schleife hilft dir weiter.

... steht hier doch, oder ?

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: Kopieren von docs über View
« Antwort #10 am: 16.06.08 - 13:29:15 »
Eigentlich reicht es, wenn du nach der Schleife alle Dokumente der Collection löschst.

Sub Initialize
   Dim workspace As New NotesUIWorkspace
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim newdoc As NotesDocument
   Dim zaehler As Integer
   Set db = session.CurrentDatabase
   Set dc = db.UnprocessedDocuments
   Set doc = dc.GetFirstDocument
   Set newdoc = New NotesDocument(db)

   zaehler = 1
   While Not (doc Is Nothing)
      
      newdoc.Form = "namemaske"
      newdoc.Feld1 = "Kopie"
      newdoc.Feld2 = doc.Feld2
      newdoc.Feld3 = doc.Feld3
      newdoc......
      newdoc.Feld20 = doc.Feld20

      If zaehler = 1 Then Print zaehler & "Dokument bearbeitet" Else Print zaehler & "Dokument bearbeitet"
      Call newdoc.ComputeWithForm(True,False)
      Call newdoc.Save(True, False)
      Set doc = dc.GetNextDocument(doc)
      zaehler = zaehler + 1
   Wend
  
  Call dc.Remove(True)

End Sub


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

Offline iworks

  • Junior Mitglied
  • **
  • Beiträge: 73
Re: Kopieren von docs über View
« Antwort #11 am: 16.06.08 - 14:29:39 »
Hallo noch mal,

oh ok....,sorry habe die msg weiter oben übersehen. Wiedermal vielen dank, es tut alles. Super.

Gruß...

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz