Artikelbild auf Report

25. November 2016 11:43

Hallo zusammen,

ich möchte gern die Bilder aus der Tabelle Item auf das Verkaufsangebot bringen.

Kernfragen:
- Wo muss der Code für CALCFIELDS hin und
- wie muss der Code aussehen? Mit dem hier klappt es leider nicht...
Code:
IF Type=Type::Item THEN BEGIN
Item.GET("No." );
Item.CALCFIELDS(Picture);
END;


- Wo muss das Dataitem genau hin, wenn das Artikelbild je Zeile angedruckt werden soll?
Mein DataItem bezieht sich auf Item.Picture (globale Variable ist hinzugefügt) und hat den Namen für RDLC "ItemPicture".

Leider wird nichts angezeigt. Wenn ich das Bild als "Embedded" einfüge, klappt alles. Wo liegt der Fehler?

Danke für Eure Hilfe!

Gruß
Christoph

/edit: ich bin übrigens genau nach der MSDN-Anleitung vorgegangen. Nach der sollte es auch ohne Code klappen, aber nur, wenn das Haupt-DataItem die Tabelle "Item" ist...

Re: Artikelbild auf Report

25. November 2016 13:42

Dynamixx hat geschrieben:- Wo muss der Code für CALCFIELDS hin und
- wie muss der Code aussehen? Mit dem hier klappt es leider nicht...

so ist es allerdings richtig

Dynamixx hat geschrieben:- Wo muss das Dataitem genau hin, wenn das Artikelbild je Zeile angedruckt werden soll?


welches DataItem? Hast du nicht lediglich eine glob Variable (Item) angelegt und holst dir im DataItem RoundLoop (Report 204) das Item (dein Code oben)?
Die Variable bzw. Item.Picture dann einfach nur im DataItem hinzufügen

ich bin übrigens genau nach der MSDN-Anleitung vorgegangen


ein Link wäre toll ...jetzt muss ich googlen :wink:

und da ist er
https://msdn.microsoft.com/en-us/library/dd301353(v=nav.90).aspx

Re: Artikelbild auf Report

25. November 2016 13:58

Hier ist eine Anleitung mit Bildern. Da geht es zwar um Bild im Kopf statt in den Zeilen, aber sonst artverwandt.
https://saurav-nav.blogspot.de/2014/04/nav-2013-and-nav-2013-r2-add-image-in.html

Re: Artikelbild auf Report

28. November 2016 08:54

Guten Morgen,

leider klappt es auch nach dem Tipp mit dem Roundloop nicht.

Ich habe mal ein paar Screenshots erstellt. Evtl. ist der Fehler ja da irgendwo zu suchen...

(Wenn ich den Code im RoundLoop - OnPreDataItem einfüge, dann erscheint keine Meldung, aber auch kein Bild...)

Danke und Gruß
Christoph
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Artikelbild auf Report

28. November 2016 09:06

Eine Quellextzeile ist falsch. Du willst doch die Artikelnr. aus der VK-Zeile lesen, um damit den Artikel zu laden.
Also:
Code:
Item.GET(SalesLine."No.");

Re: Artikelbild auf Report

28. November 2016 09:41

Und dann muss der Code im OnAfterGetRecord stehen.

Re: Artikelbild auf Report

28. November 2016 11:15

Natalie hat geschrieben:Eine Quellextzeile ist falsch. Du willst doch die Artikelnr. aus der VK-Zeile lesen, um damit den Artikel zu laden.


Danke für die Hinweise auch an McClane.

Das führt dann leider zur beigefügten Meldung:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Artikelbild auf Report

28. November 2016 13:23

Hallo Christoph,

da es sich um Dynamics NAV 2017 handelt, hat sich der Feldtyp geändert. Seit dieser Version ist "Picture" von Typ MediaSet. Informationen dazu findest du hier: Working With Media on Records.

Ein Beispielbericht ist dieser:
R50000_ItemList.txt
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Artikelbild auf Report

