WinDbgのコマンド一覧(command list)

  1. Windowsカーネルデバックの準備(Virtual PC) でカーネルデバックを開始します。
  2. コマンドを入れる場合にはまず、CTRL+BreakでOSを停止させます。
  3. レジスターの内容をみるには 以下のようにコマンドを入力してEnterを押す。kd>r
  4. プロセス一覧をみるには以下のようにコマンドを入力してEnterを押す。kd>!process 0 0

よく使うコマンド

カテゴリ 概要 コマンド(kd>)
基本(basic) コマンドHelp (Command help) ?
OSを止める (Stop OS) ctrl+Brake
OSを起動する (Start OS) g
レジスタ レジスタ内容確認 r
プロセス プロセス一覧 !process 0 0
プロセスアタッチ .process /r /p “アドレス”
プロセス環境ブロック(PEB) dt nt!_PEB -r @$peb
モジュール モジュールの一覧 lm
モジュールの一覧(マークアップ付) lmD
モジュールの詳細表示 lm vm ntdll
アドレス一覧取得 !address
関数一覧 dt nt!_PEB
dt ntdll!_PEB
dt nt!_PEB -r @$peb
dt nt!_TEB
ブレークポイント ブレイクポイント設定 bp モジュール名!関数名+アドレス
ブレイクポイント無効化 bd ブレイクポイント番号
ブレイクポイント消去 bc ブレイクポイント番号
ブレイクポイント一覧 bl
メモリ メモリ表示(ダブルワード) dd
メモリ表示(Ascii文字) da
メモリ表示(UNICODE) du
メモリ内容とシンボル dds
メモリ内容とシンボルと既知のシンボル ddp
その他 トレースしている場所 t
逆アセンブル u “アドレス”
カレントスレッドのコールスタック K
ヒープヘルプ !heap -?

Windowsカーネルデバックの準備(ローカルPC)

  1. Windows XP にWinDbgをインストールします。※今回は 6.11.1404をインストールします。http://msdn.microsoft.com/en-us/windows/hardware/gg463016.aspx

    Previous Release version 6.11.1.404 – March 27, 2009

    Install 32-bit version 6.11.1.404 [16.9 MB]

    ※  最新バージョンはWindows SDKに含まれます。
      SDK(Windows SDK)
        http://msdn.microsoft.com/ja-jp/windows/hardware/gg463009

  2. msconfig にてOSをDebugモードにします。


  3. システム環境変数にシンボル情報を設定してダウンロードするようにします。OS再起動します。
    1. フォルダーを作成します。
      c:\NTSYMBOL
    2. システムプロパティの環境変数に以下の値を設定します。
      変数名=「_NT_SYMBOL_PATH」
      編数値=「srv*c:\NTSYMBOL*http://msdl.microsoft.com/download/symbols」

  4. Windoesスタートから、WinDbgを起動します。
    1. WinDbgのメニューから「FIle」「Kernel Debug」を選びますと以下のダイアログが表示されます。 
    2. Local タブを選んでOKをおしますと以下の画面が表示されます。 

