Lesen des Attachment Namen

  • Hallo zusammen,


    auch auf die Gefahr hin das die Antwort schon mehrfach gepostet wurde stell ich meine Frag trotzdem.


    Über die Eigeschaft "Name" bzw. "Source" der Klasse "NotesEmbeddedObject" soll der Name eines Anhangs ausgelesen werden.
    Leider wird dies, in der Hilfe, lediglich über das Objekt durchgeführt wo der Name beireits angegeben werden muss.


    Set object = rtitem.GetEmbeddedObject( "City picture" )
    sourceName = object.Source


    Wie soll das gehen? Wenn ich den Namen des Anhangs bereits habe brauch iich diesen nicht zwangsläufig ermitteln, oder?


    Wahrscheinlich steht bei mir einfach gerade einer aus der Leitung.


    Vielen Dank.


    Grüße Barnie

  • Du kannst auch über die Eigenschaften EmbeddedObjects des NotesRichTextItems bzw des NotesDocuments gehen, je nachdem wo das Attachment angehängt ist.
    Und da brauchst du die Namen erst mal nicht


    [color=FF0000]Bitte aufs Themenpräfix achten[/color]

  • Hallo,
    danke für die schnelle Antwort.
    Das blöde bei der Sache ist nur das ich den Namen selber später brauche.


    Kannst du mir ein Beispiel für das NotesRichTextItems geben.


    Vielen Dank.


    Barnie

  • Du meinst sicherlich dieses, oder?


    (1)Dim doc As NotesDocument
    (2)Dim rtitem As Variant
    (3)'...set value of doc...
    (4)Set rtitem = doc.GetFirstItem( "Body" )
    (5)If ( rtitem.Type = RICHTEXT ) Then
    (6) Forall o In rtitem.EmbeddedObjects
    (7) If ( o.Type = EMBED_ATTACHMENT ) Then
    (8) Call o.ExtractFile( "c:\samples" & o.Source )
    (9) Call o.Remove
    (10) Call doc.Save( False, True )
    (11) End If
    (12) End Forall
    (13)End If


    Was mach der mit der Laufvar. "o"?
    Bei mir komme ich nichteinmal über die Zeile 6 hinaus.
    Irgendwie klappt das alles bisher nicht so richtig.


    Grüße Barnie

  • Vielleicht weil bei dir das RichTextItem anders heisst, an dem die Attachments dranhängen oder sie eben nicht dort dranhängen.


    Du solltest dich vielleicht auch erst mal ein wenig mit den grundlagen von LotusScript beschäftigen

  • Wäre zu schön gewesen. Der RichtextItem Name passt und wir auch gefunden. Zeile 5 ist noch OK im Debuger. Nur mit Zeile 6ff habe ich ein Problem. Muss ich die Var "o" deklarieren?
    Habs mit Variant probiert. Ohne Erfolg.

  • Nein musst du nicht. Deswegen mein Hinweis darauf dich mit den LotusScript Grundlagen zu beschäftigen.


    Und wenn die Attachments tatsächlich am RichText Item namens Body hängen, dann funktioniert das Script auch genau so

  • Dann werden, wie ich bereits sagte, eben keine Attachments an dem RichTextItem hängen, denn dann ist EmbeddeObjects leer und eben kein Array.


    Verwende doch einfach mal den Debugger dann siehst du es ja

  • Einen guten morgen euch allen.
    Anbei ein Auszug aus dem momentan aufgebauten code. Ich muss diesen noch entsprechend erweitern, wenn ich den Namen des Anhang gefunden habe.


    Wenn ich das Script mir noch einmal im Debuger anschaue bring er mit ein separates Item mit dem Namen "Attechment". Normalerweise sollte doch ein Anhang, sofern ich über Notes maile immer im Bodyfeld enthalten sein, oder?



    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim view As NotesView
    Dim doc As NotesDocument
    Dim rtitem As Variant
    Dim nam As NotesName
    Dim obj As NotesEmbeddedObject
    Dim objName As String

    Set db = session.CurrentDatabase
    Set view = db.getView("Inbox")
    Set doc = View.GetFirstDocument

    While Not (doc Is Nothing)
    If doc.HasEmbedded Then
    i = 1
    Set rtitem = doc.GetFirstItem("body")
    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) Then
    'Name des Dateianhang soll hier verglichen werden
    End If
    End Forall
    Set doc = view.GetNextDocument(doc)
    End If
    Wend

  • Hi,


    Zitat

    Normalerweise sollte doch ein Anhang, sofern ich über Notes maile immer im Bodyfeld enthalten sein, oder?


    Prinzipiell schon.


    Aber es gibt auch die beruehmten Ausnahmen.


    Hast Du Dir auch schon mal die Eigenschaften des betreffenden Dokumentes angesehen, um sicherzusteleln, dass die Anhaenge auch wirklich in dem Feld "Body" stehen.


    Und ist dies hier ein Schreibfehler oder gibt es wirklich ein derartiges Feld in Deinem Dokument.

    Zitat

    dem Namen "Attechment".


    Andreas

  • Warum ist bei dir "rtitem" ein Variant? Sauberer wäre ein NotesRichTextItem. Zumal dann auch die unsinnige Prüfung auf den Type wegfiele.
    Dann versuchst du dir die EmbeddedObjects vom Item zu holen; was passiert, wenn du direkt das Dokument anpiekst?

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Den Typ habe ich geändert.
    In der Zeile
    Forall o In rtitem.EmbeddedObjects
    kommt jedoch trotzdem noch "Type mismatch". Bisher dacht ich immer das die Fehlermeldung darauf hinweist, das die Var nicht korrekt declariert ist. Oder?
    Habe auch schon probiert über NotesDokument Class zu gehen, jedoch auch ohne Erfolg.

  • RockWilder


    Der Code an sich ist schon korrekt unter den genannten Vorraussetzungen, denn es gibt keine Methode sich ein RichTextItem direkt zu holen, sondern immer nur über den Umweg des Items und da sollte die Prüfung auf den richtigen Item-Typ auf jeden Fall drin sein.


    Barnieske


    Warum in der zeile ein Type Mismatch kommt habe ich schon mal gesagt und auch was du prüfen sollst. Bisher hast du das wohl nur geflissentlich ignoriert, also hol es bitte endlich mal nach.

  • Zitat


    taurec schrieb:
    RockWilder


    Der Code an sich ist schon korrekt unter den genannten Vorraussetzungen, denn es gibt keine Methode sich ein RichTextItem direkt zu holen, sondern immer nur über den Umweg des Items und da sollte die Prüfung auf den richtigen Item-Typ auf jeden Fall drin sein.


    Da hast du schon Recht. Nur ist es "schöner anzusehen". Weil, wenn ich die Inbox durchkämme, gehe ich von den Masken Memo oder Appointment aus und bei denen weiß ich, dass das Item Body vom Typ RichText ist. Natürlich ist es immer geboten so zu programmieren, dass man auf alle oder wenigstens die allermeisten Fälle vorbereitet ist. Hier aber ist der Einsatzbereich eng umrissen, von daher kann der Code straff und clean gehalten werden. Meiner Ansicht nach jedenfalls.



    /edit:
    Nachtrag Barnieske
    Du holst dir das Item "body" anstatt "Body". Ich bin mir gerade nicht sicher, ob das case-sensitive ist. Probier das doch mal aus.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Bist du sicher, daß du das weißt ?


    Was ist wenn der User versehentlich aus einer anderen DB ein Dokument in die Inbox kopiert wo das eben nicht der Fall ist ?
    Schon fliegt das ganze Script ohne diese Prüfung auf die Nase

  • A-tens definiere ich das jetzt als gewusst. Punkt! :D
    B-tens: was soll schon passieren? Kopiere ich aus welchen Gründen auch immer ein "nicht passendes" Dokument rein, fliegt das Script beim GetItem schon raus, eben weil es Body nicht gibt. Spätestens aber in der ForAll-Schleife, weil das Array leer ist. Problem gelöst. Natürlich wäre ein Error Handling hier eine feine Idee, wie es sich nun einfach mal für jedes Script >3 Zeilen gehört.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl