Bild für Artikel

31. August 2007 11:24

Hallo

Wir möchten für unsere Artikeln Bilder hinzufügen. Nun ist mir bekannt das man in der Artikelkarte über Artikel Bild ein Bild einfügen kann. Mir stellt sich die Frage ist dies der richtige Weg oder sollten wir die Artikelkarte mittels einen neues Register erweitern und dort die Artikeln über eine externe Referenz (spriche Sharefreigabe) hinzufügen.

mfg
stony

31. August 2007 11:50

Wieso sollte es deiner Meinung nach nicht der richtige Weg sein ...?

31. August 2007 14:43

Wenn du das Bild über die Standardfunktion an den Artikel hängst, muss es im Format BMP vorliegen. Das Bild wird dann in der DB gespeichert.

Wenn du die Bilder mittels eines Verzeichniseintrages 'verlinkst' bist du frei in der Wahl des Dateiformates. Die Bilder werden dann auf der Festplatte gespeichert. Alle Benutzer müssen dann darauf einen Zugriff haben.

Meiner Meinung nach gibt es hier kein richtig oder falsch, sondern nur die Frage: was ist mir lieber?

7. September 2007 11:27

Kann ich dann das Bild in der Artikelkarte anzeigen lassen z.B. als JPG-Format. Wenn Ja, als welches Objekt muss ich das machen.

mfg
stony

7. September 2007 11:32

Guck dir doch an, wie das auf der Maske "Firmendaten" gelöst worden ist. Da wird das Firmenlogo auch direkt in der Form angezeigt.

7. September 2007 11:56

Kann ich hier auch andere Formate als BMP einbinden.

7. September 2007 12:14

stony hat geschrieben:Kann ich hier auch andere Formate als BMP einbinden.

Du kannst zwar alle möglichen Dateiformate (bis zu 2GB Größe) in ein BLOB-Feld importieren, jedoch kann Navision nur BMP-Dateien auf der Form anzeigen.

7. September 2007 12:46

Heißt das, das ich kein Bildformt JPEG in der Artikelkarte anzeigen kann, wenn ich es über eine Link (zeigt auf eine Datei im Verzeichnis) einbinden möchte.

7. September 2007 13:16

stony hat geschrieben:Heißt das, das ich kein Bildformt JPEG in der Artikelkarte anzeigen kann, wenn ich es über eine Link (zeigt auf eine Datei im Verzeichnis) einbinden möchte.

Wie bereits geschrieben:
Die PictureBox von Navision kann nur Bilder in BLOB-Feldern anzeigen, welche im Format BMP vorliegen.
Wenn du Bilder (oder sonstige Dateien) in anderen Formaten vorliegen hast, kannst du in Navision nur die URL zu der Datei in einem entsprechenden Textfeld hinterlegen.
Willst du das Bild / die Datei dann öffnen, so musst du auf der Artikelkarte eine Schaltfläche anlegen, welche im OnPush-Trigger einen Hyperlink auf das Textfeld ausführt.
Z. B.
Code:
HYPERLINK("Externes Artikelbild");

In dem Feld muss allerdings eine Pfadangabe hinterlegt sein, welche von allen Arbeitsplätzen aus erreicht werden kann, daher empfiehlt sich die UNC-Schreibweise
\\Server-Name\Freigabe-Name\Verzeichnis\Dateiname.jpg

24. September 2007 15:40

Ich hatte dasselbe Problem und habe es folgendermassen gelöst:
Wir haben einen Ordner in dem sind alle Artikelbilder vorhanden, als JPG. Name der Files richtet sich nach Artikelnr.Laufnummer.JPG

1 Tabelle zur Einrichtung
Feld 1 - Primärschlüssel /int
Feld 10 - Bilderpfad /Text 1024
Feld 100 - Temporäre BLOB Referenz /Blob

Die ganze Baustelle funktioniert folgendermassen:

User öffnet eine Form mit der PictureBox. Aus der Form wird eine Codeunit gestartet die anhand des Pfades der Tabelle das JPG sucht. Diese Codeunit startet via automationserver eine C# Dll die das JPG in ein BMP konvertiert, im Temporären Ordner abspeichert und den kompletten Pfad an Navision zurückgibt. Die Codeunit lädt das BMP in das BLOB Feld, der allerdings jetzt Temporären Record Variable und gibt diese an die Form zurück, wo es in der Picturebox dargestellt wird. Anschliessend wird das BMP gelöscht.

Ist die beste Lösung die mir eingefallen ist, funktioniert soweit auch ohne Störungen. Allerdings muss ich die DLL noch ein bisschen professioneller Aufbauen, da sie eigentlich erst in Entwicklung ist. (Kommen noch weitere Funktionen hinzu.)

So könnte das ganze angesprochen werden
c/al Source:
Code:

CREATE(lasBM);

ltFilePath := lasBM.ConvertImage('c:\test.jpg');
IF NOT EXISTS(ltFilePath) THEN
  EXIT(FALSE);
lrecTempBM."Temporäre BLOB Referenz".IMPORT(ltFilePath);
IF NOT ERASE(ltFilePath) THEN
  EXIT(FALSE);
lrecTempBM.CALCFIELDS("Temporäre BLOB Referenz");

CLEAR(lasBM);

EXIT(TRUE);


Bei intresse kann ich auch die kompilierte DLL einstellen.

24. September 2007 15:41

Rick hat geschrieben:Bei intresse kann ich auch die kompilierte DLL einstellen.



Hier ein Ausschnitt der Funktion in C#...
Code:
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;


        public string ConvertImage(string strFilePath)
        {
            try
            {
                bitmap = new Bitmap(strFilePath);
               
                string strTempPath = Path.GetTempPath() + Path.GetFileName(strFilePath);
                strTempPath = strTempPath.Substring(0,strTempPath.LastIndexOf('.'))+".BMP";

                bitmap.Save(strTempPath, ImageFormat.Bmp);
                return strTempPath;
            }
            catch
            {
                return "";
            }
        }