28. November 2016 13:59

Hallo Carsten,

vielen Dank für die Info. Könntest Du mir das Objekt bitte als .fob bereitstellen? Ich habe leider keine Lizenz, um Text-Dateien importieren zu können.

Vielen Dank und Grüße
Christoph

Re: Artikelbild auf Report

28. November 2016 14:12

Hallo Christoph,

brauch ich gar nicht :-) Der Kern ist folgende Funktion:

Code:
    LOCAL PROCEDURE GetFirstMediaFromSet@1000000000(MediaSetID@1000000000 : GUID;VAR TempBlob@1000000001 : Record 99008535) : Boolean;
    VAR
      TenantMediaSet@1000000002 : Record 2000000183;
      OStream@1000000003 : OutStream;
    BEGIN
      CLEAR(TempBlob);
      TenantMediaSet.SETRANGE(ID, MediaSetID);

      IF TenantMediaSet.FINDFIRST THEN BEGIN
        TempBlob.Blob.CREATEOUTSTREAM(OStream);
        TenantMediaSet."Media ID".EXPORTSTREAM(OStream);

        EXIT(TRUE);
      END;

      EXIT(FALSE);
    END;


Diese wird so aufgerufen. TempBlob ist dabei eine globale Record Variable von Subtype "TempBlob":

Code:
               OnAfterGetRecord=BEGIN
                                  IF NOT GetFirstMediaFromSet(Item.Picture.MEDIAID, TempBlob) THEN BEGIN
                                    CurrReport.SKIP;
                                  END;
                                END;


Der Rest dann wie gehabt, TempBlob.Blob enthält das Bild, dieses kann im Report in einer PictureBox angezeigt warden.

Re: Artikelbild auf Report

30. November 2016 15:09

SilverX hat geschrieben:
Code:
    LOCAL PROCEDURE GetFirstMediaFromSet@1000000000(MediaSetID@1000000000 : GUID;VAR TempBlob@1000000001 : Record 99008535) : Boolean;
    VAR
      TenantMediaSet@1000000002 : Record 2000000183;
      OStream@1000000003 : OutStream;


Vielen Dank, ich stehe wohl irgendwie auf dem Schlauch. Jedenfalls bekomme ich die lokalen Variablen nicht so hin, dass ich die Funktion in meinen Report im Trigger "RoundLoop - OnAfterGetRecord" einbinden kann.
Folgendermaßen sieht es bei mir aus (Dateianhang).

Ich entschuldige mich im Voraus, ich versuche zu entwickeln, obwohl ich kein Entwickler bin :twisted:
Aber ich würde es bei dieser Gelegenheit gern verstehen...

Danke und Gruß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Artikelbild auf Report

30. November 2016 15:58

Hallo Christoph,

du musst in den Globals eine neue Funktion anlegen: GetFirstMediaFromSet.
Dann IN der Funktion legst du 2 Parameter an (Locals): MediaSetID, TempBlob
Zusätzlich IN der Funktion zwei lokale Variablen: TenantMediaSet, OStream.
Rückgabewert Boolean.
Dann dort den obigen Code rein.

Abschließend im OnAfterGetRecord:

Code:
                                  IF NOT GetFirstMediaFromSet(Item.Picture.MEDIAID, TempBlob) THEN BEGIN
                                    CurrReport.SKIP;
                                  END;

Re: Artikelbild auf Report

6. Dezember 2016 08:59

Moin Carsten,

vielen Dank für die Mühe. Ich habe mich nochmal daran versucht. Wenn ich es, für mein Verständnis, nach Anleitung mache, sorgt wohl das CurrReport.SKIP dafür, dass der Report nur Kopfdaten hat und keine Zeilen mehr. Kommentiere ich den Code aus, passt es wieder...

Ich werde die Tage nochmal ein paar Screenshots einstellen, was ich vor habe und evtl. können wir das ja doch gemeinsam lösen. Ansonsten muss ich mich eben an unseren Partner wenden :-?