Фрагмент кода: создание внешнего типа контента с помощью объектной модели администрирования
Дата последнего изменения: 7 мая 2010 г.
Применимо к: SharePoint Server 2010
В этой статье
Описание
Необходимые компоненты
Использование этого примера
Описание
В следующем примере кода показано, как программными средствами создать внешний тип контента с помощью объектной модели администрирования BDC на сервере.
Примечание |
---|
Объектную модель клиента администрирования BDC можно использовать для создания внешнего типа контента на клиенте. |
Необходимые компоненты
Microsoft SharePoint Server 2010 или Microsoft SharePoint Foundation 2010 на сервере.
Microsoft .NET Framework 3.5 на клиентском компьютере.
Microsoft Visual Studio.
Использование этого примера
Запустите Visual Studio и создайте проект консольного приложения C#. При создании проекта выберите .NET Framework 3.5.
В меню Вид выберите Страницы свойств, чтобы вывести свойства проекта.
На вкладке Построение в качестве Целевой платформы выберите Любой ЦП.
Закройте окно свойств проекта
В обозревателе решений в разделе Ссылки удалите все ссылки проекта кроме System и System.Core.
Добавьте в проект следующие ссылки:
Microsoft.BusinessData
Microsoft.SharePoint
System.Web
Замените автоматически созданный код в файле Program.cs на код, приведенный в конце этой процедуры.
Замените строковое значение <siteUrl> на допустимое имя сайта SharePoint. Кроме того, задайте параметры LobSystemInstance как для внешней системы.
Сохраните проект.
Скомпилируйте и запустите проект.
using System;
using System.Linq;
using Microsoft.BusinessData.MetadataModel;
using Microsoft.BusinessData.Runtime;
using Microsoft.SharePoint.BusinessData.SharedService;
using Microsoft.SharePoint.BusinessData.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace Microsoft.SDK.SharePoint.Samples.Bdc.CreateEntity
{
class Program
{
static void Main(string[] args)
{
// Get the Catalog for the SharePoint site
BdcService service =
SPFarm.Local.Services.GetValue<BdcService>(String.Empty);
SPSite site = new SPSite("<siteUrl>");
SPServiceContext context = SPServiceContext.GetContext(site);
AdministrationMetadataCatalog catalog =
service.GetAdministrationMetadataCatalog(context);
// Create a new Contact Model
// NOTE: Assume that the "ContactModel" Model
// does not already exist.
Model contactModel = Model.Create(
"ContactModel", true, catalog);
// Make a new Contact LobSystem
// NOTE: Assume that the "AdventureWorks" LobSystem
// does not already exist.
LobSystem adventureWorksLobSystem =
contactModel.OwnedReferencedLobSystems.Create(
"AdventureWorks", true, SystemType.Database);
// Make a new AdventureWorks LobSystemInstance.
LobSystemInstance adventureWorksLobSystemInstance =
adventureWorksLobSystem.LobSystemInstances.Create(
"AdventureWorks", true);
// Set the connection properties.
adventureWorksLobSystemInstance.Properties.Add(
"AuthenticationMode", "PassThrough");
adventureWorksLobSystemInstance.Properties.Add(
"DatabaseAccessProvider", "SqlServer");
adventureWorksLobSystemInstance.Properties.Add(
"RdbConnection Data Source", "MSS2010");
adventureWorksLobSystemInstance.Properties.Add(
"RdbConnection Initial Catalog", "AdventureWorks");
adventureWorksLobSystemInstance.Properties.Add(
"RdbConnection Integrated Security", "SSPI");
adventureWorksLobSystemInstance.Properties.Add(
"RdbConnection Pooling", "true");
// Create a new Contact Entity.
Entity contactEntity = Entity.Create(
"Contact",
"AdventureWorks",
true,
new Version("1.0.0.0"),
10000,
CacheUsage.Default,
adventureWorksLobSystem,
contactModel,
catalog);
// Set the identifier to the ContactID column.
contactEntity.Identifiers.Create(
"ContactID", true, "System.Int32");
// Create the Finder Method,
// i.e. the method to return all rows.
CreateReadListMethod(catalog, contactEntity);
// Create the Specific Finder Method,
// i.e. the method to return one row.
CreateReadItemMethod(catalog, contactEntity);
// Validate the Contact Entity.
ActivationError[] activationErrors =
contactEntity.Validate();
// Check if the validation failed.
if (activationErrors.Count() == 0)
{
// The validation was successful so publish the Contact Entity.
contactEntity.Activate();
Console.WriteLine("Created Contact Model");
}
else
{
// The validation failed so display the validation errors.
Console.WriteLine("Contact Model was not created and" +
" failed with the following errors:");
foreach (ActivationError item in activationErrors)
{
Console.WriteLine(item.ToString());
}
}
// Wait for any key to be hit before exiting the program
Console.ReadKey();
}
private static void CreateReadListMethod(
AdministrationMetadataCatalog catalog, Entity contactEntity)
{
// Create the Finder method
Method getContactsMethod = contactEntity.Methods.Create(
"GetContacts", true, false, "Contact");
// Specify the query
getContactsMethod.Properties.Add(
"RdbCommandText",
"SELECT TOP(@MaxRowsReturned) [ContactID], [LastName]," +
" [Phone], [EmailAddress] FROM [Person].[Contact]");
// Set the command type
getContactsMethod.Properties.Add("RdbCommandType", "Text");
// Set the additional property values so that this
// External Content Type can be displayed
// in SharePoint Designer.
getContactsMethod.Properties.Add(
"Schema", "Person");
getContactsMethod.Properties.Add(
"BackEndObjectType", "SqlServerTable");
getContactsMethod.Properties.Add(
"BackEndObject", "Contact");
// Create a Filter so that we can limit the number
// of rows returned;
// otherwise we may exceed the list query size threshold.
FilterDescriptor limitRowsReturnedFilter =
getContactsMethod.FilterDescriptors.Create(
"RowsReturnedLimit", true, FilterType.Limit, null);
limitRowsReturnedFilter.Properties.Add(
"IsDefault", true);
// Create the RowsToRetrieve input parameter.
Parameter maxRowsReturnedParameter =
getContactsMethod.Parameters.Create(
"@MaxRowsReturned", true, DirectionType.In);
// Create the TypeDescriptor for the MaxRowsReturned parameter.
// using the Filter we have created.
TypeDescriptor maxRowsReturnedTypeDescriptor =
maxRowsReturnedParameter.CreateRootTypeDescriptor(
"MaxRowsReturned",
true,
"System.Int64",
"MaxRowsReturned",
null,
limitRowsReturnedFilter,
TypeDescriptorFlags.None,
null,
catalog);
// Create the Contacts return parameter.
Parameter contactsParameter =
getContactsMethod.Parameters.Create(
"GetContacts", true, DirectionType.Return);
// Create the TypeDescriptors for the Contacts return parameter.
TypeDescriptor returnRootCollectionTypeDescriptor =
contactsParameter.CreateRootTypeDescriptor(
"Contacts",
true,
"System.Data.IDataReader, System.Data, Version=2.0.0.0," +
" Culture=neutral, PublicKeyToken=b77a5c561934e089",
"Contacts",
null,
null,
TypeDescriptorFlags.IsCollection,
null,
catalog);
TypeDescriptor returnRootElementTypeDescriptor =
returnRootCollectionTypeDescriptor.ChildTypeDescriptors.Create(
"Contact",
true,
"System.Data.IDataRecord, System.Data, Version=2.0.0.0," +
" Culture=neutral, PublicKeyToken=b77a5c561934e089",
"Contact",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"ContactID",
true,
"System.Int32",
"ContactID",
new IdentifierReference("ContactID",
new EntityReference("AdventureWorks", "Contact", catalog),
catalog),
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"LastName",
true,
"System.String",
"LastName",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"Phone",
true,
"System.String",
"Phone",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"EmailAddress",
true,
"System.String",
"EmailAddress",
null,
null,
TypeDescriptorFlags.None,
null);
// Create the finder method instance
MethodInstance readListMethodInstance =
getContactsMethod.MethodInstances.Create(
"GetContacts",
true,
returnRootCollectionTypeDescriptor,
MethodInstanceType.Finder,
true);
// Set the default value for the number of rows
// to be returned filter.
// NOTE: The method instance needs to be created first
// before we can set the default value.
maxRowsReturnedTypeDescriptor.SetDefaultValue(
readListMethodInstance.Id, Int64.Parse("200"));
}
private static void CreateReadItemMethod(
AdministrationMetadataCatalog catalog, Entity contactEntity)
{
// Create the specific finder method
Method getContactMethod = contactEntity.Methods.Create(
"GetContact", true, false, "Contact");
// Specify the query
getContactMethod.Properties.Add(
"RdbCommandText",
"SELECT [ContactID], [LastName], [EmailAddress]," +
" [Phone] FROM [Person].[Contact]" +
" WHERE [ContactID] = @ContactID");
// Set the command type
getContactMethod.Properties.Add("RdbCommandType", "Text");
getContactMethod.Properties.Add(
"Schema", "Person");
getContactMethod.Properties.Add(
"BackEndObjectType", "SqlServerTable");
getContactMethod.Properties.Add(
"BackEndObject", "Contact");
// Create the ContactID input parameter
Parameter contactIdParameter =
getContactMethod.Parameters.Create(
"@ContactID", true, DirectionType.In);
// Create the TypeDescriptor for the ContactID parameter
contactIdParameter.CreateRootTypeDescriptor(
"ContactID",
true,
"System.Int32",
"ContactID",
new IdentifierReference(
"ContactID",
new EntityReference("AdventureWorks", "Contact", catalog),
catalog),
null,
TypeDescriptorFlags.None,
null,
catalog);
// Create the Contact return parameter
Parameter contactParameter =
getContactMethod.Parameters.Create(
"Contact", true, DirectionType.Return);
// Create the TypeDescriptors for the Contact return parameter.
TypeDescriptor returnRootCollectionTypeDescriptor =
contactParameter.CreateRootTypeDescriptor(
"Contacts",
true,
"System.Data.IDataReader, System.Data, Version=2.0.0.0," +
" Culture=neutral, PublicKeyToken=b77a5c561934e089",
"Contacts",
null,
null,
TypeDescriptorFlags.IsCollection,
null,
catalog);
TypeDescriptor returnRootElementTypeDescriptor =
returnRootCollectionTypeDescriptor.ChildTypeDescriptors.Create(
"Contact",
true,
"System.Data.IDataRecord, System.Data, Version=2.0.0.0," +
" Culture=neutral, PublicKeyToken=b77a5c561934e089",
"Contact",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"ContactID",
true,
"System.Int32",
"ContactID",
new IdentifierReference("ContactID",
new EntityReference("AdventureWorks", "Contact", catalog),
catalog),
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"LastName",
true,
"System.String",
"LastName",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"Phone",
true,
"System.String",
"Phone",
null,
null,
TypeDescriptorFlags.None,
null);
returnRootElementTypeDescriptor.ChildTypeDescriptors.Create(
"EmailAddress",
true,
"System.String",
"EmailAddress",
null,
null,
TypeDescriptorFlags.None,
null);
// Create the specific finder method instance
getContactMethod.MethodInstances.Create(
"GetContact",
true,
returnRootElementTypeDescriptor,
MethodInstanceType.SpecificFinder,
true);
}
}
}
См. также
Ссылка
GetAdministrationMetadataCatalog(SPServiceContext)