如何:静止从列表中选择的表单模板
上次修改时间: 2010年3月30日
适用范围: SharePoint Server 2010
在此任务中,将使用已由管理员上载到服务器的表单模板的列表填充"DataGridView"控件。此列表对应于"管理表单模板"页上找到的列表,可在"SharePoint 2010 管理中心"网站的"一般应用程序设置"下访问该页,并且该页不包含用户部署的表单模板。
该表单需要两个按钮和一个"DataGridView"控件。第一个按钮用于设置数据网格,然后调用例程以填充该网格。第二个按钮用于静止 在数据网格中选择的表单模板,然后调用例程以刷新数据网格。静止 表单模板将阻止启动新会话,并允许当前会话在指定时间段后终止。有关静止表单模板的详细信息,请参阅 Quiesce 方法。
备注
本主题假定在 Web 前端 (WFE) 或运行 InfoPath Forms Services 的单个场服务器上安装了 Microsoft Visual Studio。
设置项目
在 Microsoft Visual Studio 中创建新的 Visual C#"Windows 窗体应用程序"项目。
在"项目"菜单上,单击"添加引用"。
在"添加引用"对话框的".NET"选项卡上,选择"Microsoft SharePoint Foundation",然后单击"确定"。(如果".NET"选项卡上未提供"Microsoft SharePoint Foundation",则在"浏览"选项卡上,浏览到 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\,选择 Microsoft.SharePoint.dll 程序集,然后单击"确定")。
在"项目"菜单上,再次单击"添加引用"。
在"添加引用"对话框的"浏览"选项卡上,浏览到 C:\Program Files\Microsoft Office Servers\14.0\Bin\,选择 Microsoft.Office.InfoPath.Server.dll 程序集,然后单击"确定"。
向窗体中添加控件和代码
将下列控件添加到表单中。在 Visual Studio"工具箱"的"所有 Windows 窗体"类别中可以找到这些控件:
两个"Button"控件
一个"DataGridView"控件
修改"属性"窗口中每个按钮的"文本"属性,以将第一个按钮重命名为"列出所有表单模板",将第二个按钮重命名为"静止表单模板"。
重新定位并调整表单和控件的大小,直到可在按钮上看到所有文本,且"DataGridView"控件填充了表单的大部分空间。
在"视图"菜单上,单击"代码"。
将下面的代码粘贴到代码窗口中,以替换所有现有代码。
使用您的应用程序的命名空间替换 namespace WindowsApplication1 中的 WindowsApplication1。可在"解决方案资源管理器"和"类视图"窗口中找到您的命名空间。
在"窗口"菜单上,单击"Form1.cs [Design]"。
在"属性窗口"中,单击下拉列表并选择"button1"。
在"属性窗口"中,单击"Events"按钮,此按钮通常是下拉列表下方的按钮行中左起的第四个按钮。
在"操作"部分,单击"Click"事件的下拉列表,然后选择"button1_Click"。
在"属性窗口"中,单击下拉列表并选择"button2"。
在"操作"部分,单击"Click"事件的下拉列表并选择"button2_Click"。
在"文件"菜单上单击"全部保存"。
按 F5 运行表单并调试代码。
示例
使用本主题中前面的步骤创建新的 Visual C# Windows 窗体应用程序,该应用程序使用以下代码示例列出运行 InfoPath Forms Services 的服务器上的表单模板,并静止从该列表中选择的表单模板。
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());
}
}
}
}