Bilder in Ansichten anzeigen

  • Hallo,


    man kann in Ansichten ja image Ressourcen anzeigen, die in der Datenbank eingebunden sind.


    Gibt es eine Möglichkeit, per Script oder Formelsprache Bilder in die Datenbank zu importieren?


    Danke für Eure Antworten


    Gruss
    Zonk

    • Offizieller Beitrag

    sieht schlecht aus. Selbst wenn es gehen würde bräuchte der Ersteller der Bildressource mind. Entwicklerrechte.


    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

  • das wäre nicht wirklich das Problem, weil die Bilder über einen periodischen Import geliefert würden. Der Agent würde dann mit Managerrechten aktiviert werden.


    Danke für Deine Antwort....


    Gruss
    Zonk

  • Mit reinen Notesmitteln ist ein automatisierter Import insofern problematisch, da die Client-Funktion "Importieren" eine UI-Funktion des Designers ist.


    Man könnte hier versuchen mit Script oder über die API entsprechende Ressourcenobjekte zu generieren.


    Was ich mir noch vorstellen könnte, wenn es ausschließlich um Objekte des Typs Image-Ressource geht, die Funktion WebDAV zu verwenden. WebDAV ist seit Release 6 extra zur Pflege von Imageressourcen mit Nicht-Notes-Clients eingeführt worden. Dazu kann man dann einen WebDAV Client einsetzen. Einige Anbieter von WebDAV-Clients haben sicherlich auch Scripte für die automatisierte periodische Pflege beigelegt und es braucht in dem Fall nichts programmiert sonder nur WebDAV aktiviert zu werden.

    • Offizieller Beitrag

    Zonk
    die Bildressourcen können per Base64-Encode und DXL importiert werden. Dazu reicht LotusScript, d.h. keine API und keine Fremdprodukte. Habe es mit JPG und GIF getestet. Die Fehlerbehandlung ist noch verbesserungswürdig.


    Aufruf:

    Code
    Sub Initialize  Dim session As New NotesSession  Dim db As NotesDatabase  Set db = session.CurrentDatabase  Dim ImageFile As String  Dim FileName As String  Dim TempPath As String  Dim Typ As String  Dim array As Variant'  ImageFile = "d:\test.jpg"  ImageFile = "d:\test.gif"  TempPath = "c:\temp\"  Array = Split(ImageFile, ".")  Typ = Lcase(Array(Ubound(Array)))  Set Array = Nothing  Array = Split(ImageFile, "\")  FileName = Lcase(Array(Ubound(Array)))  Dim b64 As New Base64  RT64 = B64.encodeFile(ImageFile, TempPath & FileName & ".txt")  If Not RT64 Then Exit Sub  RTCreateDXL = CreateDXL(TempPath & FileName & ".txt", TempPath & FileName & ".dxl", Typ, FileName)  If Not RTCreateDXL Then Exit Sub  RTImportDXL = DXLImport(db, TempPath & FileName & ".dxl")  If Not RTImportDXL Then Exit SubEnd Sub



    In Declarations importierst Du den Dateianhang. Dort ist die Class zur Base64 Codierung enthalten.


    Function CreateDXL

    Code
    Function CreateDXL(sourceFile As String, targetFile As String, Typ As String, ImageName As String) As Variant  Dim text As String  CreateDXL = True  CreateDXLError = ""  If Typ <> "gif" And Typ <> "jpg" And Typ <> "jpeg" Then    CreateDXLError = "ERROR: Falscher Typ"    CreateDXL = False  End If  If Trim(ImageName) = "" Then    CreateDXLError = "ERROR: ImageName ist leer"    CreateDXL = False  End If   fin = Freefile()  Open sourceFile For Input As fin  fout = Freefile  Open targetFile For Output As fout  Print #fout, "<?xml version='1.0' encoding='utf-8'?>"  Print #fout, "<!-- DXLExporter version 1.00 (build 72), schema (DTD) version 1.01 -->"  Print #fout, "<!DOCTYPE imageresource SYSTEM 'xmlschemas/domino_6_5_4.dtd'>"  Print #fout, "<imageresource name='" & ImageName & "' xmlns='http://www.lotus.com/dxl' version='1.01' publicaccess='false' designerversion='6.5.4'>"  If Typ = "gif" Then    Print #fout, "<gif>"  Else    Print #fout, "<jpeg>"  End If  Do While Not Eof(fin)    Line Input #fin, text    Print #fout, text  Loop  If Typ = "gif" Then    Print #fout, "</gif>"  Else    Print #fout, "</jpeg>"  End If  Print #fout, "</imageresource>"  Close #fout  Close #finEnd Function


    Function DXLImport


    Gruß
    Dirk

  • Hallo Dirk,



    ein super Beitrag, hat auch sofort funktioniert.


    Meine Frage:


    Ich habe aber das Problem, dass die Bildresource zwar sofort angelegt wird, aber ich die Datenbank erst schließen und danach wieder öffnen muß um das Bild zu sehen.


    Gibt es eine Möglichkeit um einen refresh auf die Bildresourcen zu machen, um das Bild
    z.B sofort als Zellenbild ( @GetField("picture") anzuzeigen ??



    Gruß Paul

    • Offizieller Beitrag

    Aus folgenden Gründen solltest Du für die Bild-Resourcen eine extra DB benutzen:


    - der Importer benötigt Designerrechte auf die DB und ich glaube nicht, dass Du allen Usern Entwicklerrechte geben willst.
    - weil Du das Desigen im Hintergrund änderst, muss die DB im UI erst geschlossen werden.


    Beide Punkte umgehst Du mit einer eigenen Ressourcen DB.


    Gruß
    Dirk

  • Guten Morgen Dirk,


    es sollen natürlich nicht alle diese Uploads machen, nur ein bestimmter Personenkreis und die haben Entwicklerrechte.


    Muß ich im UI die ganze DB closen oder reicht es wenn ich die Resource öffne und dann wieder close ( wenn ich die Maske aus dem Designer starte, ein Bild in die NSF speichere und anschließend im Designer die Bildresourcen öffne und wieder schließe ist das Bild sofort in der Maske verfügbar ).


    Kannst du mich da im Source-Code unterstützen, in der Ecke war ich noch nicht im Lotusscript.


    Danke


    Gruß


    Paul

    • Offizieller Beitrag
    Zitat

    es sollen natürlich nicht alle diese Uploads machen, nur ein bestimmter Personenkreis und die haben Entwicklerrechte.

    Ups ... wäre mir zu risikoreich. Ein User bekommt bei uns maximal Editorrechte auf eine DB. Am liebsten nur Autorenrechte.
    Hintergrund ein Anwender kann Dir über verschiedene Wege aus Unwissenheit oder Unaufmerksamkeit Deine komplette DB zerstören. Deshalb bei mir der Umweg über die leere DB, in der nur die Ressourcen abgelegt werden. Auf diese DB haben die User dann Entwicklerrechte, können mir aber die Gestaltung der prod. DB nicht zerstören. Diese Ressourcen DB wird eigentlich zur reinen Inhalts-DB.


    Zitat

    Muß ich im UI die ganze DB closen oder reicht es wenn ich die Resource öffne und dann wieder close ( wenn ich die Maske aus dem Designer starte, ein Bild in die NSF speichere und anschließend im Designer die Bildresourcen öffne und wieder schließe ist das Bild sofort in der Maske verfügbar ).

    Kann ich Dir aus obigen Grund nicht sagen, müsste ich auch erst testen. Meine Vermutung geht aber schon in die Richtung, dass die DB richtig geschlossen werden muss, d.h. sie darf in der Arbeitsoberfläche noch nicht mal markiert sein.
    Wenn Du die Ressource öffnest und wieder schließt, wird eventuell der Client syncronisert, d.h. es könnte funktionieren (z.B. werden Ansichten bei Änderungen im Designer auch im Client neu aufgeaut).


    Aber mal ein Ablauf, bei dem es zu sehr unschönen Nebeneffekten kommen kann:
    - User A (kein Entwickler) öffnet die DB
    - User B (Entwickler) öffnet die DB und erstellt eine neue Ressource
    - User A bekommt bis zum nächsten Öffnen der DB (oder Client-Start) diese nicht angezeigt!
    User B müsste auf allen Clients die DB ggf. schließen, bekommst Du aber nicht hin.


    Gruß
    Dirk

  • es ist doch aber auch bei einer extra NSF genauso, dass ich die DB zuerst komplett schließen muß bevor die Resourcen sichtbar werden oder liege ich da falsch und wie verhält sich das Zellenbild wenn die Bildresource nicht mehr in der eigenen nsf liegt
    ( @GetField("picture") ).


    Ich werde ja mit Sicherheit auch deinen Beispiel-Code ändern müssen, wenn die Resource in eine andere DB geschrieben werden soll.


    Gruß Paul

    • Offizieller Beitrag

    Du musst nur eine Zeile anpassen. Anstelle
    Set db = session.CurrentDatabase
    musst Du die andere DB benutzen
    Set db = session.GetDatabase("DeinServer", "Deine DB").


    Die DB musst Du nicht schließen, da diese nicht offen ist, die wird im BE zum Import geöffnet und das Objekt wird wieder geschlossen.


    Zellenbild? Thema ist doch "Bilder in Ansichten anzeigen" oder in Dokumenten als Bild-Ressource.


    OK probieren kannst Du folgendes:
    - füge irgend ein Bild aus dieser DB als Zellenhintergrund ein
    - ändere dann die Berechnung anhand eines Feldes
    - in dieses Feld muss der Name des Bildes aus der Ressourcen-DB eingetragen werden.


    Gruß
    Dirk

  • Ich kann dem Zellenhintergrund aber entweder ein Bild zuweisen, oder ein Bild über eine Formel ( @getfield(Feldname aus dem Dokument )zuweisen.


    Ich wüßte nicht wie ich hier eine ander DB angeben könnte



    Gruß Paul

    • Offizieller Beitrag

    deshalb auch erstmal ein Bild (irgendein Bild) aus der Ressourcen DB eintragen (zum DB wechseln siehe Anhang). Und dann die Formel ändern. Bei eingebetteten Bildern wird dann das Bild aus dieser Ressourcen DB genommen.


    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