[gelöst] Anzeige Inhalt eines BLOB-Feldes

Bild Microsoft Dynamics NAV 2015 (aka "NAV 8")

[gelöst] Anzeige Inhalt eines BLOB-Feldes

Beitragvon fragglet » 9. November 2017 14:29

Hallo zusammen,

ich habe ein BLOB-Feld, in welchem ein Text abgespeichert ist.
Gibt es die Möglichkeit, diesen Text wieder auszulesen und auf einer Page (z.B. Sales Lines)
anzeigen zu lassen?
Meine bisherigen Versuche zeigten diese Zeichen an:
ç€ŒçŒ ç„Žæ•Źâˆœæ…­æČæč©â€ș

Ich vermute das noch eine Konvertierung fehlt. Kann mir hierfĂŒr jemand einen Tip geben?

Vielen Dank und GrĂŒĂŸe
Frank
Zuletzt geÀndert von fragglet am 14. November 2017 09:50, insgesamt 1-mal geÀndert.
GrĂŒĂŸe Fragglet
fragglet
 
BeitrÀge: 358
Registriert: 27. Juli 2006 13:55

Re: Anzeige Inhalt eines BLOB-Feldes

Beitragvon Kowa » 9. November 2017 15:57

Wie sahen die Versuche denn aus?

GrundsÀtzlich hÀngt das von der Textkodierung ab, das kann ja theoretisch alles sein, was kreucht und fleucht.
Wo kommt der Inhalt denn her?

NAV kann ja nur 4 Optionen und unterscheidet bei den UTFs noch nicht einmal mit oder ohne BOM.

In Codeunit 10 Type Helper findet man diese Funktion
Code: Alles auswÀhlen
ReadTextBlobWithTextEncoding(VAR BlobFieldRef : FieldRef;Encoding : TextEncoding) BlobContent : Text
TempBlob.INIT;
BlobFieldRef.CALCFIELD;
TempBlob.Blob := BlobFieldRef.VALUE;
TempBlob.Blob.CREATEINSTREAM(InStream,Encoding);
IF InStream.READ(BlobContent) = 0 THEN;

Die wird z.B. aus Codeunit 454 Job Queue - Send Notification aufgerufen.

Alternativ wĂ€re fĂŒr UTF-8 hier ein Beispiel mit direktem .NET-Einsatz mittels BinaryReader. Damit könnte man auch Kodierungen außerhalb der NAV-internen Möglichkeiten realisieren.
https://stackoverflow.com/questions/37404789/display-blob-field-containing-text-in-rdlc-report-dynamics-nav
https://msdn.microsoft.com/de-de/library/system.io.binaryreader(v=vs.110).aspx
Gruß, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂŒr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
BeitrÀge: 7835
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Anzeige Inhalt eines BLOB-Feldes

Beitragvon Raik Zobel » 10. November 2017 17:31

Ich habe erst neulich eine entsprechende Funktion aufgrund der Konvertierung auf dotNet umgestellt, da vorher nicht alle Symbole gespeichert werden konnten.

1. Funktion: Text in Blob speichern

Variablen:
Code: Alles auswÀhlen
Name   DataType   Subtype   Length
StreamOut   OutStream      
StreamWriter   DotNet   System.IO.StreamWriter.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
Encoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   

Funktion:
Code: Alles auswÀhlen
Text2Blob(myText : Text)
CLEAR(Blob);
IF myText <> '' THEN BEGIN
  Blob.CREATEOUTSTREAM(StreamOut);
  StreamWriter := StreamWriter.StreamWriter(StreamOut,Encoding.UTF8);
  StreamWriter.Write(myText);
  StreamWriter.Flush;
  StreamWriter.Close;
END;

Aufruf im Page-Validate Trigger des Textfeldes:
Code: Alles auswÀhlen
Text2Blob(myText);



2. Funktion: Text aus dem Blob laden:
Variablen:
Code: Alles auswÀhlen
Name   DataType   Subtype   Length
myText   Text      
StreamIn   InStream      
StreamReader   DotNet   System.IO.StreamReader.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   
Encoding   DotNet   System.Text.Encoding.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'   

