2017-06-28 5 views
0

私は、Excelドキュメントを表すNAVにBLOBオブジェクトを持っています。このドキュメントをJavaScript Control AddIn(WebおよびWindowsクライアントで実行)に表示することをお勧めします。しかし、私はこの問題をどのように処理するのか分かりません。 AddInの後半で、Blobをバイナリ文字列として必要とします。BlobをNavisionからJavascriptに追加する

これまでのところ私は2つのことを試みました。

まず、私はこの方法

[ApplicationVisible] 
void SetExcelDocument(ExcelDocument ExcelDocument); 

ExcelDocumentとのインタフェースを構築

を試す - オブジェクトは、NAVにしたがって、この

[Serializable] 
public class ExcelDocument 
{ 
    //Constructor 
    public ExcelDocument() 
    { 
     CurrentExcelDocument = null; 
    } 

    //store Blob 
    public Stream CurrentExcelDocument { get; set; } 

} 

のように見える、私は中にブロブを変換します.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 

コードのようなコードが実行されます。変数ナビゲーションExcelDocumentは、プロパティ「RunOnClientが」yesに設定されているときにそこでここでの問題は、私は、NAVでExcelDocumentのインスタンスを設定することができ、この

ExcelDocument DotNet <Reference to Object here>, Version=8.0.0.0, Culture=neutral, PublicKeyToken=d02dbb9bbac93844' 

として定義されます。しかし、これはWebClient(Source)では機能しません。しかし、プロパティをyesに設定しても、AddInにデータを送信することはありません。

第二には、2回目の試行のために

を試してみて、私はデータ型を変更しました。だから私はストリームの代わりにbyte[]を使用しました。だから、ICHは、この

[ApplicationVisible] 
void SetExcelDocument(byte[] ExcelDocument); 

へのインタフェースを変更し、ちょうどこの

CurrPage.spreadsheet.SetExcelDocument(MemStream.ToArray); //Call function in AddIn 

にNAVでアドイン関数呼び出しを変更してExcelDocument変数を削除しました。

これは機能しますが、データはバイナリデータのようには見えません。私はWebコンソールに表示するときに読めないものがあると思いますが、代わりに可読な文字と数字が表示されます。そして私はこれをバイナリ文字列に変換する方法がわかりません。

Vjekoのinputがありますが、これは私にとってはうまくいきません。

+0

アドインでこのシートをどうしたらいいですか?私はあなたがそれを食べることを意味していますか? –

+0

yeh基本バイナリ(バイト)文字列は、文字と0から256の文字であるため、nubmersです。 –

+0

私はAddInに表示したいだけです。おそらくいくつかの変更を行うかもしれませんが、まだ必要ではないので、私は同僚と話しませんでした。それは.Net AddInはすべて正常に動作しますが、.Net AddInはWebClientでは動作しないので、JavaScript AddInを行うことにしました。 – Torben

答えて

0

JavaScriptコントロールAddInにBLOBを送信するソリューションが見つかりました。ここに私がしたことがあります。コントロールアドインのインターフェイスで

私は法に

[ApplicationVisible] 
void SetExcelDocument(ExcelDocument exceldoc); 

を定義したところExcelDocument - クラス - オブジェクトは、魔法が今、新しいConverterで起こっているこの

[Serializable] 
public class ExcelDocument 
{ 
    public string ExcelJson; //Excel Content stored in JSON format 

    public byte[] Excel 
    { 
     get 
     { 
      return null;  //Not needed in the AddIn 
     } 
     set 
     { 
      IConverter converter = new Converter(); 
      ExcelJson = converter.ArrayBufferOfExcelDocToJson(value); 
     } 
    } 
} 

のように見えます。まもなく私はバイト配列をストリームに変換し、EPPlusの助けを借りてストリーム(それぞれExcelドキュメント)を読み、最後にNewtonsoft.JSONを持つドキュメントの内容をJson文字列(変数ExcelJson)に変換します。

NAVでは、次のようになります。

//Get Blob (Document is table column name) 
TechnicalSpreadsheet.Document.CREATEINSTREAM(Lstr_BlobInstream); 
//init Memory Stream 
MemStream := MemStream.MemoryStream();    
COPYSTREAM(MemStream,Lstr_BlobInstream); 
//Init DotNet Variable 
ExcelDocument := ExcelDocument.ExcelDocument; 
//Set byte[] 
ExcelDocument.Excel := MemStream.GetBuffer; 
//Call function in AddIn 
CurrPage.spreadsheet.SetExcelDocument(ExcelDocument); 

これは私に役立ちます。

0

XMLファイルにバイナリノードを追加するためのコードです。これにより、ファイルをバイナリデータとしてWebサービスに送信することができました。多分助けてくれるかもしれません。それはNav 5のために書かれたので、ActiveXを使用します。それを.netで置き換えることができます。

[email protected] : Text[50];VAR [email protected] : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{88D96A05-F192-11D4-A65F-0040963251E5}:'Microsoft XML, v6.0'.DOMDocument60";[email protected] : Text[1024]); 
    [email protected] : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{2933BF86-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v6.0'.IXMLDOMElement"; 
    [email protected] : Automation "{F5078F18-C551-11D3-89B9-0000F81FE221} 6.0:{2933BF86-7B36-11D2-B20E-00C04F983E60}:'Microsoft XML, v6.0'.IXMLDOMElement"; 
    [email protected] : Automation "{B691E011-1797-432E-907A-4D8C69339129} 6.1:{00000566-0000-0010-8000-00AA006D2EA4}:'Microsoft ActiveX Data Objects 6.1 Library'.Stream"; 

    Att := pXMLDoc.createElement(pNodeName); 
    CREATE(AdoStream, TRUE); 
    AdoStream.Type := 1; //Binary 
    AdoStream.Open(); 
    AdoStream.LoadFromFile(pPath); 
    Att.dataType('bin.hex'); 
    Att.nodeTypedValue := AdoStream.Read; 
    AdoStream.Close(); 
    parent := pXMLDoc.documentElement; 
    parent.appendChild(Att); 
関連する問題