Import Bilddatei aus Ressourcen in Maildatenbank

  • Hi !
    ich möchte gern auf die Bilder im Bereich "Ressourcen" in der Maildatenbank zugreifen.
    Weiss aber nicht wirklich wie ?!


    Hatte es mit einem kleinen Import versucht. Aber ich weiss nicht, wie ich auf die Bilder zugreifen kann ?(
    Kann mir jemand einen Tipp geben :?:


    Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Set uidoc = workspace.CurrentDocument
    Call uidoc.GotoField("Body")
    Call uidoc.Import("GIF Image", "xxx.gif")
    End Sub

    • Offizieller Beitrag

    geht per Notes-API


    Aufruf mit
    Sub InsertResourceImage(doc As NotesDocument, item As String, image As String, server As String, file As String)
    doc ... Dokument, in das die Bild-Res eingefügt werden soll
    item ... Name des RT-Items, in dass die Bild-Res eingefügt werden soll
    image ... Name der Bild-Res.
    server und filde ... Angaben zur DB, in der sich die Bild-Res befindet.


    Gruß
    Dirk



    Code
    ' *****  Declaration *****Type CDRESOURCE    signature As Integer    length As Integer    flags As Long    type As Integer    class As Integer    length1 As Integer    serverHintLength As Integer    FileHintLength As Integer    reserved (3) As Integer    replicaId(3) As Integer    name As String * 100End TypeDim NULLHANDLE As LongDeclare Function NSFDbOpen Lib "nnotes.dll" Alias "NSFDbOpen" ( Byval dbName As String, hDb As Long) As IntegerDeclare Function NSFDbClose Lib "nnotes.dll" Alias "NSFDbClose" ( Byval hDb As Long) As IntegerDeclare Function NSFNoteOpen Lib "nnotes.dll" Alias "NSFNoteOpen" (Byval hDB As Long, Byval id As Long, Byval openFlags As Long, hNote As Long) As Integer Declare Function NSFNoteClose Lib "nnotes.dll" Alias "NSFNoteClose" (Byval hNote) As Integer Declare Function NSFNoteUpdate Lib "nnotes.dll" Alias "NSFNoteUpdate" (Byval hNote As Long, Byval flags As Integer) As Integer Declare Function NSFItemAppend Lib "nnotes.dll" Alias "NSFItemAppend" ( Byval hNote As Long, Byval flags As Integer, Byval item_name As String, Byval name_len As Integer,Byval item_type As Integer, item_value As CDRESOURCE, Byval value_len As Integer) As Integer    Declare Function NSFItemDelete Lib "nnotes.dll" Alias "NSFItemDelete" ( Byval hNote As Long, Byval item As String, Byval length As Integer) As Integer    Declare Function OSLoadString Lib "nnotes.dll" Alias "OSLoadString" (Byval hModule As Long, Byval rc As Integer, Byval ErrorText As String, length As Long) As Integer


    Code
    Sub InsertResourceImage(doc As NotesDocument, item As String, image As String, server As String, file As String)    Dim session As New NotesSession    Dim db As NotesDatabase    Dim resourceDB As NotesDatabase    Dim replicaID As String    Dim id As String    Dim dbpath As String    Dim hDB As Long    Dim hNote As Long    Dim cd As CDRESOURCE    ' Initialize the CDRESOURCE structure    cd.signature = &HFF00 Or 246    cd.length = 34    cd.type = 3    cd.class = 8    cd.serverHintLength = 0    cd.FileHintLength = 0    cd.Name = image    cd.length1 = Len(image)    cd.length = cd.length+cd.length1    'Build the path to the database    Set db = doc.ParentDatabase    If db.Server = "" Then        dbpath = db.Filepath    Else        dbpath =db.Server+"!!"+db.FilePath    End If    If file <> "" Then        Set resourceDB = session.GetDatabase(server,file)        If resourceDB.IsOpen Then            replicaID = resourceDB.ReplicaID            cd.replicaId(3) = Val("&H"+Left(replicaID,4))            cd.replicaId(2) = Val("&H"+Mid(replicaID,5,4))            cd.replicaId(1) = Val("&H"+Mid(replicaID,9,4))            cd.replicaId(0) = Val("&H"+Right(replicaID,4))        End If    End If    ErrorCheck(NSFDbOpen( dbPath, hDb))     id = Val("&H"+doc.NoteId)    ErrorCheck(NSFNoteOpen(hDB, id ,0, hNote))     Call NSFItemDelete(hNote, item, Len(item))        ErrorCheck(NSFItemAppend(hNote, 4, item, Len(item),1,cd,cd.length))        ErrorCheck(NSFNoteUpdate(hNote, 1))     ErrorCheck(NSFNoteClose(hNote))     ErrorCheck(NSFDbClose(hDB)) End Sub
    Code
    Sub ErrorCheck(rc As Integer)
        If rc > 0 Then
            Dim errorText As String * 255
            Dim length As Long
            Call OSLoadString(NULLHANDLE, rc, ErrorText, 255)
            Error rc, ErrorText
        End If
    End Sub

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

    • Offizieller Beitrag

    die Code-Teile kannst Du so in ein Script kopieren.
    Der erste Teil kommt unter Declaration.
    Der 2. und 3. Teil sind eigene Subs - einfach als Block unter ein End Sub kopieren, der Designer erstellt dann die jeweilige Sub.


    Nachdem du ein Stück Script-Code gepostet hast, denke ich, dass du an ein Backend-Dokument und an das Datenbank-Objekt herankommst und dies als Parameter übergeben kannst.


    Ist dein DB-Object db und dein NotesDocument doc und dies passiert alles in der Mail-DB, dann wird die Sub im Script so aufgerufen:

    Code
    image = "Name des einzufügenden Bildes"
    InsertResourceImage(doc, "Body", image, db.Server, db.Filepath)


    Natürlich muss das doc noch gespeichert werden.


    Gruß
    Dirk

  • Hi ! jup, dass passt alles.
    Aber hier stimmt noch was nicht :( Wenn ich den Button jetzt teste, kommt die Meldung "Object Variable not set".



    Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim body As NotesRichTextItem
    Set db = session.CurrentDatabase
    image = "xx.gif"
    Server = "Servername"
    Call doc.GotoField("Body")
    Call InsertResourceImage(doc, "Body", "image", db.Server, db.Filepath)
    Call doc.Save(True, False)
    End Sub

    • Offizieller Beitrag

    Kommentare sind im Code.


    In Zeile 14 musst du noch das passende Backend-Dokument holen.


    Gruß
    Dirk


  • Hi Dirk, Danke für Deine Geduld :)
    Leider noch eine letzte Sache.
    Ich bekomme den Fehler -> Type Mismatch on IMAGE.
    Vielleicht hast Du noch einen letzten Tipp.


    ###################################################


    Sub Click(Source As Button)
    Dim ws As NotesUIWorkspace
    Dim s As Notessession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim body As NotesRichTextItem

    Set ws = New NotesUIWorkSpace
    Set s = New NotesSession
    Set db = s.CurrentDatabase
    image = "accept.gif"

    Set doc = Memo
    If doc.HasItem("Body") Then
    Set item = doc.GetFirstItem("Body")
    Else
    Set item = New NotesRichTextItem(doc, "Body")
    End If

    Call InsertResourceImage(doc, "Body", image, db.Server, db.Filepath)
    Call doc.Save(True, False)
    End Sub

  • ich hab noch :


    Dim image As String


    mit aufgenommen, aber dann bringt das Script beim Ausführen den Fehler:
    "Falscher Datentyp in Methode NRun:FROMVAR wurde gefunden. Unknown wurde erwartet.

    • Offizieller Beitrag

    Wo kommt das Memo (NotesDocument) her?


    Schalte mal den Debugger ein und schau in welcher Zeile der den Fehler bringt.


    Gruß
    Dirk

  • Hab´s geändert.
    Jetzt kommt keine Fehlermeldung mehr. Aber das Script macht auch nichts.
    Das Bild liegt in der Maildatenbank in Unter Ressourcen\Bilder. Muss ich das noch spezieller im Pfad für "image" angeben ?


    Sub Click(Source As Button)
    Dim ws As NotesUIWorkspace
    Dim s As Notessession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim body As NotesRichTextItem
    Dim image As String

    Set ws = New NotesUIWorkSpace
    Set s = New NotesSession
    Set db = s.CurrentDatabase
    image = "icon_lol.gif"

    Set doc = New NotesDocument (db)

    If doc.HasItem("Body") Then
    Set item = doc.GetFirstItem("Body")
    Else
    Set item = New NotesRichTextItem(doc, "Body")
    End If

    Call InsertResourceImage(doc, "Body", image, db.Server, db.Filepath)
    Call doc.Save(True, False)
    End Sub

    • Offizieller Beitrag

    Das Bild liegt in der Maildatenbank in Unter Ressourcen\Bilder. Muss ich das noch spezieller im Pfad für "image" angeben ?

    Nein, denn dies wird als Parameter mitgegeben.

    server und filde ... Angaben zur DB, in der sich die Bild-Res befindet.


    Ich verwende das Script im PostSave und aktualisiere dann die Ansicht, damit die Bilder in der Ansicht erscheinen.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein