Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: DAU-in am 14.05.08 - 14:59:53
-
Hi @all!
ich hänge mal wieder fest.
Bei einer Lese-DB zur Veröffentlichung von Dokumenten (diese werden aus einer anderen DB kopiert) werden gelöschte Attachments (bzw. Attachments deren Richtextfeld überschrieben wurde) recht unschön angezeigt (siehe Bild).
Das Problem ist jetzt beim Löschen von Attachments jetzt behoben (ich gehe in einer Schleife durch die EmbeddedObjects und lösche das jeweilige Objekt), aber wie komme ich an die alten, sozusagen gelöschten Attachments ran, damit auch die alten Dokumente ohne diese gelöschten Attachments angezeigt werden?
Das Update der Dokumente erfolgte über
Lesekey = doc.InfoDocID(0)
Set Lesedoc = Leseview.GetDocumentByKey(Lesekey)
If Not Lesedoc Is Nothing Then
doc.tStatus = "2"
Call doc.Save(True,False)
Call doc.CopyAllItems(Lesedoc,True)
Call Lesedoc.Save( True, True )
End If
Das Bodyfeld, in dem die Attachments eingehängt werden, wurde also einfach überschrieben, die Files selber wurden aber nicht gelöscht. Ich kann auch die $File-Items sehen. Sie haben auch noch die alten Längen. Ich finde aber keinen Unterschied zu einem 'ordentlichen' Attachment. Wenn ich sie öffnen will, kommt ein 'keine Applikation gefunden'., der Dokumententyp scheint entfernt worden zu sein. Wie kann ich jetzt genau diese Attachments feststellen, und diese alten Attachments komplett entfernen, ohne jedes Dokument manuell zu öffnen?
Gerade bin ich ratlos. :-:
Grüsse
Dau-in
-
... da scheinen tatsächlich mehrere Sachen passiert zu sein.
Wenn du alle RichText-Felder löschst, dann hängen die Attachments unter dem Dokument, verlieren aber eigentlich nicht die Dateitypen - da scheint noch was anderes eine Rolle zu spielen...
Toni
-
Hi, ata!
irgendwo muss ja die Information stecken, dass diese Files nicht mehr zu dem Bodyfeld gehören, das aktuell in den Dokumenten enthalten ist.
Die Filegrösse etc. stimmt ja.
Was genau passiert ist, kann ich nur ungefähr nachvollziehen an Hand des Codes, der in der DB ist, da ich die DB übernommen habe, und der Fehler letzte Woche gemeldet wurde, da es als 'ist halt so' bekannt war.
Grüsse
Dau-in
-
Ich glaube du kannst mit
notesDocument.GetAttachment( fileName$ )
darauf zugreifen.
Viele Grüße
ghost
-
... du übernimmst die Attachments über CopyAllItems - gibt es in deinem Lesedoc-Dokument bereits Rich-Text-Felder mit Attachments? Da könnte es Probleme geben.
Ansonsten, sollten die Felder dort leer sein, dann solltest du sie zuerst löschen.
Ich würde eher dazu neigen die Attachments einzeln auszulösen und zu übernehmen...
Toni
-
Hi, Ata,
... du übernimmst die Attachments über CopyAllItems - gibt es in deinem Lesedoc-Dokument bereits Rich-Text-Felder mit Attachments? Da könnte es Probleme geben.
Das war genau das Problem, die Bodyfelder wurden einfach drüberkopiert und zwar jedesmal, wenn einer auf 'Publish' geklickt hat :-\
dreimal publiziert mit 3 Attachments ergibt dann 3 Attachments im Bodyfeld und
6 verhunzte unten.
Ansonsten, sollten die Felder dort leer sein, dann solltest du sie zuerst löschen.
Ich würde eher dazu neigen die Attachments einzeln auszulösen und zu übernehmen...
Toni
So habe ich das auch umgeschrieben, aber die Dokumente, in denen bereits verunstaltete Attachments hängen, sind jetzt das Problem. die Anwender sind das zwar als 'Notes eben' gewohnt, aber mich stört das.
Ich möchte einen Agenten schreiben, der durch die Lese-DB läuft, und erkennt, ob es sich um korrekt eingehängte Attachments handelt.
Und jetzt ist mir unklar, wie ich korrekte von verhunzten Attachments unterscheiden soll? Oder geht das programmatisch nicht? :-:
Grüsse
Dau-in
-
... wenn sie die Dateiendung verloren haben, könnte dies ja ein Kriterium sein...
Toni
-
Hi Ata,
die Endung ist noch da. Nur haben die Attachments einen Schlag.
Aber wenn Notes weiss, welche es im Bodyfeld darzustellen hat und welche unten hängen, muss doch irgendwo dazu eine Info gespeichert sein.
Bloss wo? ???
Grüsse
DAu-in
-
... Attachments unter dem Dokument werden über das Dokument initialisiert, ansonsten über das betreffende RichTextItem - damit sollte es eigentlich gehen...
Toni
*** edit ***
... eventuell einen Vergleich der EmbeddedObjects fahren...
Toni
-
Was gibt Dir den @AttachmentNames zurück? Wenn das Resultat noch passt, kannst Du ja eruieren,
- wie die "richtigen Attachments" heissen
- mit Evaluate ein Array aller AttachmentNames bilden und
- dann selektiv löschen.
HTH,
Bernhard
-
Danke,
ich werde das am Montag mal ausprobieren, ob ich damit weiterkomme.
Ich bin nämlich seit gestern abend schon im WE ;)
Irgendwie muss der alte Rotz doch rauszukriegen sein.
Grüsse aus dem gewittrig aussehenden München
Dau-in
-
Klar ist das 'rauszubekommen. Notfalls mit einer brutalen Methode (Toni hat ja schon eine angedeutet). Aber vielleicht kommst Du so ja schon weiter.
Beste Grüsse retour nach München aus dem genauso gewittrigen Chiemgau,
Bernhard
-
ok, so klappt es dann:
über var3 = Evaluate(|@AttachmentNames|, doc)
bekomme ich alle Attachmentnamen, danach greife ich auf das Richtextfeld zu, ziehe mir alle Embeddedobjects mit den Namen raus.
Und dann kommt der grosse Namensabgleich, und wer nur im ersten Array sitzt, wird gemeuchelt.
aber die Hilfe finde ich für Notesdocument.EmbeddedObjects missverständlich, oben steht : 'Note Embedded objects and object links are not supported for OS/2, UNIX, and the Macintosh. File attachments are.' und unten kommt dann: 'Unlike the EmbeddedObjects property in NotesRichTextItem, this property does not include file attachments' - das habe ich zuerst überlesen.
Aber das Problem ist jetzt erst mal gelöst.
liebe Grüsse
Dau-in