Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: rar am 21.03.05 - 16:37:16

Titel: Anhang von einem Dokument in ein anders kopieren
Beitrag von: rar am 21.03.05 - 16:37:16
Hallo Leute,

ich habe ein Dokument mit 4 Bodyfeldern. Irgendwo in diesem Bodywirrwarr steht etwas Text und ein Anhang.
Mein Ziel ist den Anhang in ein rtf eines neuen Dokumentes zu kopieren.
Bei meinen Versuchen bin ich auf 2 Probleme gestoßen:

1.) Ich habe es mit dem folgendem Code probiert:
strTemp = Environ("Temp") +"\c.daten.notes\"
Set rtItem = New NotesRichTextItem( docNew , "Body" )
Forall x In doc.EmbeddedObjects
   If x.Type = EMBED_ATTACHMENT Then
      Call x.ExtractFile( strTemp + x.Source )
      Call rtItem.EmbedObject( EMBED_ATTACHMENT, "" , strTemp + x.Source )
   End If
End Forall
Beim Forall kommt aber die Fehlermeldung Type mismatch. In der Hilfe wird aber die Kombination Forall und doc.EmbeddedObjects verwendet. ???

2.) Muss ich echt den Anhang lösen um ihn in ein anderes Dokument zu kopieren oder gibt es eine einfachere Lösung?

lG
-daniel
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: koehlerbv am 21.03.05 - 16:39:57
Nimm NotesItem.CopyItemToDocument (notesDocument, newName$). Dann brauchst Du Dich um die Attachments nicht mehr zu kümmern, wenn welche drin sind.

HTH,
Bernhard
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: rar am 21.03.05 - 16:52:00
Ich habe aber 4 Bodyfelder, von denen ich nur das eine mit dem Anhang brauch. Und davon nur das Attachement (ohne Text)...

Wenn ich das NotesItem befülle, brauch ich ja das GetFirstItem.
Ein GetNextItem gibt es doch nicht?!
Irgendwie läufts heut bei mir nicht  :-\

-daniel
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: koehlerbv am 21.03.05 - 16:57:37
Sorry, dann habe ich Dich mistverstanden. Dann musst Du doch den Anhang lösen - eines der Items spearat wirst Du nicht via LS greifen können.

Bernhard
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: rar am 21.03.05 - 17:06:02
Danke. Somit ist die 2te Frage beantwortet.

Wenn ich aber den Anhang lösen möchte, stoß ich auf den blöden Type mismatch beim Forall....
Wie kann ich denn sonst noch auf den Anhang zugreifen?
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: Semeaphoros am 21.03.05 - 17:11:58
Daniel, was sagt denn der Debugger? Und vielleicht fragst Du wie im Beispiel der Hilfe auch noch nach HasEmbedded ab
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: rar am 21.03.05 - 17:22:05

Im doc sehe ich unter EmbeddedObjects kein Inhalt obwohl doc.HasEmbedded True ist. Das $File Feld ist aber befüllt.
Mehr als ein Type mismach kommt beim Debugger nicht raus.

Hier ist der komplette Code:
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim coll As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim docTmp As NotesDocument
   Dim docNew As NotesDocument
   Dim rtitem As NotesRichTextItem
   Dim strTemp As String
   
   strTemp = Environ("Temp")   +"\c.daten.notes\"
   Set db = session.CurrentDatabase
   Set coll = db.UnprocessedDocuments
   Set doc = coll.GetFirstDocument()
   Do While Not doc Is Nothing
      Set docTmp = coll.GetNextDocument(doc)
      Set docNew = db.CreateDocument()
      docNew.Form = "mKonto"
      If doc.HasEmbedded Then
         Set rtItem = New NotesRichTextItem( docNew , "Body" )
         Forall x In doc.EmbeddedObjects
            If x.Type = EMBED_ATTACHMENT Then
               Call x.ExtractFile( strTemp + x.Source )
               Call rtItem.EmbedObject( EMBED_ATTACHMENT, "" , strTemp + x.Source )
            End If
         End Forall
      End If
      Call docNew.Save(True,True)
      'call doc.Remove(true)
      Set doc = docTmp
   Loop
   
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: Driri am 21.03.05 - 17:29:43
Zitat
Forall x In doc.EmbeddedObjects

Das ist wohl der Fehler. Korrekt wäre IMO :

Forall x in rtitem.EmbeddedObjects
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: koehlerbv am 21.03.05 - 17:33:21
Code
Set rtItem = New NotesRichTextItem( docNew , "Body" )

Das ist auch nicht richtig - damit erzeugst Du das fünfte Body-Item. Du musst schon GetFirstItem nehmen. Notes findet dann die Attachments schon.

Bernhard
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: rar am 21.03.05 - 17:50:17
 :) DANKE  :)
Ich habs.
Mit dem GetFirstItem hat Notes die Attachements gefunden und mit rtitem.EmbeddedObjects geht das Forall auch.
Mich wundert warum es mit doc.EmbeddedObject nicht funzt. Vielleicht ein Bug ?!
 
Set rtItem = New NotesRichTextItem( docNew , "Body" )
passt aber Bernhard. Das ist das einzige Bodyfeld in dem neuen Dokument.

Vielen Dank euch allen. Der Abend ist gerettet  ;D
lG
-daniel
Titel: Re: Anhang von einem Dokument in ein anders kopieren
Beitrag von: koehlerbv am 21.03.05 - 17:51:56
NotesDocument.EmbeddedObjects geht schon - hat aber mit Attachments nichts zu tun !

Daher gab es dann auch den Type mismatch.

Bernhard