Office365(Sharepoint)開発環境について(Windows2008, Visaul Studio 2010, Visual Studio 2012)

Office365の開発環境につきまして、Office365はほぼSharePoint2010 なので、オンプレミスにSharePoint 2010と同じ環境を作成し、開発ツール(Visual Studio 2010 Professional)をインストールして、開発、デバック、テスト後に、Office365にアップロードします。

また、現段階でVisual Studio 2012RC がでているのインストールしてみます。

では具体的に開発環境のインストールする方法を説明します。

以下のツールをインストールしていきます。

  1. Windows 2008 Server 2008 R2 Fundation X64 メモリ4G SharePoint 2010 はWindows7でも動作するのですが、今回はサーバを容易しました。各々準備できる環境でお願いします。
  2. SharePoint 2010 foundation X64 (無料) SharePoint本体で、asp.net上で動作します。今回は無料で利用できる foundationエディションを利用します。 ※SharePointって初めはすごく不思議です。AspxやWebParts等がIISフォルダーになかったりしますが 実はSharePointがSQL Serverに格納しているのです。
  3. SharePoint 2010 SDK (無料) ドキュメントやサンプルが付属しています。
  4. SharePoint Designer 2010 X64 (無料) 簡単にSharePoint内のaspx 等のWeb Page にアクセスして、編集できるツールです。
  5. Visual Studio 2012 Professional シェアポイントで最も複雑なアプリケーションを開発できるツールになります。 ※Professional 以上が必要になります。
  6.  Visual Studio Ultimate 2012 RC 最新の開発環境をリリース候補ですが試してみるためにインストールします。

 詳細ステップ

1.Windows 2008 Server 2008 R2 Fundation X64 メモリ4G がインストール済みのサーバを準備する。

 

2. sharepoint 2010 foundation X64 (無料)  をインストールする。

以下のサイトからダウンロードします。 http://www.microsoft.com/ja-jp/download/details.aspx?id=5970 ダウンロードされた以下をクリックしてインスールします。

SharePointFoundation.exe 以下の画面が表示されるので

ソフトウェア必須コンポーネントのインストール(P) をクリックします。 SharePointのインストール前にIIS等のインストールを行います。

SharePoint Foundation のインストール(I) をクリックして SharePoint 本体をインストールします。

今回はスタンドアロンで十分なので「スタンドアロン」をクリックします。

インストールが終わると構成ウィザードという画面が表示されますので 「SharePoint 製品構成ウィザードを今すぐ実行する」にチェックをいれて「閉じる」ボタンをクリックします。

「SharePoint 製品構成ウィザード」が表示されます。 「次へ 」をクリックする。

しばらく待つと終了します。

「SharePointのサイト」の初期画面が自動で起動されます。

3. SharePoint 2010 SDK (無料) 以下のサイトからダウンロードします。

http://www.microsoft.com/en-us/download/details.aspx?id=12323 ダウンロードされた以下をクリックしてインスールします。

SharePointPlatformSDK.exe 以下の画面が表示されるので「Next」ボタンを押してインストールして下さい。

4. SharePoint Designer 2010 X64 (無料) 以下のサイトからダウンロードします。

http://www.microsoft.com/ja-jp/download/details.aspx?id=24309 ダウンロードされた以下をクリックしてインスールします。

SharePointDesigner.exe

5. Visual Studio 2010 Professional 以下のサイトからダウンロードします。

http://www.microsoft.com/ja-jp/download/details.aspx?id=2890 ダウンロードされた以下をクリックしてインスールします。 vs_proweb

SQL Serverは不要なのでチェックを外す

以下のようにインストールがはじまります。

しかしながら「セットアップに失敗しました。」と表示されます。 Microsoft Visual Studio 2010 64 ビット必須コンポーネント (x64)

