Compartir a través de


Fragmento de código: creación de un tipo de contenido externo con el modelo de objetos de administración

Última modificación: viernes, 07 de mayo de 2010

Hace referencia a: SharePoint Server 2010

En este artículo
Descripción
Requisitos previos
Para usar este ejemplo

Descripción

En el ejemplo de código siguiente se muestra cómo crear un tipo de contenido externo mediante programación con el modelo de objetos de administración de BDC en el servidor.

Nota

Puede usar el modelo de objetos cliente de administración de BDC para crear un tipo de contenido externo de igual forma en el cliente.

Requisitos previos

  • Microsoft SharePoint Server 2010 o Microsoft SharePoint Foundation 2010 en el servidor.

  • Microsoft .NET Framework 3.5 en el equipo cliente.

  • Microsoft Visual Studio.

Para usar este ejemplo

  1. Inicie Visual Studio y cree un proyecto de aplicación de consola C#. Seleccione .NET Framework 3.5 al crear el proyecto.

  2. En el menú Ver, haga clic en Páginas de propiedades para que aparezcan las propiedades del proyecto.

  3. En la ficha Compilación, para el Destino de la plataforma, seleccione Cualquier CPU.

  4. Cierre la ventana de propiedades del proyecto.

  5. En el Explorador de soluciones, en Referencias, quite todas las referencias del proyecto excepto System y System.Core.

  6. Agregue las siguientes referencias al proyecto:

    1. Microsoft.BusinessData

    2. Microsoft.SharePoint

    3. System.Web

  7. Reemplace el código generado automáticamente en Program.cs por el código que aparece al final de este procedimiento.

  8. Reemplace el valor de cadena <siteUrl> por un nombre de sitio de SharePoint válido. De igual modo, establezca los parámetros LobSystemInstance de acuerdo con el sistema externo.

  9. Guarde el proyecto.

  10. Compile y ejecute el proyecto.

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);
        }
    }
}

Vea también

Referencia

BdcService

Services

GetAdministrationMetadataCatalog(SPServiceContext)

AdministrationMetadataCatalog

Model

Create(String, Boolean, AdministrationMetadataCatalog)

OwnedReferencedLobSystems

LobSystem

LobSystemInstance

Entity

ActivationError

Method

FilterDescriptor

Parameter

TypeDescriptor

MethodInstance

IdentifierReference

EntityReference