Store Blob value in XML

ta5ta5 Member Posts: 1,164
edited 2015-01-20 in NAV Three Tier
Hi

I want to store a Blob value in a xml file.

The xml has to look like that:

..
<file_list>
<file>here is the base64 encoded content of the file</file>
</file_list>
..

The file is stored in a Blob, for example the item picture. The solution should work without to store the file first in a file.

Thx a lot in advance
Thomas

Answers

  • Luc_VanDyckLuc_VanDyck Member, Moderator, Administrator Posts: 3,633
    The info in this blog article could get you started: Binary data with NAV Web Service. Have a look at the code in the GetItemPicture method (in the web service codeunit).
    No support using PM or e-mail - Please use this forum. BC TechDays 2024: 13 & 14 June 2024, Antwerp (Belgium)
  • MarijnMarijn Member Posts: 69
    LOCAL PROCEDURE GetItemPicture@1000000026(ItemNo@1000000005 : Code[20];VAR Picture@1000000006 : BigText);
    VAR
    Item@1000000007 : Record 27;
    IStream@1000000004 : InStream;
    MemoryStream@1000000003 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.IO.MemoryStream";
    Bytes@1000000001 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array";
    Convert@1000000000 : DotNet "'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Convert";
    BEGIN
    //**
    // Function to convert a blobfield to a BigText base64 encoded string.
    //*

    Item.GET(ItemNo);
    Item.CALCFIELDS(Picture);
    IF NOT Item.Picture.HASVALUE THEN
    EXIT;

    Item.Picture.CREATEINSTREAM(IStream);
    MemoryStream := MemoryStream.MemoryStream();
    COPYSTREAM(MemoryStream, IStream);
    Bytes := MemoryStream.GetBuffer();
    Picture.ADDTEXT(Convert.ToBase64String(Bytes));
    END;

    For NAV2013 I suggest you replace the BigText variable with a normal text one. For 2009 you'll need the BigText.
  • ta5ta5 Member Posts: 1,164
    Hi Luc and Marijn
    Thx to you both, it works like a charm.
    As a last line, I added
    XMLMgt.AddElement(XMLNodeCurr,'file',Convert.ToBase64String(Bytes)),'',XMLNodeCreated);
    
    to have the value stored in the xml structure.
    Thx again and have a nice day
    Thomas
Sign In or Register to comment.