一覧から選択したフォーム テンプレートを休止する
最終更新日: 2010年3月30日
適用対象: SharePoint Server 2010
このタスクでは、DataGridView コントロールに、管理者によってサーバーにアップロードされたフォーム テンプレートの一覧が表示されます。この一覧は、SharePoint 2010 サーバーの全体管理サイトの [アプリケーションの全般設定] の下の [フォーム テンプレートの管理] ページに表示される一覧に対応し、ユーザーが展開したフォーム テンプレートは含まれません。
このフォームには、2 つのボタンと DataGridView コントロールが必要です。最初のボタンはデータ グリッドを設定し、データ グリッドにデータを入力するルーチンを呼び出します。2 番目のボタンは、データ グリッドで選択されたフォーム テンプレートを休止し、データ グリッドを最新の情報に更新するルーチンを呼び出します。フォーム テンプレートを休止すると、新しいセッションを開始することを禁止し、指定した時間が経過した後に現在のセッションを無効にすることができます。フォーム テンプレートの休止の詳細については、Quiesce メソッドを参照してください。
注意
このトピックは、InfoPath Forms Services を実行している Web フロントエンド (WFE) またはシングル ファーム サーバーに、Microsoft Visual Studio がインストールされていることを前提とします。
プロジェクトをセットアップするには
Microsoft Visual Studio で、新しい Visual C# Windows フォーム アプリケーション プロジェクトを作成します。
[プロジェクト] メニューの [参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスの [.NET] タブで、[Microsoft.SharePoint Foundation] を選択し、[OK] をクリックします ([Microsoft SharePoint Foundation] が [.NET] タブにない場合、[参照] タブで、C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\ を参照し、Microsoft.SharePoint.dll アセンブリを選択して、次に [OK] をクリックします)。
もう一度 [プロジェクト] メニューの [参照の追加] をクリックします。
[参照の追加] ダイアログ ボックスの [参照] タブで、C:\Program Files\Microsoft Office Servers\14.0\Bin\ を参照し、Microsoft.Office.InfoPath.Server.dll アセンブリを選択して、[OK] をクリックします。
フォームにコントロールとコードを追加するには
フォームに以下のコントロールを追加します。これらのコントロールは、Visual Studio の [ツールボックス] の [すべての Windows フォーム] カテゴリに表示されます。
2 つの Button コントロール
DataGridView コントロール
[プロパティ] ウィンドウで各ボタンの Text プロパティを変更して、最初のボタンの名前を "List all form templates" に、2 番目のボタンの名前を "Quiesce form template" に変更します。
ボタン上にすべてのテキストが表示され、フォームの大部分の領域が DataGridView コントロールによって占められるように、フォームとコントロールの配置およびサイズを調整します。
[表示] メニューの [コード] をクリックします。
以下のコードをコード ウィンドウに貼り付けて、既存のコードをすべて置き換えます。
namespace WindowsApplication1 行の WindowsApplication1 を、作成するアプリケーションの名前空間に置き換えます。この名前空間は、[ソリューション エクスプローラ] ウィンドウおよび [クラス ビュー] ウィンドウで確認できます。
[ウィンドウ] メニューの [Form1.cs [デザイン]] をクリックします。
[プロパティ] ウィンドウで、ドロップダウン リストをクリックし、[button1] をクリックします。
[プロパティ] ウィンドウで [イベント] ボタンをクリックします。このボタンは、通常、ドロップダウン リストの下に並んでいるボタンの左から 4 番目のボタンです。
[アクション] セクションで、Click イベントのボックスをクリックし、[button1_Click] をクリックします。
[プロパティ] ウィンドウで、ドロップダウン リストをクリックし、[button2] をクリックします。
[アクション] セクションで、Click イベントのボックスをクリックし、[button2_Click] をクリックします。
[ファイル] メニューの [すべて保存] をクリックします。
F5 キーを押してフォームを実行し、コードをデバッグします。
例
前述の手順に従って、次のコード例を使用し、InfoPath Forms Services を実行するサーバー上のフォーム テンプレートを一覧表示して、一覧から選択されたフォーム テンプレートを休止する、新しい Visual C# Windows フォーム アプリケーションを作成します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.SharePoint.Administration;
using Microsoft.Office.InfoPath.Server.Administration;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//setup DataGridView1
dataGridView1.ColumnCount = 4;
dataGridView1.SelectionMode =
DataGridViewSelectionMode.FullRowSelect;
dataGridView1.ReadOnly = true;
dataGridView1.MultiSelect = false;
dataGridView1.Columns[0].Name = "Form Name";
dataGridView1.Columns[1].Name = "Form ID";
dataGridView1.Columns[2].Name = "Status";
dataGridView1.Columns[3].Name = "Locale";
//populate DataGridView1
populateDataGrid();
}
private void button2_Click(object sender, EventArgs e)
{
FormsService localFormsService;
SPFarm localFarm = SPFarm.Local;
try
{
localFormsService = localFarm.Services.GetValue<FormsService>(FormsService.ServiceName);
//get the selected row
DataGridViewSelectedCellCollection dgvsc = dataGridView1.SelectedCells;
//get the FormID from the selected cells
string fTempToQuiesce = dgvsc[1].Value.ToString();
//quiesce the form template
TimeSpan ftQuiesce = new TimeSpan(600000000); //1 minute
localFormsService.FormTemplates.Item(fTempToQuiesce).Quiesce(ftQuiesce);
//populate DataGridView1 again to show updated status
populateDataGrid();
}
catch (Exception ex)
{
MessageBox.Show("An error occurred: " + ex.Message.ToString());
}
}
private void populateDataGrid()
{
FormsService localFormsService;
SPFarm localFarm = SPFarm.Local;
//clear all rows if DataGridView1 has already been populated
if (dataGridView1.Rows.Count > 0)
{
dataGridView1.Rows.Clear();
}
try
{
localFormsService = localFarm.Services.GetValue<FormsService>(FormsService.ServiceName);
foreach (FormTemplate fTemplate in localFormsService.FormTemplates)
{
//add each form template to the DataGridView1
dataGridView1.Rows.Add(fTemplate.DisplayName.ToString(), fTemplate.FormId.ToString(), fTemplate.QuiesceStatus.ToString(), fTemplate.Locale.ToString());
}
}
catch (Exception ex)
{
MessageBox.Show("An error occurred: " + ex.Message.ToString());
}
}
}
}