2008年3月

2008年3月19日 (水)

SharePoint の Web サービスについて

Windows SharePoint Services にはビルトインのWebサービスが各種用意されており、カスタム アプリケーションから SharePoint を操作する際には便利です。無論 SharePoint Server 2007 でも利用できます。

Web サービスはどこのサイトからでも利用できるように共有されており、主な Web サービスは「http://サイトのURL + /_vti_bin/各種Webサービス(*.asmx)」という形式でアクセスできるようになっています。

たとえば次のような Web サービスが提供されています。

  • UserGroup.asmx … ユーザー、ロール定義、およびグループを操作するためのメソッドを提供する。具体的にはユーザーやグループの追加や権限設定などが行える。
  • Lists.asmx … リストまたはリストデータを操作するためのメソッドを提供する。 具体的にはリストの取得、リスト アイテムの取得、リストアイテムの更新などが行える

その他にも、多くの Web サービスが提供されていますので詳細は以下の URL をご覧ください。

この 「_vti_bin」フォルダは実際には、SharePoint Server 2007 のインストールされているフロントエンドWebサーバーの「%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\12\isapi」です。isapi フォルダのプロパティを開くと、以下の図のようにエイリアスが設定されていることがわかります。

[図._vti_bin]
_vti_bin

利用する際の注意事項

注意このような Web サービスを利用してカスタム アプリケーションを開発できるのですが、Visual Studio 2005 を使用していた際に以前トラブルに遭遇したことがありますので、備忘録として記載しておきます。

<問題の再現>

SharePoint サイトにルートのサイトコレクションを作成していないと、Web 参照追加時に次のようなエラーが表示され[Web 参照の追加]ボタンがアクティブになってくれないようです。

「URL "<http://WebサービスのURL>" のドキュメントは既知のドキュメントの種類として認識されませんでした。それぞれの既知の種類に関するエラーメッセージを参照して問題を解決してください。
- '<
http://WebサービスのURL>' からのレポート: 'このドキュメントの形式は認識されません。コンテンツ タイプは 'text/html; charset=utf-8' です。'
- 'DISCO ドキュメント' からのレポート: 'ルート要素が見つかりません。'
- 'WSDL ドキュメント' からのレポート: 'このドキュメントの形式は認識されません。コンテンツ タイプは 'text/html; charset=utf-8' です。'
- 'XML スキーマ' からのレポート: 'このドキュメントの形式は認識されません。コンテンツ タイプは 'text/html; charset=utf-8' です。'」

[図.Web参照の追加:エラー]

Addwebserviceerror

<問題の解決策>

解決方法は次のいずれかです。

  • ルートのサイトコレクションを作成する
  • Webサービスを指定する際に "?WSDL" まで指定する

次の図は "?WSDL" までの URL を指定してみたものですが、無事に "参照の追加" ボタンが利用できるようになります。

[図."?WSDL" まで指定したところ]
Addwebserviceerror_fixed

以上、ご参考まで。

2008年3月18日 (火)

MOSS の UI を変更するために、SharePoint Designer 2007 を使用してカスタムのマスタページを作成するとき、default.master を直接カスタマイズしたものを再び「サイト定義にリセット」すると default.master のコピーが作成されます。もしくは、単純に default.master をコピーして名前を変更して利用している場合もあると思います。

このように default.master のコピーを作成したあと、コピーが不要になったからといざ削除しようとすると次のようなエラーメッセージが表示され削除できません。

Oldmasterpagedeleteerror

実際にはどこにも参照しているページがないのにも関わらず、このようなメッセージがでます。とはいえ、不要なファイルは削除したいです。正式な方法ではないでしょうが、てっとり早く削除する方法を記しておきます。

操作は単純です。master となっている拡張子を削除し、ファイル名だけにします。この状態だと削除できてしまいます。

UI カスタマイズをする際のちょっとした裏ワザ(?) でした。

2008年3月13日 (木)

先日実施しましたセミナーでご質問いただいたところからヒントを得て、ちょっとしたリストデータ連携を実装してみましたのでご紹介します。

たとえば、顧客データを管理するリストとして「顧客リスト」があり、契約書を保管するドキュメントライブラリとして「契約書ライブラリ」があるとします。契約書ライブラリに契約書を保管してきますのが、プロパティとして顧客リストに格納されているIDを参照する「顧客ID」列を追加しようと思いますが、このときユーザーにはあくまで顧客名で選択させ、実際に格納する値は「顧客ID」にしたいと思います。

さて、SharePoint 上でできるだけ手軽に実装するにはどうしたらよいでしょうか。