Windowsカーネルデバックの準備(Virtual PC)

  1. Windows XP をメインマシンにします。
    1. メインマシン上に Virtula PC 2004 SP1をインストールします。 http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=6D58729D-DFA8-40BF-AFAF-20BCB7F01CD1
    2. WinDbgをインストールします。 ※今回は 6.11.1404をインストールします。 http://msdn.microsoft.com/en-us/windows/hardware/gg463016.aspx Previous Release version 6.11.1.404 – March 27, 2009 Install 32-bit version 6.11.1.404 [16.9 MB]※  最新バージョンはWindows SDKに含まれます。 SDK(Windows SDK) http://msdn.microsoft.com/ja-jp/windows/hardware/gg463009
  2. メインマシンのVirtual PCにデバックOSをインストールします。
    1. Windows2000Server (Virtual PC)の場合。
      1. インストール後、デバックOSの「c:\Boot.ini」を以下のように書き換えます。 [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT=”Microsoft Windows 2000 Server” /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINNT=”Microsoft Windows 2000 Server” /fastdetect /debugport=com1 /baudrate=57600※ baudrate を早くするとつながらない場合があります
      2. デバックOSシャットダウンします。
    2. Windows XP (Virtual PC) の場合
      1. msconfig にてOSをDebugモードにします。
      2. Boot.INIオプションに以下を入力する。
  3. メインマシン(Windows XP)のシステム環境変数にシンボル情報を設定してダウンロードするようにします。メインマシン(Windows XP)からViertual PC の COMポートの情報を変更します。
    1. フォルダーを作成します。 c:\NTSYMBOL
    2. システムプロパティの環境変数に以下の値を設定します。 変数名=「_NT_SYMBOL_PATH」 編数値=「srv*c:\NTSYMBOL*http://msdl.microsoft.com/download/symbols」


  4. 名前付きパイプ=「\\.\pipe\com1
  5. メインマシン(Windows XP)からDosコマンドで以下を入力してWindbguを起動します。
    >C:\WinDDK\7600.16385.1\Debuggers\windbg.exe -k com:port=\\.\pipe\com1,pipe

    ※もしくはWinDbg画面をメニューから起動して以下の操作をする。 メニュー「File」-[Kernel Debug] [COM]タブにて Pipe=チェック, Reconect=チェック, Baud Rate=57600, Port=\\.\pipe\com1

  6. Virtual PCのデバックOSを起動します。

  7. メインマシンのWinDbgに以下の画面が起動されたら成功です。
  8. 他に自作したDDKプログラム(sys, exe等)があって、デバックしたい場合はWinDbgのメニューからpdbフォルダーのパスを通してください。bpコマンドでブレークポイントを設定するとそのプログラムのソースデバックも可能になります。
    1. pdbにexeとのバージョン確認情報やプログラムソース位置情報がありますので、ソースの位置を変更しないでください、また、プログラムソースとpdbとexeのバージョンが異なるとうまく動作しませんので注意してください。
    2. パスを追加する方法WinDbgのメニューから[File]-[Symbol File Path]複数指定する場合はセミコロン(;)で仕切ってください

SharePoint CAMLを作成するのに便利なツールを紹介します。

SharePoint CAMLを作成するのがめんどくさいので、簡単に作成&テストできるツールがあります。

1.以下のサイトの右のほうからツールをダウンロードします。

SharePoint CAML Query Helper for 2007 and 2010 http://spcamlqueryhelper.codeplex.com/

2.Submitボタンを押します。

ダウンロードしたZIPファイルを解凍して[SPCAMLQueryHelper.exe]をクリックしますと以下の画面が起動されます。 ローカルでテストしたいので、ローカルユーザでログインします。

3.サイトのリスト(List)やドキュメントライブラリ(Document Library)をクリックしてCAMLを作って貼り付けます。

このようなCAMLをつくります。

<Query>
<Where>
 <Eq>
 <FieldRef Name="CustomerName" />
 <Value Type="Text">111</Value>
 </Eq>
</Where>
</Query>

4.[SEARCH]ボタンを押すと結果が表示されます。

SharePointの左メニュ(Left Menu)と検索(Search) を動的もしくは静的に変更する方法(Sharepoint, C#, Style Sheet, CSS, JavaScript)

ShaerPointの開発をしていると左メニュー(LeftMenu)やサーチ(Search)を非表示にしたい場合があります。その方法を解説します。

方法1:静的:スタイルシート(CSS)

まずは一番シンプルなスタイルシートによる記述 通常は以下のように左にメニューがありますが。

以下のように左メニューを非表示にします。

 

 

<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ID="phPageTitle" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
 <SharePoint:ProjectProperty ID="ppTitle" Property="Title" runat="server"/>
</asp:Content>

<asp:Content ID="phMain" ContentPlaceHolderId="PlaceHolderMain" runat="server">
 <STYLE type='text/css'>
#s4-leftpanel
 {
 display : none;
 }
 .s4-ca
 {
 margin-left : 0px !important;
 }
 #s4-searcharea
 {
 display : none;
 }
</STYLE>
</asp:Content>

 

方法2:動的:JavaScript

JavaScriptで制御する場合 非表示の場合でも、ボタンをクリックすると表示できます。

表示の場合でも、ボタンをクリックすると非表示できます。

<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ID="phPageTitle" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
    <SharePoint:ProjectProperty ID="ppTitle" Property="Title" runat="server"/>
</asp:Content>

<asp:Content ID="phMain" ContentPlaceHolderId="PlaceHolderMain" runat="server">
    <input type="button"  value="左パネル表示" onClick="ContorlVisibility(true)">
    <input type="button"  value="左パネル非表示" onClick="ContorlVisibility(false)">

    <WebPartPages:SilverlightWebPart 
        runat="server" 
        Height="600px" 
        Url="~sitecollection/SiteAssets/EAP_Office365/SilverlightWebPartMain/SilverlightProjectMain.xap?version=0_0_1" 
        ImportErrorMessage="$Resources:core,ImportErrorMessage;" 
        ApplicationXml="" 
        WindowlessMode="False"
        Description="EAP_Office365" 
        ID="g_7e129824_46fc_4902_9bbf_b28bf5573d20" 
        Width="955px" 
        Title="EAP_Office365 - SilverlightWebPartMain" 
        __MarkupType="vsattributemarkup" 
        __WebPartId="{37DA73F0-C708-4DAC-A1D5-90A7B500EB9B}" 
        WebPart="true" 

        __designer:IsClosed="false">
    </WebPartPages:SilverlightWebPart>

    <script type="text/javascript">
        function ShowErrorAlert(ex) {
            try
            {
                alert("EAP JavaScript エラー内容: " + ex.message);
            }
            catch(ex2)
            {
                alert("EAP JavaScript エラー内容: " + ex2.message);
            }
        }

        var DIV_Style_Visibility_LeftPanel_Search = 'DIV_Style_Visibility_LeftPanel_Search ';
        function ContorlVisibility(IsVisible) {

            try {
                var div_mso = document.getElementById('ctl00_MSO_ContentDiv');

                if (IsVisible) {
                    //表示
                    var divSytle = document.getElementById(DIV_Style_Visibility_LeftPanel_Search)
                    if (null != divSytle) {
                        div_mso.removeChild(divSytle);
                    }
                }
                else {
                    //非表示
                    var divSytle = document.createElement('div')
                    divSytle.id = DIV_Style_Visibility_LeftPanel_Search;
                    div_mso.appendChild(divSytle)

                    //左パネル非表示(Left Panel)
                    AddCSS(divSytle, '#s4-leftpanel {display: none;}');
                    AddCSS(divSytle, '.s4-ca {margin-left : 0px !important;}');
                    //検索非表示(Search)
                    AddCSS(divSytle, '#s4-searcharea {display: none;}');
                }
            }
            catch (ex) {
                ShowErrorAlert(ex);
            }

            function AddCSS(divSytle, cssText) {
                try {
                    var divStyle = document.createElement('style');
                    divStyle.setAttribute("type", "text/css");
                    divStyle.styleSheet.cssText = cssText;
                    divSytle.appendChild(divStyle);
                }
                catch (ex) {
                    ShowErrorAlert(ex);
                }

            }

        }
    </script>
</asp:Content>

SharePointのリスト(List)にインデックスを作成する(Create Index)方法(Sharepoint, C#)

リスト[List_List_Quotation]の項目 [Title],[CustomerName]にインデックスを作成する方法

方法1:フューチャーに実装(Webサイトでフューチャーアクティブ時に実行)

プログラム実行後Indexをみてみると作成されているのが確認できした。

フューチャーのイベントレシーバー(スコープ=Web)

using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using EAP_Office365.Common;

namespace EAP_Office365.Features.Feature_Web
{

    ///
<summary> /// このクラスは、フィーチャーのアクティブ化、非アクティブ化、インストール、アンインストール、およびアップグレード中に発生したイベントを処理します。
 /// </summary>
    ///
    /// このクラスにアタッチされた GUID は、パッケージ中に使用される可能性があるため変更できません。
    ///

    [Guid("1a800af6-17aa-4762-b498-760fb25200f8")]
    public class Feature_WebEventReceiver : SPFeatureReceiver
    {
        // フィーチャーをアクティブにした後に発生したイベントを処理するには、以下のメソッドのコメントを解除します。

        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            try
            {
                StaticFeature.AddIndexToList(properties, "List_Quotation", "Title");
                StaticFeature.AddIndexToList(properties, "List_Quotation", "CustomerName");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        // フィーチャーを非アクティブにする前に発生したイベントを処理するには、以下のメソッドのコメントを解除します。

        //public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        //{
        //}

        // フィーチャーをインストールした後に発生したイベントを処理するには、以下のメソッドのコメントを解除します。
        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}

        // フィーチャーをアンインストールする前に発生したイベントを処理するには、以下のメソッドのコメントを解除します。

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // フィーチャーをアップグレードしているときに発生したイベントを処理するには、以下のメソッドのコメントを解除します。

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary parameters)
        //{
        //}
    }
}

Indexを作成するプログラム

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SP=Microsoft.SharePoint;

namespace EAP_Office365.Common
{
    static class StaticFeature
    {
        //注意フューチャーアクティブ時には SPContext.Current.webは使用できない。
        private static SP.SPWeb GetWeb(this SP.SPFeatureReceiverProperties properties)
        {
            SP.SPWeb site;
            if (properties.Feature.Parent is SP.SPWeb)
            {
                site = (SP.SPWeb)properties.Feature.Parent;
            }
            else if (properties.Feature.Parent is SP.SPSite)
            {
                site = ((SP.SPSite)properties.Feature.Parent).RootWeb;
            }
            else
            {
                throw new Exception("Webサイトが取得できませんでした");
            }
            return site;
        }

        public static void AddIndexToList(SP.SPFeatureReceiverProperties properties, string strListName, string strFiledName)
        {
            SP.SPWeb spWeb = StaticFeature.GetWeb(properties);
            var spList = spWeb.Lists[strListName];
            var spFilld = spList.Fields.GetFieldByInternalName(strFiledName);

            if (spFilld != null)
            {
                if (spFilld.Indexable)
                {
                    spFilld.Indexed = true;
                    spFilld.Update();

                    //2つキーを追加する場合は、引数に2つめをいれる。
                    spList.FieldIndexes.Add(spFilld);
                }
                else
                {
                    //すでに存在するのでなにもしない。(下記の理由からエラーにしない)
                    //①Office365(SharePoint Online)は最初から TitleにはIndexあり
                    // オンプレミス(SharePoint)はTitleにはIndexnなし
                    //②Futureの場合、再度Activateされるかも?しれない(要調査)
                }
            }
            else
            {
                throw new Exception("EAP: そのようなフィールドはありません。;リスト名=" + strListName);
            }

        }

    }
}

方法2:WebPartにて実装(ボタンがおされたときにサーバサイドで実行):

Webパーツの画面で[test]ボタンをクリックすると

プログラム実行後Indexをみてみると作成されているのが確認できました。

Webパーツプログラムです。

using System;
using System.ComponentModel;
using System.Web.UI.WebControls.WebParts;

using SP = Microsoft.SharePoint;

namespace EAP_Office365.TestWebPart
{
    [ToolboxItemAttribute(false)]
    public partial class TestWebPart : WebPart
    {
        // Instrumentation メソッドを使用してファーム ソリューションでパフォーマンス プロファイルを実行する場合のみ次の SecurityPermission
        // 属性のコメントを解除し、コードを運用する準備ができたら SecurityPermission 属性を削除します。
        // SecurityPermission 属性は、コンストラクターの呼び出し元に対するセキュリティ チェックをバイパスするため、
        // 運用目的ではお勧めしません。
        // [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Assert, UnmanagedCode = true)]
        public TestWebPart()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            AddIndexToList("List_Quotation", "Title");
            AddIndexToList("List_Quotation", "CustomerName");
        }

        public static void AddIndexToList(string strListName, string strFiledName)
        {
            SP.SPWeb spWeb =  SP.SPContext.Current.Web;
            var spList = spWeb.Lists[strListName];
            var spFilld = spList.Fields.GetFieldByInternalName(strFiledName);

            if (spFilld != null)
            {
                if (spFilld.Indexable)
                {
                    spFilld.Indexed = true;
                    spFilld.Update();

                    //2つキーを追加する場合は、引数に2つめをいれる。
                    spList.FieldIndexes.Add(spFilld);
                }
                else
                {
                    //すでに存在するのでなにもしない。(下記の理由からエラーにしない)
                    //①Office365(SharePoint Online)は最初から TitleにはIndexあり
                    // オンプレミス(SharePoint)はTitleにはIndexnなし
                    //②Futureの場合、再度Activateされるかも?しれない(要調査)
                }
            }
            else
            {
                throw new Exception("EAP: そのようなフィールドはありません。;リスト名=" + strListName);
            }

        }

    }
}

方法3:リストテンプレート(ListTemplate)に定義:

サンドボックスソリューション(sandboxed Solution) のリストテンプレートに記述する方法

VisualStudioのリストテンプレートの画面からではIndexは設定できないので

Schema.xml を開いて

インデックス(Index)をつけたい項目に今回は “CustomerName” に[Indexed=”TRUE”]を設定します。

以下のようにインデックスが作成されます。

<?xml version="1.0" encoding="utf-8"?>
<List xmlns:ows="Microsoft SharePoint" Title="List_Quotation" FolderCreation="FALSE" Direction="$Resources:Direction;" Url="Lists/List_Quotation" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/">
  <MetaData>
    <ContentTypes>
      <ContentType ID="0x0100529434ab8e0a4fd48a973ccfcd48a293" Name="ListFieldsContentType">
        <FieldRefs>
          <FieldRef ID="{e0e936a2-a2ac-4cac-b617-9332035bca63}" Name="Memo" />
          <FieldRef ID="{cbbec81f-4c29-44e0-8bda-4603c08702f7}" Name="RowData" />
          <FieldRef ID="{13b6ce57-22a1-4d99-89ab-64006458342b}" Name="InvoiceID" />
          <FieldRef ID="{d90001da-42fd-43f4-9d81-52f4116ead4c}" Name="Subject1" />
          <FieldRef ID="{45dedcec-9c80-4e4c-a929-635976b7a1b9}" Name="Subject2" />
          <FieldRef ID="{51fb32b7-a01b-461e-ac33-6d65b0a3ac9d}" Name="CreateDate" />
          <FieldRef ID="{7e1e3c7a-2d07-45f9-bb3c-e68c9513cca2}" Name="Other1" />
          <FieldRef ID="{a9df7ffc-0604-4ced-a9a9-4273b3f14e5a}" Name="Other2" />
          <FieldRef ID="{f4777239-7f59-4f81-9769-7ea956f5c8be}" Name="CustomerName" />
          <FieldRef ID="{9dd95fa6-3811-409b-b762-2e0380d917a2}" Name="ConsumptionTax" />
          <FieldRef ID="{251e0a26-2011-4e2d-a13d-5283868b8dba}" Name="TotalAmount" />
          <FieldRef ID="{bd132826-132d-4e35-95ee-ca9ae795bf06}" Name="SubTotal" />
          <FieldRef ID="{8494697b-7d50-4fdf-a257-07452fc54f08}" Name="Approved" />
        </FieldRefs>
      </ContentType>
      <ContentTypeRef ID="0x01">
        <Folder TargetName="Item" />
      </ContentTypeRef>
      <ContentTypeRef ID="0x0120" />
    </ContentTypes>
    <Fields>
      <Field Name="Memo" ID="{e0e936a2-a2ac-4cac-b617-9332035bca63}" DisplayName="Memo" Type="Note" />
      <Field Name="RowData" ID="{cbbec81f-4c29-44e0-8bda-4603c08702f7}" DisplayName="RowData" Type="Note" />
      <Field Name="InvoiceID" ID="{13b6ce57-22a1-4d99-89ab-64006458342b}" DisplayName="InvoiceNo" Type="Text" />
      <Field Name="Subject1" ID="{d90001da-42fd-43f4-9d81-52f4116ead4c}" DisplayName="Subject1" Type="Text" />
      <Field Name="Subject2" ID="{45dedcec-9c80-4e4c-a929-635976b7a1b9}" DisplayName="Subject2" Type="Text" />
      <Field Name="CreateDate" ID="{51fb32b7-a01b-461e-ac33-6d65b0a3ac9d}" DisplayName="CreateDate" Type="DateTime" />
      <Field Name="Other1" ID="{7e1e3c7a-2d07-45f9-bb3c-e68c9513cca2}" DisplayName="Other1" Type="Text" />
      <Field Name="Other2" ID="{a9df7ffc-0604-4ced-a9a9-4273b3f14e5a}" DisplayName="Other2" Type="Text" />
      <Field Name="CustomerName" ID="{f4777239-7f59-4f81-9769-7ea956f5c8be}" DisplayName="CustomerName" Type="Text" Indexed="TRUE" />
      <Field Name="ConsumptionTax" ID="{9dd95fa6-3811-409b-b762-2e0380d917a2}" DisplayName="ConsumptionTax" Type="Currency" />
      <Field Name="TotalAmount" ID="{251e0a26-2011-4e2d-a13d-5283868b8dba}" DisplayName="TotalAmount" Type="Currency" />
      <Field Name="SubTotal" ID="{bd132826-132d-4e35-95ee-ca9ae795bf06}" DisplayName="SubTotal" Type="Text" />
      <Field Name="Approved" ID="{8494697b-7d50-4fdf-a257-07452fc54f08}" DisplayName="Approved" Type="Boolean" />
    </Fields>
    <Views>
      <View BaseViewID="0" Type="HTML" MobileView="TRUE" TabularView="FALSE">
        <Toolbar Type="Standard" />
        <XslLink Default="TRUE">main.xsl</XslLink>
        <RowLimit Paged="TRUE">30</RowLimit>
        <ViewFields>
          <FieldRef Name="LinkTitleNoMenu"></FieldRef>
        </ViewFields>
        <Query>
          <OrderBy>
            <FieldRef Name="Modified" Ascending="FALSE"></FieldRef>
          </OrderBy>
        </Query>
        <ParameterBindings>
          <ParameterBinding Name="AddNewAnnouncement" Location="Resource(wss,addnewitem)" />
          <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
          <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_ONET_HOME)" />
        </ParameterBindings>
      </View>
      <View BaseViewID="1" Type="HTML" WebPartZoneID="Main" DisplayName="$Resources:core,objectiv_schema_mwsidcamlidC24;" DefaultView="TRUE" MobileView="TRUE" MobileDefaultView="TRUE" SetupPath="pages\viewpage.aspx" ImageUrl="/_layouts/images/generic.png" Url="AllItems.aspx">
        <Toolbar Type="Standard" />
        <XslLink Default="TRUE">main.xsl</XslLink>
        <RowLimit Paged="TRUE">30</RowLimit>
        <ViewFields>
          <FieldRef Name="ID" />
          <FieldRef Name="Title" />
          <FieldRef Name="RowData" />
          <FieldRef Name="InvoiceID" />
          <FieldRef Name="Subject1" />
          <FieldRef Name="Subject2" />
          <FieldRef Name="CreateDate" />
          <FieldRef Name="Other1" />
          <FieldRef Name="Other2" />
          <FieldRef Name="CustomerName" />
          <FieldRef Name="ConsumptionTax" />
          <FieldRef Name="TotalAmount" />
          <FieldRef Name="SubTotal" />
          <FieldRef Name="Approved" />
          <FieldRef Name="Memo" />
        </ViewFields>
        <Query>
          <OrderBy>
            <FieldRef Name="ID"></FieldRef>
          </OrderBy>
        </Query>
        <ParameterBindings>
          <ParameterBinding Name="NoAnnouncements" Location="Resource(wss,noXinviewofY_LIST)" />
          <ParameterBinding Name="NoAnnouncementsHowTo" Location="Resource(wss,noXinviewofY_DEFAULT)" />
        </ParameterBindings>
      </View>
    </Views>
    <Forms>
      <Form Type="DisplayForm" Url="DispForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="EditForm" Url="EditForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
      <Form Type="NewForm" Url="NewForm.aspx" SetupPath="pages\form.aspx" WebPartZoneID="Main" />
    </Forms>
  </MetaData>
