1,874 views(since 2013/10/08)

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

執筆中です。

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

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

①OpenBinaryDirectを利用する方法

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

        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);
            });
        }

②WebClientを利用する方法

        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;
        }

Filed Under: Office365 App

About the Author

野呂清二(ご連絡はこちらまで (http://www.exceedone.co.jp/inquiry/)

Leave a Reply




If you want a picture to show with your comment, go get a Gravatar.