エラーログの表示すると以下のようになってました。 [07/14/12,10:57:05] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio 2010 64 ビット必須コンポーネント (x64) was not attempted to be installed. ***EndOfSession***[07/14/12,11:36:58] Microsoft Visual Studio 2010 64 ビット必須コンポーネント (x64): [2] Error: Installation failed for component Microsoft Visual Studio 2010 64 ビット必須コンポーネント (x64). MSI returned error code 1603 とのことなので、調査しました。 まず手動で VS_Prerequisites_x64_jpn.msi (英語: VS_Prerequisites_x64.msi )を実行すると以下のエラーが表示されます。 VS_Prerequisites_x64_jpn.msi は Visual Studio2010 Professional のiso ファイルをダウンロードした中の WCU\64bitPrereq にあります。 VS_Prerequisites_x64_jpn.msiを手動でインストールしてみます。しかし途中で何回かエラーコード 2908 が表示され最後に HRESULT : 0x80131700.が表示されます。 さらに、.NET Framework 4.0 が原因だという記事をみつけたのでとりあえずアンインストールするとエラー1603にかわります。 いろいろ悩んだあげくに、わかりました。 %windir%\system32\mscoree.dll が古いみたい。 右クリックしてバージョン情報を確認すると 2.xxxx でした。どうやらこれが古いらしいです。 .NET Framework 4.0 がインストール済みの環境ですと、4.xxx になるのが正しいらしい。ので、 以下のようにしたところうまく Visual Studio 2010 Professional がインストールできました。

  1. .NET Framework 4.0の再インスール後、PC再起動 念のため以下のKBもインストール KB2478663 KB2416472 KB2518870
  2. しかし、まだ2.xxxxと 古い、再度、PC再起動–>まだ2.xxxxと古い
  3. 今度は、セーフモードでWindows2008 を再起動、今度は、mscoree.dll が 4.xxx になりました。理由はわからないが、とりあえずOKとしよう。
  4. Windows2008通常起動後、 VS_Prerequisites_x64_jpn.msi (英語: VS_Prerequisites_x64.msi )をインストールしてみると、エラーなく無事に終了。
  5. 再度 Microsoft Visual Studio 2010 Professionalをインストールしたところエラーなく完了
Visual Studio 2010 Professional 無事インストール終了
 
 
6. Visual Studio Ultimate 2012 RC 以下のサイトからダウンロードします。
http://www.microsoft.com/visualstudio/11/ja-jp/downloads#ultimateダウンロードされた以下をクリックしてインスールします。
vs_ultimate.exe以下の画面が表示されるので「次へ」ボタンを押してインストールして下さい。
すべて選択して、インストールをクリックする。
以上でしばらくまつとインストールが完了します。

Office365(Sharepoint)開発環境について(Visaul Studio 2012)

Office365の開発環境について現時点でMicrosoft Visual Studio2012で開発するのが最強とおもわれるのでMicrosoft Visual Studio 2012 をインストールする。

インストール方法は下記のページ参照 http://tech.exceedone.co.jp/?p=198

1. テンプレート まずは、 Visualt Studio 2010 と Visual Studio 2012 みためが違いますが、Sharepoint2010のライブラリを使うので同じです。ただ2012のほうが使いやすいです。

Visual Studio 2010のSharePoint テンプレート

Visual Studio 2012のSharePoint テンプレート

 

2. 実際になんかつくってみる。 参考文献 http://msdn.microsoft.com/ja-jp/library/ee231568(v=vs.110)

