K manipulaci binárních dat (např. binárních souborů včetně obrázků, serializovaných objektů apod.) slouží zejména třídy BinData
, BinaryIo
a Binary
. Zatímco první dvě jsou v AX2012 stejné jako v AX2009, třídě Binary
přibylo několik užitečných metod:
public static Binary constructFromContainer(container _data) public static Binary constructFromMemoryStream(CLRObject _memoryStream) public container getContainer() public CLRObject getMemoryStream()
Binary
tedy může sloužit jako jednoduché rozhraní mezi AX (používající kontejnery) a datovými proudy v prostředím .NET. Jak to může být užitečné a jak snadné to je demonstrují příklady níže.
Následující X++ kód načte obsah souboru do proměnné typu FileStream
, předá do MemoryStream
a přes Binary
vloží data do X++ kontejneru:
System.IO.FileStream fileStream = System.IO.File::OpenRead(filename); System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); int size = fileStream.get_Length(); container con; memoryStream.SetLength(size); fileStream.Read(memoryStream.GetBuffer(), 0, size); //zápis do MemoryStream con = Binary::constructFromMemoryStream(memoryStream).getContainer(); //z MemoryStream do kontejneru
Druhý příklad je v C# a vyžaduje proxy pro X++ třídy Image
a Binary
. Načte obrázek z AX pomocí resource ID a použije ho na tlačítku ve WPF:
//Načte obrázek s transparentním pozadím z AX Image axImage = new Image(); axImage.loadResource(1030); //ID nějakého obrázku axImage.saveType(ImageSaveType.PNG); //Vytvoří datový proud Binary binary = Binary.constructFromContainer(axImage.getData()); MemoryStream stream = (MemoryStream)binary.getMemoryStream(); //Vytvoří System.Windows.Media.Imaging.BitmapImage BitmapImage bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.StreamSource = memoryStream; bitmap.EndInit(); //Nastaví obrázek na tlačítko var wpfImage = new System.Windows.Controls.Image(); wpfImage.Source = bitmap; button1.Content = wpfImage;