ドキュメントライブラリーからのデータの読み込み(C# Silverlight + Office365 Document Library)

執筆中です。

ドキュメントライブラリーからのデータの読み込み(C# Silverlight + Office365  Document Library)

方法2は以下の2種類あります。

①OpenBinaryDirectを利用する方法

この方法をSharePoint Onlineで再度やってみたら動かない。Callbackがされずエラーすら表示できない 2012/11/30、2番の方法なら動きます。
(Office365ではSandbox では OpenBinaryDirectから直接ファイルFileInformation オブジェクトを取得できない。)

[csharp title=”方法1”]
private void doc_download2_Click(object sender, RoutedEventArgs e)
{
try
{
ClientContext context = ClientContext.Current;
//ClientContext context = new ClientContext(ApplicationContext.Current.Url); //"ClientContext.Current"と同じ

//Document Library(ドキュメントライブラリ)の相対パスを指定する。
String strServerRelativeUrl = "/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
File.OpenBinaryDirect(context, strServerRelativeUrl, OnOpenSucceeded, OnOpenFailed);
}
catch (Exception ex)
{
ShowException(ex);
}

}

private void OnOpenSucceeded(object sender, OpenBinarySucceededEventArgs args)
{
//InvokeしないとMessageBox動かない。
Dispatcher.BeginInvoke(() =>
{
try
{
//Textファイル(File)の読み込みの場合
//System.IO.StreamReader strReader = new System.IO.StreamReader(args.Stream);
//String fileContents = strReader.ReadToEnd();
//strReader.Close();

//Binaryファイル(File)の場合はSystem.IO.BinaryReader
System.IO.BinaryReader br = new System.IO.BinaryReader(args.Stream);
Byte[] dt = new Byte[args.Stream.Length];
br.Read(dt, 0, dt.Length);
br.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
}
});
}

private void OnOpenFailed(object sender, OpenBinaryFailedEventArgs args)
{
Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(args.Message + "\r\n" + args.Message);
});
}
[/csharp]

②WebClientを利用する方法

[csharp title=”方法2”]
private void doc_download2_Click(object sender, RoutedEventArgs e)
{
try
{
var client = new WebClient();
client.OpenReadCompleted += CallWebService_OpenReadCompleted2;
string s = ApplicationContext.Current.Url + "/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
//string s = "http://office365/2/Lists/List_Template/Template_Quotation_V_1_0_0.xlsx";
client.OpenReadAsync(new Uri(s, UriKind.Absolute));
}
catch (Exception ex)
{
}
}
private Byte[] m_dt = new Byte[] { };

void CallWebService_OpenReadCompleted2(object sender, OpenReadCompletedEventArgs e)
{
// エラーチェック
if (e.Error != null)
{
return;
}

System.IO.Stream sr = null;
System.IO.BinaryReader br = null;

try
{
sr = (System.IO.Stream)e.Result;
br = new System.IO.BinaryReader(sr);

m_dt = new Byte[sr.Length];
br.Read(m_dt, 0, m_dt.Length);
}
finally
{
if (br != null)
{
br.Close();
}

if (sr != null)
{
sr.Close();
}
}
return;
}
[/csharp]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA