如何:创建托管属性
利用企业级搜索管理对象模型中的 [Schema] 对象,可以访问为共享服务提供程序 (SSP) 的搜索服务配置的托管属性。有关 Schema 对象的详细信息,请参阅管理元数据。
下面的过程演示如何从控制台应用程序创建托管属性。
从控制台应用程序创建托管属性
在应用程序中,设置对以下 DLL 的引用:
Microsoft.SharePoint.dll
Microsoft.Office.Server.dll
Microsoft.Office.Server.Search.dll
在控制台应用程序的类文件中,将下面的 using 语句添加到含有其他命名空间指令的代码的顶部附近。
using Microsoft.SharePoint; using Microsoft.Office.Server.Search.Administration;
创建函数将用法信息写出到控制台窗口。
static void Usage() { Console.WriteLine("Create Managed Property"); Console.WriteLine("Usage: CreateManagedPropertiesSample.exe PropertyName <DataType>"); Console.WriteLine("<DataType> - The data type for the new property. Must be one of:"); Console.WriteLine("binary"); Console.WriteLine("datetime"); Console.WriteLine("decimal"); Console.WriteLine("integer"); Console.WriteLine("text"); Console.WriteLine("yesno"); }
在控制台应用程序的 Main() 函数中,添加代码以检查 args[] 参数中的项数;它必须等于 2。否则,调用步骤 3 中定义的 Usage() 函数。
if (args.Length != 2) { Usage(); return; }
检索在 args[] 参数中指定的值,这些值将用于指定托管属性的名称和数据类型。
string strName = args[0]; string strDataType = args[1];
若要检索 SSP 的搜索上下文的 Schema 对象,请添加以下代码。有关检索搜索上下文的方法的详细信息,请参阅如何:返回搜索服务提供程序的搜索上下文。
/* Replace <SiteName> with the name of a site using the SSP */ string strURL = "http://<SiteName>"; Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
通过使用下面的代码检索托管属性的集合:
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
确定托管属性的集合是否已包含与新属性同名的托管属性。
if (properties.Contains(strName)) { Console.WriteLine("Managed Property with that name already exists."); return; }
如果 Contains 方法返回 false,则使用 strDataType 变量中的值来确定要使用的数据类型,然后调用 Create 方法创建新的托管属性。
switch (strDataType) { case ("binary"): properties.Create(strName, ManagedDataType.Binary); Console.WriteLine(strName + " created."); break; case ("datetime"): properties.Create(strName, ManagedDataType.DateTime); Console.WriteLine(strName + " created."); break; case ("decimal"): properties.Create(strName, ManagedDataType.Decimal); Console.WriteLine(strName + " created."); break; case ("integer"): properties.Create(strName, ManagedDataType.Integer); Console.WriteLine(strName + " created."); break; case ("text"): properties.Create(strName, ManagedDataType.Text); Console.WriteLine(strName + " created."); break; case ("yesno"): properties.Create(strName, ManagedDataType.YesNo); Console.WriteLine(strName + " created."); break; default: Console.WriteLine("Datatype not recognized."); Usage(); break; }
示例
以下是本主题中描述的示例控制台应用程序的完整代码。
先决条件
- 确保已创建一个共享服务提供程序。
项目引用
运行此示例之前,在控制台应用程序的代码项目中添加下面的项目引用:
Microsoft.SharePoint
Microsoft.Office.Server
Microsoft.Office.Server.Search
using System;
using System.Collections;
using System.Text;
using Microsoft.Office.Server.Search.Administration;
using Microsoft.SharePoint;
namespace CreateManagedPropertiesSample
{
class Program
{
static void Main(string[] args)
{
try
{
if (args.Length != 2)
{
Usage();
return;
}
string strName = args[0];
string strDataType = args[1];
/*
Replace <SiteName> with the name of a site using the SSP
*/
string strURL = "http://<SiteName>";
Schema sspSchema = new Schema(SearchContext.GetContext(new SPSite(strURL)));
ManagedPropertyCollection properties = sspSchema.AllManagedProperties;
if (properties.Contains(strName))
{
Console.WriteLine("Managed Property with that name already exists.");
return;
}
switch (strDataType)
{
case ("binary"):
properties.Create(strName, ManagedDataType.Binary);
Console.WriteLine(strName + " created.");
break;
case ("datetime"):
properties.Create(strName, ManagedDataType.DateTime);
Console.WriteLine(strName + " created.");
break;
case ("decimal"):
properties.Create(strName, ManagedDataType.Decimal);
Console.WriteLine(strName + " created.");
break;
case ("integer"):
properties.Create(strName, ManagedDataType.Integer);
Console.WriteLine(strName + " created.");
break;
case ("text"):
properties.Create(strName, ManagedDataType.Text);
Console.WriteLine(strName + " created.");
break;
case ("yesno"):
properties.Create(strName, ManagedDataType.YesNo);
Console.WriteLine(strName + " created.");
break;
default:
Console.WriteLine("Datatype not recognized.");
Usage();
break;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
static void Usage()
{
Console.WriteLine("Create Managed Property");
Console.WriteLine("Usage: CreateManagedPropertiesSample.exe PropertyName <DataType>");
Console.WriteLine("<DataType> - The data type for the new property. Must be one of:");
Console.WriteLine("binary");
Console.WriteLine("datetime");
Console.WriteLine("decimal");
Console.WriteLine("integer");
Console.WriteLine("text");
Console.WriteLine("yesno");
}
}
}