</List>

Sharepoint で複雑なクエリーとキーのを設定について。(Sharepoint, silverlight(C#))

業務アプリケーションを作るのに重要なデータのクエリによるJoinやキーについて簡単に説明します。 最初に SharepointのインデックスはSQL Serverのインデックスではなく、Sharepointで管理されています。 また、実行時にアクセスできる リストビューのデフォルトのしきい値は一般ユーザ5000管理者20000に制限されています。 オンプレミスのシェアポイントですと[SharePointサーバーの全体管理]サイトの[リソースの調整]」から修正できます。 Office365はどうやって治せるか不明なのとサーバに負荷がかかるので5,000 アイテム以上レスポンスのあるViewを作成しないほうがよさそう。 参考:

  1. SharePoint リスト データ モデル http://msdn.microsoft.com/ja-jp/library/hh290935.aspx
  2. 大きなリストでのリスト ビューのしきい値の一時的な無効化 http://blogs.msdn.com/b/sharepoint_jp/archive/2010/11/26/10097004.aspx
  3. 365 ではリスト ビューのしきい値 (5,000 アイテム) を超えました。(すべてのリスト アイテムを含む等) 過度なサーバー負荷の操作は現在実行できません。) http://support.microsoft.com/kb/2759051/ja

Sharepoint のデータにアクセスするときには以下の3つがあります。

  1. クライアント側オブジェクト モデル
  2. SharePoint Foundation REST インターフェイス
  3. ASP.NET Web サービス

参考:http://msdn.microsoft.com/ja-jp/library/hh290942.aspx Silverlight (or Windows or WPF)で作成する場合はCMOS(client-side object model) を使い以下のように使用します。

using  Microsoft.SharePoint.Client;
ClientContext clientContext = new ClientContext(webUrl);

Client-side Object Model を使用する場合、CAML QueryにてJoinを含んだViewを作成することが可能です。 以下のURLにサンプルあります。 参考:http://msdn.microsoft.com/ja-jp/library/hh290942.aspx

 

SharePointではListItemの列にキーを作成することが可能になっていますので、JoinするときにはKeyは忘れずにつけましょう。

Office365(標準SSL接続)外部Webサービスの問題 IE9 silverlight(C#) (Sharepoint sandbox サンドボックス)

Office365(標準SSL接続)外部Webサービスの問題 IE9 silverlight(C#) (Sharepoint sandbox サンドボックス)

Office365 (SSL接続)で外部Webサービスを使う場合はいくつか問題があります。

  1. 外部Webサービスが HTTP接続の場合
    IE7は 「セキュリティで保護されたWebページコンテンツのみ表示しますか?」でOKで正常に動作します。
    IE9は このメッセージを表示する場合と、メッセージを表示せずに無応答になる場合があります。
    –>その対応方法は(IEに設定必要なのでスマートではありません)
    [セキュリティ設定]にて[混在したコンテンツを表示する]の中から[有効にする]ば正常に処理されます。
  2. 外部サービスがHTTPS(SSL)の場合は正常に動作しますが、
    IISもしくは Apache(Tomcat+Axis2+Java)等でOpenSSL等で正式な証明書を設定していない場合は
    やはりIE9は無応答になる場合があります。(エラーの内容が「クロスドメイン~」とういいつもの内容なのでエラー特定ができないのでけっこうはまります。)

重要なことをメモしておきます

クライアントドメインポリシー

Webサービス(WebService )にclientaccesspolicy.xml を必ずWebServiceサイト直下のport=80におかないといけません。(SSLの場合は443でも見える必要があるか未確認)設置しないと以下のエラーがでます。

<エラー内容>
URI ‘http://xxxx.com/services/xxxx?wsdl’ への要求試行時にエラーが発生しました。これは、正しいクロスドメイン ポリシーを適用せずにクロスドメインでサービスにアクセスしようとしたことか、SOAP サービスには適していないポリシーが原因で発生した可能性があります。サービスの所有者に問い合わせて、クロスドメイン ポリシー ファイルを公開し、SOAP 関連の HTTP ヘッダーが送信されるようにしてもらう必要がある可能性もあります。このエラーは、Web サービス プロキシで InternalsVisibleToAttribute 属性を使わずに内部型を使用した場合にも発生することがあります。詳細については、内部例外を参照してください。

(http, https 対応しています。)

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="*">
                <domain uri="http://*" />
                <domain uri="https://*" />
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

CentOS6.3+Apache(or IIS)+OpenSSL+Tomcat7+Axis2 でSSL通信の方法(from Office365+Silverlight)

これがないとApacheからTomcat7に(http)接続できません。

ProxyPass /ws/ ajp://localhost:8009/

これがないとApacheからTomcat7にSSL(https)接続できません。

<VirtualHost _default_:443>
     ~省略~
     ProxyPass /ws/ ajp://localhost:8010/
</VirtualHost>

これがないとApacheからSSL(https)でTomcat7に接続できません。port=8009はtomcatのshutdownのときにつかうようなので変更しない。(うまく停止できなくなる?)

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" scheme="https" secure="true" SSLEnabled="true" />

これがないとTomcat7からaixs2にssl接続できません。

    <transportReceiver name="https"
                       class="org.apache.axis2.transport.http.SimpleHTTPServer">
    	<parameter name="port">8443</parameter>
	</transportReceiver>

Office365 (Sharepoint online) 内でjqueryを使用する。(Sharepoint Designer)

Office365 (Sharepoint online) 内でjqueryを使用する。(Sharepoint Designer) モーダルダイアログのサンプルです。

Sharepoint Designer(シェアポイントデザイナー)で新規作成 test.aspx を作成します。以下のプログラムのように修正します。

Jqueryは以下からダウンロードしてSharepoint Designer でUploadしてください。

http://jquery.com/ http://jqueryui.com/

プログラム(IE9でうごきません。後で調べます。) default.aspx にIEのWindowsの作成JavaScriptを追加する。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<%@ Page Language="C#" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">
<meta name="WebPartPageExpansion" content="full" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test Jaquey</title>
</head>

<body>

    <link href="/XXXXX/jquery/css/ui-lightness/jquery-ui-1.9.1.custom.min.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" src="/XXXXX/jquery/js/jquery-1.8.2.min.js"></script>
    <script type="text/javascript" src="/XXXXX/jquery/js/jquery-ui-1.9.1.custom.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#dialog-modal").dialog({
                modal: true,
                autoOpen: false,
                buttons: {
                    Ok: function () {
                        $(this).dialog("close");
                    }
                }
            });
            $("#show-dialog").click(function () {
                $("#dialog-modal").dialog("open");
            });

        });
    </script>
    <div id="dialog-modal" title="Modal Dialog">
        <p>jquery modal dialog sample</p>
    </div>
    <input type="button" id="show-dialog" value="Display Dialog">

