IIS ワーカプロセスに関する備忘録
VSTOを使った文書でワークフローを実行する際の注意事項

アイテム保存の[OK] ボタンクリック時の入力フィールド検証

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

コメント

コメントの確認

コメントのプレビュー

プレビュー中です。コメントはまだ投稿されていません。

処理中...
コメントを投稿できませんでした。エラー:
コメントを投稿しました。コメントは記事の投稿者が承認してから表示されます。 さらにコメントを投稿する

入力された文字と数字は画像と一致していません。再度入力してください。

最後に、下の画像の中に見える文字と数字を入力してください。これはプログラムを使ってコメントを自動的に投稿するのを防ぐために行われています。

画像を読み取れない場合は 別の画像を表示してください。

処理中...

コメントを投稿

コメントは記事の投稿者が承認してから表示されます。

アカウント情報

(名前とメールアドレスは必須です。メールアドレスは公開されません。)