Codeausschnitt: Erstellen eines externen Inhaltstyps mithilfe des Verwaltungsobjektmodells
Letzte Änderung: Freitag, 7. Mai 2010
Gilt für: SharePoint Server 2010
Inhalt dieses Artikels
Beschreibung
Voraussetzungen
So verwenden Sie dieses Beispiel
Beschreibung
Das folgende Codebeispiel veranschaulicht, wie Sie einen externen Inhaltstyp mithilfe des BDC-Verwaltungsobjektmodells auf dem Server programmgesteuert erstellen.
![]() |
---|
Mithilfe des BDC-Administrationsclient-Objektmodells können Sie auf ähnliche Weise einen externen Inhaltstyp auf dem Client erstellen. |
Voraussetzungen
Microsoft SharePoint Server 2010 oder Microsoft SharePoint Foundation 2010 auf dem Server
Microsoft .NET Framework 3.5 auf dem Clientcomputer
Microsoft Visual Studio.
So verwenden Sie dieses Beispiel
Starten Sie Visual Studio, und erstellen Sie ein C#-Konsolenanwendungsprojekt. Wählen Sie beim Erstellen des Projekts .NET Framework 3.5 aus.
Klicken Sie im Menü Ansicht auf Eigenschaftenseiten, um die Projekteigenschaften aufzurufen.
Wählen Sie auf der Registerkarte Erstellen unter Zielplattform die Option Any CPU aus.
Schließen Sie das Fenster mit den Projekteigenschaften.
Entfernen Sie im Projektmappen-Explorer unter Verweise sämtliche Projektverweise bis auf System und System.Core.
Fügen Sie dem Projekt die folgenden Verweise hinzu:
Microsoft.BusinessData
Microsoft.SharePoint
System.Web
Ersetzen Sie den automatisch generierten Code in Program.cs durch den Code am Ende dieser Prozedur.
Ersetzen Sie den Zeichenfolgenwert <siteUrl> durch einen gültigen SharePoint-Websitenamen. Legen Sie außerdem die LobSystemInstance-Parameter basierend auf Ihrem externen System fest.
Speichern Sie das Projekt.
Kompilieren Sie das Projekt, und führen Sie es aus.
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);
}
}
}
Siehe auch
Referenz
GetAdministrationMetadataCatalog(SPServiceContext)