如何:静止从列表中选择的表单模板

上次修改时间: 2010年3月30日

适用范围: SharePoint Server 2010

在此任务中,将使用已由管理员上载到服务器的表单模板的列表填充"DataGridView"控件。此列表对应于"管理表单模板"页上找到的列表,可在"SharePoint 2010 管理中心"网站的"一般应用程序设置"下访问该页,并且该页不包含用户部署的表单模板。

该表单需要两个按钮和一个"DataGridView"控件。第一个按钮用于设置数据网格,然后调用例程以填充该网格。第二个按钮用于静止 在数据网格中选择的表单模板,然后调用例程以刷新数据网格。静止 表单模板将阻止启动新会话,并允许当前会话在指定时间段后终止。有关静止表单模板的详细信息,请参阅 Quiesce 方法。

备注

本主题假定在 Web 前端 (WFE) 或运行 InfoPath Forms Services 的单个场服务器上安装了 Microsoft Visual Studio。

设置项目

  1. 在 Microsoft Visual Studio 中创建新的 Visual C#"Windows 窗体应用程序"项目。

  2. 在"项目"菜单上,单击"添加引用"。

  3. 在"添加引用"对话框的".NET"选项卡上,选择"Microsoft SharePoint Foundation",然后单击"确定"。(如果".NET"选项卡上未提供"Microsoft SharePoint Foundation",则在"浏览"选项卡上,浏览到 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\,选择 Microsoft.SharePoint.dll 程序集,然后单击"确定")。

  4. 在"项目"菜单上,再次单击"添加引用"。

  5. 在"添加引用"对话框的"浏览"选项卡上,浏览到 C:\Program Files\Microsoft Office Servers\14.0\Bin\,选择 Microsoft.Office.InfoPath.Server.dll 程序集,然后单击"确定"。

向窗体中添加控件和代码

  1. 将下列控件添加到表单中。在 Visual Studio"工具箱"的"所有 Windows 窗体"类别中可以找到这些控件:

    • 两个"Button"控件

    • 一个"DataGridView"控件

  2. 修改"属性"窗口中每个按钮的"文本"属性,以将第一个按钮重命名为"列出所有表单模板",将第二个按钮重命名为"静止表单模板"。

  3. 重新定位并调整表单和控件的大小,直到可在按钮上看到所有文本,且"DataGridView"控件填充了表单的大部分空间。

  4. 在"视图"菜单上,单击"代码"。

  5. 将下面的代码粘贴到代码窗口中,以替换所有现有代码。

  6. 使用您的应用程序的命名空间替换 namespace WindowsApplication1 中的 WindowsApplication1。可在"解决方案资源管理器"和"类视图"窗口中找到您的命名空间。

  7. 在"窗口"菜单上,单击"Form1.cs [Design]"。

  8. 在"属性窗口"中,单击下拉列表并选择"button1"。

  9. 在"属性窗口"中,单击"Events"按钮,此按钮通常是下拉列表下方的按钮行中左起的第四个按钮。

  10. 在"操作"部分,单击"Click"事件的下拉列表,然后选择"button1_Click"。

  11. 在"属性窗口"中,单击下拉列表并选择"button2"。

  12. 在"操作"部分,单击"Click"事件的下拉列表并选择"button2_Click"。

  13. 在"文件"菜单上单击"全部保存"。

  14. 按 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());
            }
        }
    }
}

请参阅

其他资源

开发 Windows 应用程序以执行 InfoPath Forms Services 管理任务