【发布时间】:2017-06-28 11:46:35
【问题描述】:
我在 NAV 中有一个 Blob 对象,它代表一个 Excel 文档。我希望此文档显示在我的 JavaScript 控件插件中(在 Web 和 Windows 客户端中运行)。但我不确定如何处理这个问题。稍后在 AddIn 中,我需要将 Blob 作为二进制字符串。
到目前为止,我尝试了两件事。
第一次尝试
我用这个方法构建了一个接口
[ApplicationVisible]
void SetExcelDocument(ExcelDocument ExcelDocument);
ExcelDocument - 对象看起来像这样
[Serializable]
public class ExcelDocument
{
//Constructor
public ExcelDocument()
{
CurrentExcelDocument = null;
}
//store Blob
public Stream CurrentExcelDocument { get; set; }
}
所以在 NAV 中,我将 Blob 转换为 .Net MemoryStream 变量,如下所示
MemStream DotNet System.IO.System.IO.MemoryStream.'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
还有这样的代码
TechnicalSpreadsheet.CALCFIELDS(Document); //Get Blob (Document is table column name)
TechnicalSpreadsheet.Document.CREATEINSTREAM(Lstr_BlobInstream);
MemStream := MemStream.MemoryStream();
COPYSTREAM(MemStream,Lstr_BlobInstream);
ExcelDocument := ExcelDocument.ExcelDocument; //Initialize Object
ExcelDocument.CurrentExcelDocument := MemStream; //set MemoryStream
CurrPage.spreadsheet.SetExcelDocument(ExcelDocument); //Call function in AddIn
当 AddIn 准备好时执行代码。 Nav 变量ExcelDocument 被定义为这个
ExcelDocument DotNet <Reference to Object here>, Version=8.0.0.0, Culture=neutral, PublicKeyToken=d02dbb9bbac93844'
所以这里的问题是,当属性“RunOnClient”设置为yes时,我只能在NAV中设置ExcelDocument的实例。但这不适用于 WebClient (Source)。但是,即使将属性设置为 yes,也不会将数据发送到 AddIn。
第二次尝试
对于第二次尝试,我更改了数据类型。所以我使用了byte[] 而不是流。于是我把界面改成了这个
[ApplicationVisible]
void SetExcelDocument(byte[] ExcelDocument);
只是将 NAV 中的 AddIn 函数调用更改为此
CurrPage.spreadsheet.SetExcelDocument(MemStream.ToArray); //Call function in AddIn
并删除了ExcelDocument 变量。
这可行,但数据看起来不像二进制数据。在 Web 控制台中显示它时,我会期待一些不可读的东西,但我会得到可读的字母和数字。而且我不确定如何将其转换为二进制字符串。
Vjeko 有一些不错的input,但这对我也不起作用。
【问题讨论】:
-
您要在加载项中使用此工作表做什么?我的意思是你要把它喂给什么?
-
而且你基本上二进制(字节)字符串只是字母和数字,因为它是从 0 到 256 的字符。
-
我只想在 AddIn 中显示。也许做一些改变,但我没有和我的同事谈论这个,因为它还不是必需的。这是一个 .Net 插件,一切正常,但 .Net 插件在 WebClient 中不起作用,所以我决定做一个 JavaScript 插件。
标签: navision dynamics-nav