WebClientでインターネットからファイルをダウンロードしてOffice365(Sharepoint)のDocument File(ドキュメントファイル)に保存する。(C# Silverlight + Office365 Document Library)

WebClientでインターネットからファイルをダウンロードしてOffice365(Sharepoint)のDocument File(ドキュメントファイル)に保存する。(C# Silverlight + Office365  Document Library)

        private Byte[] m_dt = new Byte[] { };
        private void FileDownload_Office365Save()
        {
            var client = new WebClient();
            client.OpenReadCompleted += OpenReadCompleted;
            client.OpenReadAsync(new Uri("http://xxxxxxxx/test.pdf", UriKind.Absolute));
        }

        void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            //InvokeしないとMessageBox動かない。
            Dispatcher.BeginInvoke(() =>
            {
                try
                {
                    // エラーチェック
                    if (e.Error != null)
                    {
                        MessageBox.Show(e.Error.Message + "\r\n" + e.Error.StackTrace);
                        return;
                    }

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

                    try
                    {
                        //取得したバイナリデータを Byte[]に読み込み
                        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);

                        //読み込んだバイナリデータをOffice365(Sharepoint document)にアップロード
                        string siteURL = ClientContext.Current.Url;
                        string strListName = "YYYYYY";  //ドキュメントリストの名前
                        string strDocumentName = "test.pdf"; //ドキュメントファイルに保存する名前
                        UploadDocument(siteURL, strListName, strDocumentName, m_dt);

                    }
                    finally
                    {
                        if (br != null)
                        {
                            br.Close();
                        }

                        if (sr != null)
                        {
                            sr.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                }
            });
        }

        protected void UploadDocument(string siteURL, string strListName, string strDocumentName, byte[] documentStream)
        {

            using (ClientContext clientContext = new ClientContext(siteURL))
            {
                List list = clientContext.Web.Lists.GetByTitle(strListName);
                FileCreationInformation fileCreationInformation = new FileCreationInformation();

                fileCreationInformation.Content = documentStream;
                fileCreationInformation.Overwrite = true;
                fileCreationInformation.Url = strDocumentName;

                SP.File uploadFile = list.RootFolder.Files.Add(fileCreationInformation);
                //uploadFile.ListItemAllFields["DocType"] = "Favourites";
                uploadFile.ListItemAllFields.Update();
                clientContext.ExecuteQueryAsync(
                    new ClientRequestSucceededEventHandler(delegate(object o, ClientRequestSucceededEventArgs successargs)
                    {
                        this.Dispatcher.BeginInvoke(new Action(delegate()
                        {
                            try
                            {
                                MessageBox.Show("登録しました。");
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                            }

                        }), null);
                    }),
                    new ClientRequestFailedEventHandler(delegate(object o, ClientRequestFailedEventArgs failedArgs)
                    {
                        this.Dispatcher.BeginInvoke(new Action(delegate()
                        {
                            try
                            {
                                MessageBox.Show(failedArgs.ErrorDetails + "   " + failedArgs.Message);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                            }

                        }), null);
                    })
                );

            }
        }

UserControl の基本クラス(Base Class) と派生クラス(Derived Class)を作る。 (C# Silverlight)

UserControl の基本クラス(Base Class) と派生クラス(Derived Class)を作る。 (C# Silverlight)

Silverlightで画面を作っていくとユーザコントロール(UserControl)の継承したくなります。

基本クラス(Base Class)

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
using System.Collections.ObjectModel;

namespace SilverlightProjectMain
{
    public partial class Common_0100Base : UserControl
    {
        public Common_0100Base()
        {
            InitializeComponent();
        }
    }
}
<UserControl
    x:Class="SilverlightProjectMain.Common_0100Base"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:SilverlightProjectMain="clr-namespace:SilverlightProjectMain"
    mc:Ignorable="d"    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">    </Grid>
</UserControl>

 

派生クラス(Derived Class)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace SilverlightProjectMain
{
    public partial class Derived : Common_0100Base//UserControl
    {
        public Derived()
        {
            InitializeComponent();
        }
    }
}

 

<SilverlightProjectMain:Common_0100Base
    x:Class="SilverlightProjectMain.Derived"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:SilverlightProjectMain="clr-namespace:SilverlightProjectMain"
    mc:Ignorable="d"    d:DesignHeight="300" d:DesignWidth="400">
    <Grid x:Name="LayoutRoot" Background="White">    </Grid>
</SilverlightProjectMain:Common_0100Base>

 

<メモ>
Xamlファイルの1、7、10行目を修正しないと以下のエラーが表示されます。

エラー 1 ‘SilverlightProjectMain.Derived’ の partial 宣言では、異なる基本クラスを指定してはいけません。 C:\EAP_Office365\SilverlightProjectMain\Derived.xaml.cs 15 26 SilverlightProjectMain

ドキュメントライブラリーからのデータの読み込み(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;
        }