2009年5月

2009年5月20日 (水)

SharePoint Designer 2007を使用してリストやライブラリのNewForm.aspx(アイテムの新規作成)やEditForm.aspx(アイテムのプロパティ編集)を編集し、カスタムのJavaScriptを実装することで日付などの入力フィールドの妥当性の検証が可能です。たとえば、開始日と終了日の2つのフィールドがあったとして、終了日が開始日より前の日付となっているような場合、SharePoint Server 2007ではエラーとして扱ってくれません。そこで、JavaScript を実装して2つのフィールド値の比較をしてエラーを検出するようにします。この時、「PreSaveAction」という名前の関数を定義すると、[OK]ボタンクリック時の既定の処理を制御できます。実際には、このPreSaveAction関数はSharePointが既定で持っている関数であり、これを上書きして既定の動作を少し変えてやります。

参考までに、"開始日"と"終了日"という名前の2つの"日付と時刻(日付のみ)"のフィールドがあることを前提としたサンプルコードを記載しておきます。

PreSaveAction 関数を上書きするコードサンプル

function PreSaveAction()
{
     var startDate=getTagFromIdentifierAndTitle("input","DateTimeFieldDate","開始日");
     var endDate=getTagFromIdentifierAndTitle("input","DateTimeFieldDate","終了日");

  var date1Array=startDate.value.split("/");
  var date1=new Date(date1Array[0],date1Array[1]-1,date1Array[2]);
  var date2Array=endDate.value.split("/");
  var date2=new Date(date2Array[0],date2Array[1]-1,date2Array[2]);

    if (date1>date2)
    {
         alert("日付の指定が正しくありません");
         return false;
    }//if
    return true;
} //function

//SharePointのフィールドを取得するための関数
function getTagFromIdentifierAndTitle(tagName,identifier,title)
{
var len=identifier.length;
var tags=document.getElementByTagName(tagName);

  for(var i=0;i<tags.length;i++)
  {
     var tempString=tags[i].id;
     if(tags[i].title==title&&(identifier==""||tempString.indexOf(identifier)==tempString.length-len))
     {
           return tags[i];
      }//if
      return null;
  }//for
}//function

2009年5月18日 (月)

SharePoint の Webパーツ開発などを行う際にしばしばIIS ワーカプロセス(w3wp.exe)の再起動など行いますが、そこでよく利用するスクリプトを備忘録として記載しておきます(※IIS 6.0 が前提です)。

ワーカプロセスのリサイクル

特定のワーカプロセスのリサイクルを行うには次のスクリプトを実行します。

cscript.exe c:\windows\system32\iisapp.vbs /a "アプリケーション プール名" /r

ワーカプロセスの識別IDとアプリケーションプール名との対応を確認する

Visual Sdutio でデバッグを行う際にワーカプロセスにアタッチするときに、複数の w3wp.exe が起動しているためどれにアタッチしてよいものかわからないことがあります。そんなときには、単純に iisapp.vbs を実行すると、w3wp.exe のプロセスIDとアプリケーションプール名をリストアップしてくれるため便利です。

cscript.exe c:\windows\system32\iisapp.vbs

Iisappvbs

[図.実行結果]

※PID:プロセスID, AppPoolId: アプリケーションプール名

私はいつも上記のようなバッチファイルを手元に作成して利用しています。

2009年5月15日 (金)

SharePoint を利用する上で、システム管理者もソリューション開発者もInternet Information Services 6.0(IIS)についての基礎知識は必要です。特に、ワーカプロセスとアプリケーション プールに関する理解は重要です。そこで、今回はこのことについて触れてみたいと思います。IIS 6.0 を前提にしていますが、Windows Server 2008 のIIS 7.0上でSharePoint を動作させる場合も、実際には下位互換モードであるクラシックモードで動作するため、IIS6.0での仕組みを理解しておくことがやはり重要です。