</body>

</html>

Office365, silverlight(C#) Async(非同期), PDF作成, PDF表示の方法について(Sharepoint sandbox サンドボックス)

Office365, silverlight(C#) Async(非同期), PDF作成, PDF表示の方法について(Sharepoint sandbox サンドボックス) 処理概要(Office365(Sharepoint online) Sandbox Silverlight Application)

  1. Office365のDocument Library(ドキュメントライブラリ) から xlsx (Excel Template)を取得する
  2. xlsx と設定したいデータを Web Service に送り、Web Serviceにてxlsxにデータをセットして PDFを受信する [PDF保存&開く]ボタンをクリックする。
  3. 受信したPDFを別のブラウザに表示させる [PDF保存&開く]ボタンをクリックされたら 新規WIndowsを作成して、Loading画面を表示する
  4. Silverlightの非同期処理でPDFがOffice365のドキュメントライブラリに保存されたらPDFを表示させる。

解説(Excel から PDF作成するサービスは別の投稿にて説明します。)

  1. IEのポップアップブロックの回避(popup block) ポップアップはJavaScript でwindow.open() 処理を行うとおこります。例外が一つあります。ユーザがHTML Buttonの onClick 処理をしたときにはIEはポップアップブロックをしません。 今回はそこを利用します。Silverlightの場合はSilverlihgtのボタンが該当します。 注意)Silverlight で Sleep後、非同期処理(Async)ではポップアップブロックどころかHtmlPage.PopupWindowは動作しません(HtmlPage.Alertは動作する)
  2. silverlightの非同期処理(Async)からのPDF表示(非同期処理では IE で新規window作成できない) 非同期処理(Async)からは別ウィンドウをJavaScript経由で操作してOffice365からPDFをダウンロードして表示します。
  3. Office365のdocument libraryが(ドキュメントタイプ)doc typeをかえさないようなので?(パケット未確認)、PDFと認識せずバイナリとしてダウンロードされるのでブラウザーないでPDFが開かないのでPDFObjetというJavaScriptを使います。
  4. Office365(Sharepoint online)の設定をかえて ブラウザ内で直接PDFを開けるようにする方法もあるようです。 http://techblurt.com/2012/03/02/office365-open-pdf-in-the-browser/ PowerShell でこんなコマンドを入れみたい(未テスト)$webApp.AllowedInlineDownloadedMimeTypes.Add(“application/pdf”)

プログラム default.aspx にIEのWindowsの作成JavaScriptを追加する。

<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ID="phPageTitle" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
    <SharePoint:ProjectProperty ID="ppTitle" Property="Title" runat="server"/>
</asp:Content>

<asp:Content ID="phMain" ContentPlaceHolderId="PlaceHolderMain" runat="server">

    <STYLE type='text/css'>
        #s4-leftpanel
        {
            display : none;
        }
        .s4-ca
        {
            margin-left : 0px !important;
        }

        #s4-searcharea
        {
            display : none;
        }
    </STYLE>

    <WebPartPages:SilverlightWebPart
        runat="server"
        Height="600px"
        Url="~sitecollection/SiteAssets/EAP_Office365/SilverlightWebPartMain/SilverlightProjectMain.xap?version=0_0_1"
        ImportErrorMessage="$Resources:core,ImportErrorMessage;"
        ApplicationXml=""
        WindowlessMode="False"
        Description="EAP_Office365"
        ID="g_7e129824_46fc_4902_9bbf_b28bf5573d20"
        Width="955px"
        Title="EAP_Office365 - SilverlightWebPartMain"
        __MarkupType="vsattributemarkup"
        __WebPartId="{37DA73F0-C708-4DAC-A1D5-90A7B500EB9B}"
        WebPart="true"

        __designer:IsClosed="false">
    </WebPartPages:SilverlightWebPart>

    <script type="text/javascript">
        function ChildWindow_Open(strWindowName, strURL) {
            window.open(strURL, strWindowName);
        }
        function ChildWindow_SetLocation(strWindowName, strURL) {
            var ChildWindow = window.open(strURL, strWindowName);
            ChildWindow.location = strURL;
        }
    </script>

</asp:Content>

PDF作成中に表示するHTML

<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ID="phPageTitle" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
    <SharePoint:ProjectProperty ID="ppTitle" Property="Title" runat="server"/>
</asp:Content>

<asp:Content ID="phMain" ContentPlaceHolderId="PlaceHolderMain" runat="server">
    <STYLE type='text/css'>
        #s4-leftpanel
        {
            display : none;
        }
        .s4-ca
        {
            margin-left : 0px !important;
        }

        #s4-searcharea
        {
            display : none;
        }
    </STYLE>

    <img src="19-0.gif" >
</asp:Content>

PDF作成後 Office365 (Sharepoint online) のドキュメントライブラリからpdfを読み込むHTML

<%@ Page language="C#" MasterPageFile="~masterurl/default.master" Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>

<asp:Content ID="phPageTitle" ContentPlaceHolderId="PlaceHolderPageTitle" runat="server">
    <SharePoint:ProjectProperty ID="ppTitle" Property="Title" runat="server"/>
</asp:Content>

<asp:Content ID="phMain" ContentPlaceHolderId="PlaceHolderMain" runat="server">
    <STYLE type='text/css'>
        #s4-leftpanel
        {
            display : none;
        }
        .s4-ca
        {
            margin-left : 0px !important;
        }

        #s4-searcharea
        {
            display : none;
        }
    </STYLE>

    <script type="text/javascript" src="pdfobject.js"></script>
    <script type="text/javascript">
        function getQueryVariable(variable) {
            var query = window.location.search.substring(1);
            var vars = query.split("&");
            for (var i = 0; i < vars.length; i++) {
                var pair = vars[i].split("=");
                if (pair[0] == variable) {
                    return pair[1];
                }
            }
            alert('Query Variable ' + variable + ' not found');
        }
        var pdfurl = decodeURIComponent(getQueryVariable("pdfurl"));
        document.write("<p>It appears you don't have Adobe Reader or PDF support in this web browser. <a href='" + pdfurl + "'>Click here to download the PDF</a></p>");
        var success = new PDFObject({ url: pdfurl }).embed();
    </script>
</asp:Content>

Silverlightの[PDF保存&表示]ボタンがクリックされたときの処理(C#)

        //PDFクリック処理
        private Byte[] m_dtPDF = new Byte[] { };
        private const string PDFWINDOWS_NAME = "PDFWindow";

        private void PDF_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                PDF.IsEnabled = false;

                //Excel Template Download from Office365 Document library
                //(Office365のドキュメントライブラリからExcel テンプレートを取得する)
                var client = new WebClient();
                client.OpenReadCompleted += Callback_OpenReadCompleted_PDF;
                string s = ApplicationContext.Current.Url + "/Lists/List_Template/AAAAAAAA.xlsx";
                client.OpenReadAsync(new Uri(s, UriKind.Absolute));

                //ユーザクリック時にPopUpWindows をここでOpenする(ここでIE Window OpenするとPopup Blockを回避できる。)
                string strURL = ApplicationContext.Current.Url + "/XXXXXXXXX/pdfobject/waiting.aspx";
                HtmlPage.Window.Invoke("ChildWindow_Open", PDFWINDOWS_NAME, strURL);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        //Office365からExcelテンプレートバイナリデータを非同期で受け取る(Async)
        void Callback_OpenReadCompleted_PDF(object sender, OpenReadCompletedEventArgs e)
        {
            // エラーチェック
            if (e.Error != null)
            {
                ShowNormal(e.Error.Message);
                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_dtPDF = new Byte[sr.Length];
                br.Read(m_dtPDF, 0, m_dtPDF.Length);
            }
            finally
            {
                if (br != null)
                {
                    br.Close();
                }

                if (sr != null)
                {
                    sr.Close();
                }
            }

            try
            {
                //Web Service にExcel Tempate とデータを送りPDFを受け取る
                Service_EAP_Excel.ExcelPortTypeClient excelPortTypeClient = new Service_EAP_Excel.ExcelPortTypeClient();
                excelPortTypeClient.Endpoint.Address = Define.ServiceModel_EndpointAddress;

                excelPortTypeClient.ToPDFCompleted += new EventHandler<Service_EAP_Excel.ToPDFCompletedEventArgs>(Callback_ToPDFCompleted);

                excelPortTypeClient.ToPDFAsync(m_dtPDF, textboxCustomerName.Text);
            }
            catch (Exception ex)
            {
                //InvokeしないとMessageBox動かない。
                Dispatcher.BeginInvoke(() =>{
                    MessageBox.Show(ex.Message);
                });

            }
        }

        //Web Serviceから非同期でPDFバイナリデータを受け取る(Async)
        private void Callback_ToPDFCompleted(object sender, Service_EAP_Excel.ToPDFCompletedEventArgs e)
        {
            try
            {
                if ((e.Error == null) && (e.Result != null) && (e.Result.PDF.Length > 0))
                {
                    System.IO.MemoryStream sr = null;
                    System.IO.BinaryReader br = null;
                    Byte[] dt = null;

                    try
                    {
                        sr = new System.IO.MemoryStream(e.Result.PDF);
                        //取得したバイナリデータを Byte[]に読み込み
                        br = new System.IO.BinaryReader(sr);
                        dt = new Byte[sr.Length];
                        br.Read(dt, 0, dt.Length);

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

                        UploadDocument uploadDocument = new UploadDocument();
                        uploadDocument.Async(siteURL, strListName, strDocumentName, dt, new UploadDocument_EventHandler(CallBack_UploadDocument));
                    }
                    finally
                    {
                        //ここはdtを削除??
                        dt = null;

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

                        if (sr != null)
                        {
                            sr.Close();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                //InvokeしないとMessageBox動かない。
                Dispatcher.BeginInvoke(() =>
                {
                    MessageBox.Show(ex.Message);
                });
            }
            finally
            {
                PDF.IsEnabled = true;
            }
        }

        public void CallBack_UploadDocument(bool IsSuccess, string strMessage)
        {
            try
            {
                if (IsSuccess)
                {
                    //Popup Window のURL変更する。 
                    //Async(非同期処理)内では HtmlPage.PopupWindow は動作しない
                    //また、できたとしても ユーザがボタンクリックしたイベントでないのでIEにポップアップブロックされる(pop up block)
                    string strURL = ApplicationContext.Current.Url + "/XXXXXXXXX/pdfobject/pdfobject.aspx?pdfurl=" + HttpUtility.UrlEncode(ApplicationContext.Current.Url + "/Lists/List_Template/test.pdf");
                    this.Dispatcher.BeginInvoke(() => HtmlPage.Window.Invoke("ChildWindow_SetLocation", PDFWINDOWS_NAME, strURL));
                }
                else
                {

                    this.Dispatcher.BeginInvoke(new Action(delegate()
                    {
                        ShowNormal(strMessage);
                    }), null);
                }
            }
            catch (Exception ex)
            {
                ShowException(ex);
            }
        }
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 delegate void UploadDocument_EventHandler(bool IsSuccess, string strMessage);

    public class UploadDocument
    {
        private UploadDocument_EventHandler _uploadDocument_EventHandler;

        private void SetCallBack(UploadDocument_EventHandler del)
        {
            _uploadDocument_EventHandler = del;
        }

        private void CallCallBack(bool IsSuccess, string strMessage)
        {
            _uploadDocument_EventHandler(IsSuccess, strMessage);
        }

        public void Async(string siteURL, string strListName, string strDocumentName, byte[] documentStream, UploadDocument_EventHandler uploadDocument_EventHandler)
        {
            SetCallBack(uploadDocument_EventHandler);

            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)
                    {
                        CallCallBack(true, "");
                    }),
                    new ClientRequestFailedEventHandler(delegate(object o, ClientRequestFailedEventArgs failedArgs)
                    {
                        CallCallBack(false, failedArgs.ErrorDetails + "   " + failedArgs.Message);
                    })
                );

            }
        }

    }
}