Extrait de code : Créer un type de contenu externe à l’aide du modèle objet Administration
Dernière modification : vendredi 7 mai 2010
S’applique à : SharePoint Server 2010
Dans cet article
Description
Conditions préalables requises
Pour utiliser cet exemple
Description
L’exemple de code suivant montre comment créer par programme un type de contenu externe à l’aide du modèle objet Administration BDC sur le serveur.
Notes
Vous pouvez utiliser le modèle objet client Administration BDC pour créer un type de contenu externe de la même manière sur le client.
Conditions préalables requises
Microsoft SharePoint Server 2010 ou Microsoft SharePoint Foundation 2010 sur le serveur.
Microsoft .NET Framework 3.5 sur l’ordinateur client
Microsoft Visual Studio.
Pour utiliser cet exemple
Démarrez Visual Studio et créez un projet d’application console C#. Sélectionnez .NET Framework 3.5 lors de la création du projet.
Dans le menu Affichage, cliquez sur Pages des propriétés pour afficher les propriétés du projet.
Sous l’onglet Générer, pour Plateforme cible, sélectionnez Any CPU.
Fermez la fenêtre de propriétés du projet.
Dans l’Explorateur de solutions, sous Références, supprimez toutes les références du projet à l’exception de System et System.Core.
Ajoutez les références suivantes au projet :
Microsoft.BusinessData
Microsoft.SharePoint
System.Web
Remplacez le code généré automatiquement dans Program.cs par le code fourni à la fin de cette procédure.
Remplacez la valeur de chaîne <siteUrl> par le nom d’un site SharePoint valide. Définissez également les paramètres LobSystemInstance en fonction de votre système externe.
Enregistrez le projet.
Compilez et exécutez le projet.
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);
}
}
}
Voir aussi
Référence
GetAdministrationMetadataCatalog(SPServiceContext)