追加する「顧客ID」列のデータの種類を参照列にする方法も考えましたが、これでは直接、顧客リストの顧客名を選択させるだけで同時にIDを取得することはできず要件を満たせません。

そこで SharePoint Designer 2007 を利用することにしました。既存のコントロールと JavaScript の組み合わせだけで対応できそうです。

[図.ライブラリ内でのリストデータの参照]

Listlibrary

作業概要

  1. 顧客リストからデータソースを生成する
  2. ASP.NET のドロップダウンリスト コントロールを配置し、1.で生成した顧客リストのデータソースをバインドする
  3. ドキュメントライブラリ上の顧客ID列に値を格納するようなコードをJavaScriptで記述する

顧客リストからデータソースを生成する

  1. SharePoint Desinger 2007 を使用し、契約書ライブラリ内の EditForm.aspx をコピーし "New_EditForm.aspx" として EditForm.aspx と同じ場所に保存します(オリジナルの EditForm.aspx は念のため温存しておきます)。
  2. 「契約書ライブラリ」のプロパティを表示し、 「関連ファイル」タブから「ドキュメントのプロパティを編集するフォーム」を "New_EditForm.aspx" に変更します。
  3. メニューバーにある「データビュー」メニューから「データソースの管理」をクリックします。
  4. デザインビュー内のリストフォームWebパーツ(ListFormWebPart)の直前あたりにカーソルを挿入した状態で、データソースの管理ウィンドウ内の顧客リストのドロップダウンメニューから「データソース コントロールの挿入」をクリックします。

    Datasourcecustomerlist

ASP.NET のドロップダウンリスト コントロールを配置し、1.で生成した顧客リストのデータソースをバインドする

  1. メニューバーにある「作業ウィンドウ」から「ツールボックス」をクリックします。

  2. リストフォーム Web パーツ(ListFormWebPart)の直前あたり(ただし、<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
    タグよりあと) に ツールボックス内に表示されるASP.NETコントロールの DropDownList を追加します。

  3. デザインビューに表示されるDropDownList の右側に表示される ">" をクリックし、"コモン DropDownList タスク" に表示される 「データソースの選択」をクリックします。

  4. データソース構成ウィザードが表示されます。

  5. 「データソースの選択」にて先ほど追加したデータソースを指定します。既定では"spdatasource1" という名前です。続いて「DropDownListで表示するデータ フィールドの選択」にて表示したい列を選択します。私の環境ではタイトル列を顧客名フィールドとして利用していますので"Title" を指定しています。「DropDownList の値のデータフィールドの選択」にて実際に取得したいフィールドの値を指定します。今回は最終的に顧客IDを取得したいので私の環境では"_x9867__x5ba2_ID"という列を指定しています(ここで選択する列名は環境によって異なることになると思いますので適宜状況に応じたものを選択するようにしてください。なお、最初からわかりやすい列名にしておきたい場合は列作成時に列のタイトルを英語表記で指定しておきあとから日本語のタイトルに変更しておくとよいです)。
    Datasourceconfigwiz

  6. [OK] をクリックします。

  7. "AutoPostBack を有効にする" チェックボックスをオンにします。

以上で契約書ライブラリのプロパティ編集画面に顧客リストの一部が表示できるようになります。今回利用した DropDownList はユーザーからアクセスされたときには Select Option タグとして出力されるようになります。

JavaScript を記述する

<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">タグの直後あたりに、たとえば次のような JavaScript を記述します。

+++++++++++++++++++++++++++++++++++

<script type="text/javascript">
<!--
_spBodyOnLoadFunctionNames.push("getCustomerID");

