Domino 9 und frühere Versionen > ND6: Entwicklung

Kopieren von docs über View

(1/3) > >>

iworks:
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.

dirk_2909:
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 ...
--- Ende Code ---

iworks:
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

DerAndre:
Das Ding erstellt ja auch keine neuen Dokumente sondern füllt nur eine Feld.

Oder verstehe ich mal wieder was falsch?

iworks:
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

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln