Partager via


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

  1. 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.

  2. Dans le menu Affichage, cliquez sur Pages des propriétés pour afficher les propriétés du projet.

  3. Sous l’onglet Générer, pour Plateforme cible, sélectionnez Any CPU.

  4. Fermez la fenêtre de propriétés du projet.

  5. Dans l’Explorateur de solutions, sous Références, supprimez toutes les références du projet à l’exception de System et System.Core.

  6. Ajoutez les références suivantes au projet :

    1. Microsoft.BusinessData

    2. Microsoft.SharePoint

    3. System.Web

  7. Remplacez le code généré automatiquement dans Program.cs par le code fourni à la fin de cette procédure.

  8. 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.

  9. Enregistrez le projet.

  10. 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

BdcService

Services

GetAdministrationMetadataCatalog(SPServiceContext)

AdministrationMetadataCatalog

Model

Create(String, Boolean, AdministrationMetadataCatalog)

OwnedReferencedLobSystems

LobSystem

LobSystemInstance

Entity

ActivationError

Method

FilterDescriptor

Parameter

TypeDescriptor

MethodInstance

IdentifierReference

EntityReference