Поделиться через


Фрагмент кода: создание внешнего типа контента с помощью объектной модели администрирования

Дата последнего изменения: 7 мая 2010 г.

Применимо к: SharePoint Server 2010

В этой статье
Описание
Необходимые компоненты
Использование этого примера

Описание

В следующем примере кода показано, как программными средствами создать внешний тип контента с помощью объектной модели администрирования BDC на сервере.

ПримечаниеПримечание

Объектную модель клиента администрирования BDC можно использовать для создания внешнего типа контента на клиенте.

Необходимые компоненты

  • Microsoft SharePoint Server 2010 или Microsoft SharePoint Foundation 2010 на сервере.

  • Microsoft .NET Framework 3.5 на клиентском компьютере.

  • Microsoft Visual Studio.

Использование этого примера

  1. Запустите Visual Studio и создайте проект консольного приложения C#. При создании проекта выберите .NET Framework 3.5.

  2. В меню Вид выберите Страницы свойств, чтобы вывести свойства проекта.

  3. На вкладке Построение в качестве Целевой платформы выберите Любой ЦП.

  4. Закройте окно свойств проекта

  5. В обозревателе решений в разделе Ссылки удалите все ссылки проекта кроме System и System.Core.

  6. Добавьте в проект следующие ссылки:

    1. Microsoft.BusinessData

    2. Microsoft.SharePoint

    3. System.Web

  7. Замените автоматически созданный код в файле Program.cs на код, приведенный в конце этой процедуры.

  8. Замените строковое значение <siteUrl> на допустимое имя сайта SharePoint. Кроме того, задайте параметры LobSystemInstance как для внешней системы.

  9. Сохраните проект.

  10. Скомпилируйте и запустите проект.

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

См. также

Ссылка

BdcService

Services

GetAdministrationMetadataCatalog(SPServiceContext)

AdministrationMetadataCatalog

Model

Create(String, Boolean, AdministrationMetadataCatalog)

OwnedReferencedLobSystems

LobSystem

LobSystemInstance

Entity

ActivationError

Method

FilterDescriptor

Parameter

TypeDescriptor

MethodInstance

IdentifierReference

EntityReference