function getCustomerID()
{
var sourceTag,targetTag;
var index;

//"ctl00_PlaceHolderMain_DropDownList1"の部分はDropDownList の ID値です。
sourceTag=document.getElementById("ctl00_PlaceHolderMain_DropDownList1");

//"ctl00_m_g_79887cea~" の部分は 「顧客ID」列となっている input タグの IDです
targetTag=document.getElementById("ctl00_m_g_79887cea_b0ac_4eac_87ea_f0895d24288a_ctl00_
ctl02_ctl00_ctl01_ctl00_ctl00_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_TextField
");

//ドロップダウンリストで選択されている項目の値を顧客ID列に格納します
index=sourceTag.selectedIndex;
targetTag.value=sourceTag.options[index].value;

//顧客ID列は直接は編集できないよう、読み取り専用にしておきます
targetTag.readOnly=true;
}

+++++++++++++++++++++++++++++++++++

データビューの連携

今回はついでに、顧客リストのデータをデータビューを使って同時に表示するようにしています。このあたりは前回の記事の応用です(以前の記事)。構成の概要だけご紹介しておきます。

  1. DropDownList の隣に顧客リストのデータビューを挿入します。
  2. データビューのフィルタ設定で、ドロップダウンリスト コントロールの値をパラメータとしてフィルタします。(例) "顧客ID" が "次の値に等しい" "param1" ※ param1 はドロップダウンリスト コントロールの値

補足

今回はデータビューと連携させるために ドロップダウンリストの AutoPostBack を 有効にしましたが、特にデータビューと連携させないのであれば AutoPostBack は有効にせず、直接ドロップダウンリストの onchanged イベントで 顧客ID 列に値を格納するようにしてももちろん構いません。

onchanged イベントを利用して即座に顧客ID列に値を格納する場合のコードサンプル
+++++++++++++++++++++

_spBodyOnLoadFunctionNames.push("addOnchangeFunction");

function addOnchangeFunction()
{
var sTag=document.getElementById("ctl00_PlaceHolderMain_DropDownList1");
sourceTag.onchange=function getCustomerID(){
               var sourceTag,targetTag;
              targetTag=document.getElementById("ctl00_m_g_79887cea_b0ac_4eac_87ea_f0895d24288a_ctl00_ctl02_
ctl00_ctl01_ctl00_ctl00_ctl00_ctl00_ctl00_ctl04_ctl00_ctl00_TextField");
             sourceTag=document.getElementById("ctl00_PlaceHolderMain_DropDownList1");
              var index=sourceTag.selectedIndex;
             targetTag.value=sourceTag.options[index].value;
             targetTag.readOnly=true;
}
}

+++++++++++++++++++++

以上、参考になれば幸いです。

続きを読む »
2008年3月12日 (水)

たまには自分の仕事にかかわる記事を書こうと思います。最近新たに開発した お勧めの SharePoint 技術研修のご案内です。

システム管理者にせよ開発者にせよ、SharePoint の技術者にとってハードルとなりがちなのが周辺技術の理解です。とはいえ、既存の技術については勉強し始めるとどこから手をつけていいかわからないほど情報量も膨大です。そこで、SharePoint と関連するところに的を絞って、Active Directory や IIS 6.0 、SQL Server 2005、.NET Framework などの基礎技術力を身につけられる2日間のコースを作ってみました。もちろん 2日間で全ての技術がわかるようになるわけではありませんが、少なくともどのあたりから勉強し始めればよいかの指針にはなるのではないかと思っています。

コース名: 「Microsoft Office SharePoint Server 2007 ベーススキル トレーニング
内容は以下の通りです。

******************************************

1. SharePoint Server 2007 概要
  SharePoint Server 2007 の製品概要とアーキテクチャを説明します。
            ・SharePoint Server 2007 の製品概要
   ・SharePoint Server 2007 の主なサーバーの役割
   ・システム構成例
   ・推奨されるサーバー構成
   ・TCP/IP ネットワーク ロードバランス サービス概要
   ・MOSS におけるユーザー認証について
   ・SharePoint サイトの構造
   ・サイト テンプレート
   ・サイト内の構造
   ・管理サイト
   ・コマンドライン管理ツール   
2. Active Directory と Windows 認証
  SharePoint のユーザー認証は Windows システムの機能を利用しています。SharePoint 上でユーザー管理をする上でWindows 認証の基本的な仕組みを理解しておくことが重要です。最低限知っておきたい Active Directory ドメインの基礎知識とともに Windows 認証のしくみを解説します。
   ・Windows ネットワークの管理
   ・Active Directory ドメインの構造
   ・Active Directory ドメイン
   ・ユーザーアカウント
   ・グループアカウント
   ・グループポリシー
   ・Windows 認証
   ・NTLM 認証の仕組み
   ・Kerberos 認証の仕組み
3. IIS 6.0 と SharePoint
  IIS 6.0 上で Web サイトを構築する上での基本的な構成・管理方法を説明します。また SharePoint 管理で知っておきたい IIS の構成ポイントを説明します。
   ・IIS の変遷
   ・IIS 6.0 が提供するサービス
   ・Web サイト
   ・Web アプリケーション
   ・サーバーロックダウン
   ・認証
   ・要求処理のアーキテクチャ
   ・HTTP リスナ (HTTP.sys)
   ・ワーカー プロセス (W3WP.exe)
4. SQL Server と SharePoint
  SQL Server 2005 を中心に、SharePoint を利用および保守管理する上で必要てなる 基本概念や操作について説明します。
   ・SQL Server 2005 の主なエディション
   ・SQL Server 2005 の主なコンポーネント
   ・SQL データベース
   ・データベース オブジェクト
   ・Transact - SQL
   ・トランザクション
   ・データの読み取り
   ・データの更新
   ・インデックス
   ・その他のデータベース オブジェクト
   ・セキュリティの概念
   ・ネットワークの構成
   ・データベースのバックアップ
   ・完全バックアップ
   ・トランザクションログ バックアップ
   ・増分バックアップ
   ・データベースの復旧モデル
   ・復旧モデルとバックアップ種類の関係の整理
   ・MOSS の主なデータベース
   ・MOSS データベースを保守する上での主な考慮事項
   ・データ ファイルの初期値と拡張
   ・インデックスの断片化
   ・MOSS データベースの復旧モデル
   ・MOSS での利用時に SQL Server 2005 Enterprise Edition を使用する主な利点
5. .NET Framework と SharePoint
  SharePoint サイトは ASP.NET 2.0 ベースの Web アプリケーションです。この章では、SharePoint で利用されている様々な .NET Framework の技術概要を説明します。
   ・.NET Framework の概要
   ・.NET Framework 3.0
   ・ASP.NET 2.0
   ・ADO.NET 2.0
   ・Windows Workflow Foundation
   ・MOSS で使用する開発ツール
6. SharePoint のユーザー認証と承認
  最後に総括として、SharePoint 上でバックエンドデータベースとのやり取りにはどのようなアカウントが使用されているのか、またユーザー認証と承認がどのようになっているかを確認します。
   ・SharePoint サイトからのデータベース アクセス
   ・SharePoint サイトへのユーザー アクセス

******************************************

割と盛りだくさんですが、実機も用意しますので実際に画面を操作しながら確認しながらじっくり学べるようにしています。

今のところ、まだ公開したばかりで、実際にどのくらいニーズがあるかわかりませんので、初回2回まで定期開催としてクリエ・イルミネート社の Web サイトにスケジュールを公開しています。今後の実施スケジュールは様子を見て公開する予定です。なお、どちらも私が登壇する予定です。

ご興味のある方はご参加いただけますと幸いです。

申込等については下記 URL をご参照ください。
http://www.crie-illuminate.jp/training/courselist01.aspx?id=CI09-H

以上、ご参考まで。

2008年3月11日 (火)

ようやく MOSS に関する新たな日本語の書籍が発売になったようです!

出版元は日経BPソフトプレスさんです。
http://ec.nikkeibp.co.jp/item/books/A00700.html

これは、すでに発売されている 「Office SharePoint Server 2007 Administrator's Companion」という英語の書籍の日本語翻訳版です。それぞれ価格は 約6,000 円で、上下合わせると 約12,000 円です。

余談ですが、(2008/3/11 現在) Amazon のサイトは下巻のページに書籍タイトルの誤植があり、「SharePoint Server 2007 オフィシャルマニュアル 下」などで検索してもうまくヒットしないと思います。そのうち修正されると思いますが、今は「Microsoft Office SharePoint Se (3) 」と入力するとヒットします。

私自身「Office SharePoint Server 2007 Administrator's Companion」を参考にすることも多く、早く日本語で出版されることがあればよいのにとは思っていたのですがよかったです。さらにより詳細でかつ守備範囲の広い書籍がでたことで多くの方が MOSS の製品学習に取り組みやすくなるのではないでしょうか。

MOSS 製品が出て1年強立ちます。「ひと目でわかる~」は RTM がでてすぐに執筆に掛りそれこそ大みそかもお正月も徹夜続きで執筆して、ようやく出版にたどり着けたのがちょうど1年前です。それからもう1年経つのですね。早いものです。「ひと目でわかる~」は拙筆ではありまして Amazon のコメントなど見るとわたくしにとって非常に反省すべきコメントも多く寄せられていますが、製品が出てすぐのタイミングで日本語での情報はすぐにはでないだろうと踏んで、限られた時間とページ数の中で精一杯可能な限りお伝えしたい情報は含めたつもりです。そのため多くの方にご利用いただき、かつ各種MOSS関連セミナーにご参加くださった方々のフォローアップ資料として情報提供させていただくことはできたのではないかと自負しております。

ようやくこのように新たに日本語の本がでることになり、「ひと目で~」の書籍は、当初の目的は果たし終えたような気がして感慨無量です。

今後も引き続き日本語の書籍が増えるとよいですね。