ワーカプロセスとアプリケーションプール

SharePoint  Server 2007 などの ASP.NET Web アプリケーションは IIS 上のワーカプロセスというプロセス内で動作します。既定では通常、アプリケーションは1つのワーカプロセス内で動作しますが、複数のワーカプロセス上で動作させることもできます。

ワーカプロセスは、ワーカプロセスひとつひとつを管理するのではなく、アプリケーション プール(w3wp.exe) という単位にまとめて管理します。アプリケーションプールはIIS上に複数作成できます。アプリケーション プール単位でアプリケーションがメモリを共有できるため、たとえば、AとBというアプリケーションはアプリケーションプール1で動作させ、Cというアプリケーションはアプリケーションプール2で動作させるというように設定をしておくこともできます。この場合、たとえば、Cというアプリケーションに何か不具合があったとしてもAやBのアプリケーションには影響しないように管理できます。

アプリケーションプールとIIS Webサイトとの関係

SharePoint サイトが利用しているアプリケーション プールは、IIS管理マネージャを起動し、サイトのプロパティにある「ホームディレクトリ」タブ内で確認できます。

Homedirectory_3

[図.ホームディレクトリタブ]

アプリケーションプールの設定は、プロパティで確認をします。たとえば、「識別」タブにはアプリケーション プールに割り当てられているアカウントを確認できます。

Apppoolid

[図.アプリケーションプールのプロパティ]

SharePointではアプリケーションプールに設定されているこのアカウントがコンテンツ データベースなどにアクセスをすることとなるため、むやみにアカウントを変更しないようにしてください。

先ほど説明した通り、アプリケーションの実行環境の管理単位がアプリケーションプールです。通常は、1アプリケーション プールあたり、1ワーカプロセスが存在していますが、1つのアプリケーション プールに複数のワーカプロセスを生成することも可能です。これが Webガーデンです。

Webgarden

[図.Webガーデンの設定]

さて、このWebガーデンですが、下記ドキュメントによるとSharePointではこれを利用するとページの出力キャッシュの面で悪影響がでるとのことで、既定値を変更しないようにした方がよいようです。

セキュリティ面での考慮

アプリケーション プールで使用するアカウントの利用については、次に示すMSDNの記事が大変参考になりますので、まだ読んでいない方は必読です。

SharePoint のセキュリティ アカウント
http://technet.microsoft.com/ja-jp/magazine/dd297618.aspx

2009年5月13日 (水)

stsadm.exeのコマンドライン紹介の記事ですが、続きを長らく放置してしまいすみません。前回の宣言通り、これまで、このブログで紹介したstsadm.exeの利用例を以下にまとめておきます。

カスタム作成したサイトテンプレートを
サイトコレクション作成時に選択できるようにする

stsadm.exe -o addtemplate -filename テンプレートファイル -title タイトル

過去の関連記事

通知メールが送信される既定のタイミングを変更する

stsadm.exe -o setproperty -propertyname job-immediate-alerts -url サイトのURL -propertyvalue "every n minutes"

過去の関連記事

"New!"のアイコンの既定の表示期間を変更する

stsadm.exe -o setproperty -propertyname days-to-show-new-icon -propertyvalue 表示する日数 -url サイトのURL

過去の関連記事

WSS 3.0 でフルクロールを停止および開始する

stsadm.exe -o spssearch -action fullcrawlstop

stsadm.exe -o spssearch -action fullcrawlstart

過去の関連記事
※コメント部分

カスタム作成した通知メールのテンプレートを登録する

stsadm.exe -o updatealerttemplates -url サイトコレクションのURL -filename 通知テンプレートのファイルパス

過去の関連記事

フィーチャーの登録とアクティブ化

stsadm.exe -o installfeature -filename フィーチャーのファイルパス 

stsadm.exe -o activatefeature -name フィーチャー名 -url サイトのURL

過去の関連記事

以上ご参考まで。