Funktion:
Code: Alles auswÀhlen
Blob2Text() : Text
CALCFIELDS(Blob);
IF NOT Blob.HASVALUE THEN
  EXIT('')
ELSE BEGIN
  Blob.CREATEINSTREAM(StreamIn);
  StreamReader := StreamReader.StreamReader(StreamIn,Encoding.UTF8,TRUE);
  myText := StreamReader.ReadToEnd;
  StreamReader.Close;
  EXIT(myText)
END;

Aufruf im OnAfterGetRecord Trigger der Page:
Code: Alles auswÀhlen
myText := Blob2Text;
Benutzeravatar
Raik Zobel
 
BeitrÀge: 279
Registriert: 4. MĂ€rz 2013 13:43
Realer Name: Raik Zobel
Arbeitsort: Leipzig
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 4.00SP3, 2013R2, 2016

Re: Anzeige Inhalt eines BLOB-Feldes

Beitragvon fragglet » 14. November 2017 09:49

Hallo vandyke,

vielen Dank fĂŒr deine Anleitung. Jetzt hat es funktioniert.

Viele GrĂŒĂŸe
GrĂŒĂŸe Fragglet
fragglet
 
BeitrÀge: 358
Registriert: 27. Juli 2006 13:55

Re: [gelöst] Anzeige Inhalt eines BLOB-Feldes

Beitragvon Natalie » 14. November 2017 10:04

Siehe ĂŒbrigens auch die Funktionen am Ende von XMLport 9170 (ja sorry, hĂ€tte mich vielleicht frĂŒher melden sollen :roll: )
Gruß, Natalie

Frage beantwortet oder Problem von allein gelöst? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.

Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂŒr ist dieses Forum da.
Benutzeravatar
Natalie
Moderator
Moderator
 
BeitrÀge: 9257
Registriert: 31. Oktober 2006 19:51
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: [gelöst] Anzeige Inhalt eines BLOB-Feldes

Beitragvon Raik Zobel » 15. November 2017 17:49

Na eben, da steht das ja. Sogar das Problem ist als Kommentar aufgefĂŒhrt :-D
Und ich such mich noch mĂŒhsam durch die Dot.Net Funktionen :mrgreen:
Benutzeravatar
Raik Zobel
 
BeitrÀge: 279
Registriert: 4. MĂ€rz 2013 13:43
Realer Name: Raik Zobel
Arbeitsort: Leipzig
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 4.00SP3, 2013R2, 2016

Re: [gelöst] Anzeige Inhalt eines BLOB-Feldes

Beitragvon fiddi » 15. November 2017 23:37

Na eben, da steht das ja. Sogar das Problem ist als Kommentar aufgefĂŒhrt


Anscheinend hat NAV 2015 den Kommentar in dem XML-Port noch nicht gelesen, und weiß gar nicht, dass es kein UT8 verarbeiten kann. :mrgreen: :mrgreen:
( es ist ĂŒbrigens witzig, dass in der dort erzeugten XML-Datei als Codierung UTF16 angegeben ist, der BLOB hier aber als UTF8 geschrieben wird.)

Aber Scherz beiseite:
Der Kommentar stand auch schon in der NAV2013- Version drin, und die beherrschte noch kein Textencoding. 8-)

In NAV 2015 kannst du mit TextEncoding auch bei den BLOB-Streams arbeiten, das sollte das Problem in der Form lösen, wie Kowa es beschrieben hat.
Mit der Ausnahme, dass man in NAV 2015 ein Variable vom Typ "Textencoding" noch nicht als Parameter an eine Funktion ĂŒbergeben kann.

Ansonsten hatte ich bisher keine Probleme damit.
Man muss nur höllisch aufpassen, mit welcher Codierung man was wohin geschrieben hat, damit man es mit der richtigen Codierung wieder ausließt.
Also am besten genau je eine Funktion schreiben, die den Inhalt einer Textvariable in den Blob schreibt, bzw. Ihn mit der gleichen Codierung wieder in eine Tetxvariable ausliest.

Gruß Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂŒr ist dieses Forum da.
fiddi
Moderator
Moderator
 
BeitrÀge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell


ZurĂŒck zu NAV 2015

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast