Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: iworks am 13.06.08 - 13:03:16

Titel: Kopieren von docs über View
Beitrag von: iworks 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.
Titel: Re: Kopieren von docs über View
Beitrag von: dirk_2909 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 ...
Titel: Re: Kopieren von docs über View
Beitrag von: iworks 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
Titel: Re: Kopieren von docs über View
Beitrag von: DerAndre 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?
Titel: Re: Kopieren von docs über View
Beitrag von: iworks 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
Titel: Re: Kopieren von docs über View
Beitrag von: m3 am 13.06.08 - 14:00:51
Ich würd "Set newdoc = New NotesDocument(db)" in die Schleife ziehen. ;)
Titel: Re: Kopieren von docs über View
Beitrag von: iworks 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.
Titel: Re: Kopieren von docs über View
Beitrag von: LN4ever am 16.06.08 - 12:45:40
Call dc.RemoveAll(True)

nach der Schleife hilft dir weiter.

Gruß

Norbert
Titel: Re: Kopieren von docs über View
Beitrag von: iworks 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...
Titel: Re: Kopieren von docs über View
Beitrag von: klaussal am 16.06.08 - 13:24:56
Zitat
Call dc.RemoveAll(True)

nach der Schleife hilft dir weiter.

... steht hier doch, oder ?
Titel: Re: Kopieren von docs über View
Beitrag von: Axel 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
Titel: Re: Kopieren von docs über View
Beitrag von: iworks 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ß...