Пошаговое руководство. Расширение типа проектного элемента SharePoint
Элемент проекта Модель подключения к бизнес-данным служит для создания модели для службы подключения к бизнес-данным в SharePoint.По умолчанию при создании модели с помощью данного элемента проекта данные в модели не отображаются для пользователей.Необходимо создать в SharePoint внешний список, чтобы пользователи могли видеть данные.
В данном пошаговом руководстве создается расширение для элемента проекта Модель подключения к бизнес-данным.Разработчики могут использовать это расширение для создания в проекте внешнего списка, отображающего данные в модели подключения к бизнес-данным.В этом пошаговом руководстве показано выполнение следующих задач.
Создание расширения Visual Studio для выполнения двух основных задач:
создание внешнего списка, отображающего данные в модели подключения к бизнес-данным.В расширении для создания определяющего список файла Elements.xml используется объектная модель системы проектов SharePoint.Кроме того, при этом файл добавляется в проект, чтобы его можно было развертывать вместе с моделью подключения к бизнес-данным.
Пункт контекстного меню добавляется в проектные элементы Модель подключения к бизнес-данным в обозревателе решений.С помощью пункта меню разработчики могут создать внешний список для модели подключения к бизнес-данным.
Построение пакета расширения Visual Studio (VSIX) для развертывания сборки расширения.
Тестирование расширения.
Обязательные компоненты
Для выполнения данного пошагового руководства на компьютере разработчика должны быть установлены следующие компоненты:
поддерживаемые выпуски Microsoft Windows, SharePoint и Visual Studio.Дополнительные сведения см. в разделе Требования по разработке решений SharePoint.
SDK для Visual Studio.В этом пошаговом руководстве шаблон Проект VSIX из пакета SDK используется для создания пакета VSIX, который служит для развертывания элемента проекта.Дополнительные сведения см. в разделе Расширение средств SharePoint в Visual Studio.
Знание следующих подходов может оказаться полезным, но не требуется для выполнения пошагового руководства.
служба подключения к бизнес-данным в Microsoft SharePoint Server 2010.Дополнительные сведения см. в разделе BDC Architecture.
схема XML для моделей подключения к бизнес- данным.Дополнительные сведения см. в разделе BDC Model Infrastructure.
Создание проектов
Чтобы выполнить это пошаговое руководство, необходимо создать два проекта:
проект VSIX, который позволит создать пакет VSIX для развертывания расширения проектного элемента;
проект библиотеки классов, реализующей расширение проектного элемента.
Начните выполнение пошагового руководства с создания проектов.
Создание проекта VSIX
Запустите Visual Studio.
В строке меню выберите Файл, Создать, Проект.
В диалоговом окне Создать проект разверните узлы Visual C# или Visual Basic, а затем выберите узел Расширение среды.
Примечание
Узел Расширение среды доступен, только если установить пакет SDK для Visual Studio.Дополнительные сведения см. в параграфе предварительных требований ранее в этом разделе.
В списке в верхней части диалогового окна Создать проект выберите платформа .NET Framework 4,5.
Для работы с расширениями средств SharePoint требуются компоненты этой версии .NET Framework.
Выберите шаблон Проект VSIX.
В окне Имя, вставки GenerateExternalDataLists, а затем кнопку ОК.
Среда Visual Studio добавит проект GenerateExternalDataLists в Обозреватель решений.
Если файл source.extension.vsixmanifest не открывается автоматически, откройте ее контекстное меню в проекте GenerateExternalDataLists, а затем выберите Открыть
Убедитесь, что файл не имеет source.extension.vsixmanifest пустую запись (вставить Contoso) для поля автора, сохраните файл и закрыть его.
Создание проекта расширения
В Обозреватель решений открыть контекстное меню для узла решения GenerateExternalDataLists выберите Добавить, а затем выберите Создать проект.
Примечание
В проектах Visual Basic узел решения отображается в обозревателе решений, только если в диалоговом окне General, Projects and Solutions, Options Dialog Box установлен флажок Всегда показывать решение.
В диалоговом окне Добавить новый проект разверните узлы Visual C# или Visual Basic, а затем выберите узел Окна.
В списке в верхней части диалогового окна, выберите платформа .NET Framework 4,5.
В списке шаблонов проектов выберите Библиотека классов.
В окне Имя, вставки BdcProjectItemExtension, а затем кнопку ОК.
Visual Studio добавит проект BdcProjectItemExtension в решение и откроет заданный по умолчанию файл с кодом Class1.
Удалите из проекта файл c кодом Class1.
Настройка проекта расширения
Перед созданием кода для расширения элемента проекта добавьте в проект расширения ссылки на файлы с кодом и сборки.
Настройка проекта
В проект BdcProjectItemExtension добавьте два файла с кодом со следующими именами.
ProjectItemExtension
GenerateExternalDataLists
Выберите проект BdcProjectItemExtension, а затем в строке меню выберите Проект, Добавить ссылку.
В узле Сборки выберите узел Платформа и установите флажок для каждой из следующих сборок:
System.ComponentModel.Composition
WindowsBase
В узле Сборки выберите узел Расширения, а затем установите флажок для следующей сборки:
- Microsoft.VisualStudio.SharePoint
Нажмите кнопку ОК.
Определение расширения элемента проекта
Создайте класс, определяющий расширение для элемента проекта Модель подключения к бизнес-данным.Для определения расширения класс реализует интерфейс ISharePointProjectItemTypeExtension.Этот интерфейс следует реализовывать всякий раз, когда требуется расширить имеющийся тип элемента проекта.
Определение расширения элемента проекта
Вставьте следующий код в файл с кодом ProjectItemExtension.
Примечание
После добавления этого кода, проект будет иметь некоторые компилировать ошибки.Эти ошибки исчезнут при добавлении кода на следующих шагах.
Imports Microsoft.VisualStudio.SharePoint Imports System.ComponentModel.Composition Namespace Contoso.SharePointProjectItemExtensions.GenerateExternalDataLists ' Export attribute: Enables Visual Studio to discover and load this extension. ' SharePointProjectItemType attribute: Specifies the ID of the project item to extend. ' GenerateExternalDataListsExtension class: Defines the extension for the BDC project item. ' The other part of the partial class contains the logic for generating the external data lists. <Export(GetType(ISharePointProjectItemTypeExtension))> _ <SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.BusinessDataConnectivity")> _ Partial Friend Class GenerateExternalDataListsExtension Implements ISharePointProjectItemTypeExtension ' Creates the new shortcut menu item that the user clicks to generate the external data lists. Private Sub Initialize(ByVal SharePointProjectItemType As ISharePointProjectItemType) _ Implements ISharePointProjectItemTypeExtension.Initialize AddHandler SharePointProjectItemType.ProjectItemMenuItemsRequested, AddressOf SharePointProjectItemMenuItemsRequested End Sub Private Sub SharePointProjectItemMenuItemsRequested(ByVal Sender As Object, _ ByVal e As SharePointProjectItemMenuItemsRequestedEventArgs) Dim generateListMenuItem As IMenuItem = e.ViewMenuItems.Add("Generate External Data List") AddHandler generateListMenuItem.Click, AddressOf GenerateExternalDataLists_Execute End Sub End Class End Namespace
using Microsoft.VisualStudio.SharePoint; using System.ComponentModel.Composition; namespace Contoso.SharePointProjectItemExtensions.GenerateExternalDataLists { // Enables Visual Studio to discover and load this extension. [Export(typeof(ISharePointProjectItemTypeExtension))] // Specifies the ID of the project item to extend. [SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.BusinessDataConnectivity")] // Defines the extension for the BDC project item. The other part of the partial class contains // the logic for generating the external data lists. internal partial class GenerateExternalDataListsExtension : ISharePointProjectItemTypeExtension { // Implements IProjectItemTypeExtension.Initialize. Creates the new shortcut menu item that // the user clicks to generate the external data lists. public void Initialize(ISharePointProjectItemType projectItemType) { projectItemType.ProjectItemMenuItemsRequested += ProjectItemMenuItemsRequested; } private void ProjectItemMenuItemsRequested(object sender, SharePointProjectItemMenuItemsRequestedEventArgs e) { e.ViewMenuItems.Add("Generate External Data List").Click += GenerateExternalDataLists_Execute; } } }
Создание внешних списков данных
Добавьте частичное определение класса GenerateExternalDataListsExtension, который создает внешний список данных для каждой сущности в модели подключения к бизнес-данным.Для создания внешнего списка данных этот код сначала считывает относящиеся к сущности данные в модели подключения к бизнес-данным путем анализа XML-кода в файле модели.Затем он создает экземпляр списка на основе данной модели подключения к бизнес-данным и добавляет экземпляр списка в проект.
Создание внешних списков данных
Вставьте следующий код в файл с кодом GenerateExternalDataLists.
Imports Microsoft.VisualStudio.SharePoint Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.IO Imports System.Linq Imports System.Text Imports System.Xml.Linq Namespace Contoso.SharePointProjectItemExtensions.GenerateExternalDataLists ' Creates the external data lists for the BDC item. The other part of the partial class ' defines the BDC project item extension. Partial Friend Class GenerateExternalDataListsExtension Private Const ModelFileNameString As String = "ModelFileName" Private Const EXTENSION_BDCM As String = ".bdcm" Private Const NamespaceString As String = "https://schemas.microsoft.com/windows/2007/BusinessDataCatalog" Private Shared ReadOnly BdcNamespace As XNamespace = XNamespace.Get(NamespaceString) ' Generates an external data list for each Entity in the BDC model. This event handler is called ' when the developer clicks the shortcut menu item that the extension adds to the BDC project item. Private Sub GenerateExternalDataLists_Execute(ByVal Sender As Object, ByVal e As MenuItemEventArgs) Dim projectItem As ISharePointProjectItem = CType(e.Owner, ISharePointProjectItem) Dim bdcmFile As ISharePointProjectItemFile = GetModelFile(projectItem) Dim doc As XDocument = XDocument.Load(bdcmFile.FullPath) Dim skippedEntities As List(Of XElement) = New List(Of XElement)() ' Try to generate an external data list for each entity defined in the BDC model file. For Each entity As XElement In doc.Root.Elements(BdcNamespace + "LobSystems").Elements( _ BdcNamespace + "LobSystem").Elements(BdcNamespace + "Entities").Elements(BdcNamespace + "Entity") If False = GenerateExternalDataList(projectItem, entity) Then skippedEntities.Add(entity) End If Next ' Report skipped entities. If skippedEntities.Count <> 0 Then Dim entityNameList As StringBuilder = Nothing skippedEntities.ForEach(Function(entity As XElement) If (entityNameList Is Nothing) Then entityNameList = New StringBuilder() Else entityNameList.AppendLine(",") End If entityNameList.Append(entity.Attribute("Name").Value) End Function) Dim message As String = String.Format("The following Entities were skipped because " & "either a LobSystemInstance, SpecificFinder, or Finder was not found for them. \r\n{0}", _ entityNameList) projectItem.Project.ProjectService.Logger.WriteLine(message, LogCategory.Warning) End If End Sub ' Gets the ISharePointProjectItemFile object for the BDC model file. Private Function GetModelFile(ByVal projectItem As ISharePointProjectItem) As ISharePointProjectItemFile Dim modelFileName As String = Nothing If projectItem.FeatureProperties.TryGetValue(ModelFileNameString, modelFileName) Then modelFileName = Path.GetFileName(modelFileName) Return (From file In projectItem.Files _ Where String.Compare(file.Name, modelFileName, StringComparison.OrdinalIgnoreCase) = 0 _ Select file).FirstOrDefault() Else ' If we can't find the ModelFileName through the FeatureProperties, ' get the first file that has a '.bdcm' extension Return (From file In projectItem.Files _ Where file.Name.EndsWith(EXTENSION_BDCM, StringComparison.OrdinalIgnoreCase) _ Select file).FirstOrDefault() End If End Function ' Boilerplate XML for the new list instance that is based on the BDC model. Private Const externalDataListContent As String = _ "<?xml version=""1.0"" encoding=""utf-8""?>" & vbCrLf & _ " <Elements https://schemas.microsoft.com/sharepoint/"">" & vbCrLf & _ " <ListInstance Title=""$EntityName$DataList""" & vbCrLf & _ " OnQuickLaunch=""TRUE""" & vbCrLf & _ " TemplateType=""104""" & vbCrLf & _ " FeatureId=""$SharePoint.Feature.Id$""" & vbCrLf & _ " Url=""Lists/$EntityName$DataList""" & vbCrLf & _ " Description=""Default List for $EntityName$."">" & vbCrLf & _ " <DataSource>" & vbCrLf & _ " <Property Name=""LobSystemInstance"" Value=""$LobSystemInstance$"" />" & vbCrLf & _ " <Property Name=""EntityNamespace"" Value=""$EntityNamespace$"" />" & vbCrLf & _ " <Property Name=""Entity"" Value=""$EntityName$"" />" & vbCrLf & _ " <Property Name=""SpecificFinder"" Value=""$SpecificFinder$"" />" & vbCrLf & _ " <Property Name=""Finder"" Value=""$Finder$"" />" & vbCrLf & _ " </DataSource>" & vbCrLf & _ " </ListInstance>" & vbCrLf & _ " </Elements>" ' Tries to generate an external data list for the specified BDC model project item and entity. Private Function GenerateExternalDataList(ByVal projectItem As ISharePointProjectItem, ByVal entity As XElement) As Boolean Dim lobSystemInstanceName As String = GetLobSystemInstanceName(entity) Dim specificFinderName As String = GetSpecificFinderName(entity) Dim finderName As String = GetFinderName(entity) Dim entityName As String = entity.Attribute("Name").Value If String.IsNullOrEmpty(lobSystemInstanceName) Or String.IsNullOrEmpty(specificFinderName) Or _ String.IsNullOrEmpty(finderName) Then Return False End If Dim newExternalDataListName As String = entityName & "DataList" Dim existingProjectItem As ISharePointProjectItem = (From existingItem As ISharePointProjectItem In projectItem.Project.ProjectItems Where existingItem.Name = newExternalDataListName Select existingItem).FirstOrDefault() ' Add a new list instance and populate it with data from the BDC model. If existingProjectItem Is Nothing Then Dim newExternalDataList As ISharePointProjectItem = projectItem.Project.ProjectItems.Add(newExternalDataListName, _ "Microsoft.VisualStudio.SharePoint.ListInstance") Dim newExternalDataListString As String = externalDataListContent newExternalDataListString = newExternalDataListString.Replace("$EntityName$", entityName) newExternalDataListString = newExternalDataListString.Replace("$LobSystemInstance$", lobSystemInstanceName) newExternalDataListString = newExternalDataListString.Replace("$EntityNamespace$", entity.Attribute("Namespace").Value) newExternalDataListString = newExternalDataListString.Replace("$SpecificFinder$", specificFinderName) newExternalDataListString = newExternalDataListString.Replace("$Finder$", finderName) Dim elementsXmlPath As String = Path.Combine(newExternalDataList.FullPath, "Elements.xml") File.WriteAllText(elementsXmlPath, newExternalDataListString) Dim elementsFile As ISharePointProjectItemFile = newExternalDataList.Files.AddFromFile(elementsXmlPath) elementsFile.DeploymentType = DeploymentType.ElementManifest End If Return True End Function Private Function GetLobSystemInstanceName(ByVal entity As XElement) As String Dim lobSystemInstances As XElement = entity.Parent.Parent.Element(BdcNamespace + "LobSystemInstances") If lobSystemInstances IsNot Nothing Then Dim lobSystemInstance As XElement = lobSystemInstances.Elements(BdcNamespace + "LobSystemInstance").FirstOrDefault() If lobSystemInstance IsNot Nothing Then Return lobSystemInstance.Attribute("Name").Value End If End If Return Nothing End Function Private Function GetSpecificFinderName(ByVal entity As XElement) As String Return GetMethodInstance(entity, "SpecificFinder") End Function Private Function GetFinderName(ByVal entity As XElement) As String Return GetMethodInstance(entity, "Finder") End Function Private Function GetMethodInstance(ByVal entity As XElement, ByVal methodInstanceType As String) As String Dim methods As XElement = entity.Element(BdcNamespace + "Methods") If methods IsNot Nothing Then For Each method As XElement In methods.Elements(BdcNamespace + "Method") Dim methodInstances As XElement = method.Element(BdcNamespace + "MethodInstances") If methodInstances IsNot Nothing Then For Each methodInstance As XElement In methodInstances.Elements(BdcNamespace + "MethodInstance") If methodInstance.Attribute("Type").Value = methodInstanceType Then Return methodInstance.Attribute("Name").Value End If Next End If Next End If Return Nothing End Function End Class End Namespace
using Microsoft.VisualStudio.SharePoint; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Xml.Linq; namespace Contoso.SharePointProjectItemExtensions.GenerateExternalDataLists { // Creates the external data lists for the BDC item. The other part of the partial class // defines the BDC project item extension. internal partial class GenerateExternalDataListsExtension { private const string ModelFileNameString = "ModelFileName"; private const string EXTENSION_BDCM = ".bdcm"; private const string NamespaceString = "https://schemas.microsoft.com/windows/2007/BusinessDataCatalog"; private static readonly XNamespace BdcNamespace = XNamespace.Get(NamespaceString); // Generates an external data list for each Entity in the BDC model. This event handler is called // when the developer clicks the shortcut menu item that the extension adds to the BDC project item. private void GenerateExternalDataLists_Execute(object sender, MenuItemEventArgs e) { ISharePointProjectItem projectItem = (ISharePointProjectItem)e.Owner; ISharePointProjectItemFile bdcmFile = GetModelFile(projectItem); XDocument doc = XDocument.Load(bdcmFile.FullPath); List<XElement> skippedEntities = new List<XElement>(); // Try to generate an external data list for each entity defined in the BDC model file. foreach (XElement entity in doc.Root.Elements(BdcNamespace + "LobSystems").Elements( BdcNamespace + "LobSystem").Elements(BdcNamespace + "Entities").Elements(BdcNamespace + "Entity")) { if (!GenerateExternalDataList(projectItem, entity)) { skippedEntities.Add(entity); } } // Report skipped entities. if (skippedEntities.Count != 0) { StringBuilder entityNameList = null; skippedEntities.ForEach(delegate(XElement entity) { if (entityNameList == null) { entityNameList = new StringBuilder(); } else { entityNameList.AppendLine(","); } entityNameList.Append(entity.Attribute("Name").Value); }); string message = string.Format("The following Entities were skipped because either a LobSystemInstance, " + "SpecificFinder, or Finder was not found for them. \r\n{0}", entityNameList); projectItem.Project.ProjectService.Logger.WriteLine(message, LogCategory.Warning); } } // Gets the ISharePointProjectItemFile object for the BDC model file. private ISharePointProjectItemFile GetModelFile(ISharePointProjectItem projectItem) { string modelFileName; if (projectItem.FeatureProperties.TryGetValue(ModelFileNameString, out modelFileName)) { modelFileName = Path.GetFileName(modelFileName); return (from file in projectItem.Files where string.Compare(file.Name, modelFileName, StringComparison.OrdinalIgnoreCase) == 0 select file).FirstOrDefault(); } else { // if we can't find the ModelFileName through the FeatureProperties, // get the first file that has a '.bdcm' extension return (from file in projectItem.Files where file.Name.EndsWith(EXTENSION_BDCM, StringComparison.OrdinalIgnoreCase) select file).FirstOrDefault(); } } // Boilerplate XML for the new list instance that is based on the BDC model. private const string externalDataListContent = @"<?xml version=""1.0"" encoding=""utf-8""?> <Elements https://schemas.microsoft.com/sharepoint/""> <ListInstance Title=""$EntityName$DataList"" OnQuickLaunch=""TRUE"" TemplateType=""104"" FeatureId=""$SharePoint.Feature.Id$"" Url=""Lists/$EntityName$DataList"" Description=""Default List for $EntityName$.""> <DataSource> <Property Name=""LobSystemInstance"" Value=""$LobSystemInstance$"" /> <Property Name=""EntityNamespace"" Value=""$EntityNamespace$"" /> <Property Name=""Entity"" Value=""$EntityName$"" /> <Property Name=""SpecificFinder"" Value=""$SpecificFinder$"" /> <Property Name=""Finder"" Value=""$Finder$"" /> </DataSource> </ListInstance> </Elements>"; // Tries to generate an external data list for the specified BDC model project item and entity. private bool GenerateExternalDataList(ISharePointProjectItem projectItem, XElement entity) { string lobSystemInstanceName = GetLobSystemInstanceName(entity); string specificFinderName = GetSpecificFinderName(entity); string finderName = GetFinderName(entity); string entityName = entity.Attribute("Name").Value; if (string.IsNullOrEmpty(lobSystemInstanceName) || string.IsNullOrEmpty(specificFinderName) || string.IsNullOrEmpty(finderName)) { return false; } string newExternalDataListName = entityName + "DataList"; ISharePointProjectItem existingProjectItem = (from ISharePointProjectItem existingItem in projectItem.Project.ProjectItems where existingItem.Name == newExternalDataListName select existingItem).FirstOrDefault(); // Add a new list instance and populate it with data from the BDC model. if (existingProjectItem == null) { ISharePointProjectItem newExternalDataList = projectItem.Project.ProjectItems.Add(newExternalDataListName, "Microsoft.VisualStudio.SharePoint.ListInstance"); string newExternalDataListString = externalDataListContent; newExternalDataListString = newExternalDataListString.Replace("$EntityName$", entityName); newExternalDataListString = newExternalDataListString.Replace("$LobSystemInstance$", lobSystemInstanceName); newExternalDataListString = newExternalDataListString.Replace("$EntityNamespace$", entity.Attribute("Namespace").Value); newExternalDataListString = newExternalDataListString.Replace("$SpecificFinder$", specificFinderName); newExternalDataListString = newExternalDataListString.Replace("$Finder$", finderName); string elementsXmlPath = Path.Combine(newExternalDataList.FullPath, "Elements.xml"); File.WriteAllText(elementsXmlPath, newExternalDataListString); ISharePointProjectItemFile elementsFile = newExternalDataList.Files.AddFromFile(elementsXmlPath); elementsFile.DeploymentType = DeploymentType.ElementManifest; } return true; } private string GetLobSystemInstanceName(XElement entity) { XElement lobSystemInstances = entity.Parent.Parent.Element(BdcNamespace + "LobSystemInstances"); if (lobSystemInstances != null) { XElement lobSystemInstance = lobSystemInstances.Elements(BdcNamespace + "LobSystemInstance").FirstOrDefault(); if (lobSystemInstance != null) { return lobSystemInstance.Attribute("Name").Value; } } return null; } private string GetSpecificFinderName(XElement entity) { return GetMethodInstance(entity, "SpecificFinder"); } private string GetFinderName(XElement entity) { return GetMethodInstance(entity, "Finder"); } private string GetMethodInstance(XElement entity, string methodInstanceType) { XElement methods = entity.Element(BdcNamespace + "Methods"); if (methods != null) { foreach (XElement method in methods.Elements(BdcNamespace + "Method")) { XElement methodInstances = method.Element(BdcNamespace + "MethodInstances"); if (methodInstances != null) { foreach (XElement methodInstance in methodInstances.Elements(BdcNamespace + "MethodInstance")) { if (methodInstance.Attribute("Type").Value == methodInstanceType) { return methodInstance.Attribute("Name").Value; } } } } } return null; } } }
Контрольная точка
Теперь проект содержит весь код, необходимый для реализации расширения элемента проекта, которое рассматривается в данном пошаговом руководстве.Выполите построение решения, чтобы убедиться, что компиляция проекта выполняется без ошибок.
Построение решения
- В строке меню выберите Построение, Построить решение.
Создание пакета VSIX для развертывания расширения элемента проекта
Для развертывания расширения воспользуйтесь проектом VSIX в своем решении для создания пакета VSIX.Сначала настройте пакет VSIX, изменив содержимое файла source.extension.vsixmanifest, входящего в состав проекта VSIX.Затем создайте пакет VSIX, выполнив построение решения.
Настройка и создание пакета VSIX
В Обозреватель решений открыть контекстное меню для файла source.extension.vsixmanifest в проекте GenerateExternalDataLists, а затем выберите Открыть.
Файл будет открыт Visual Studio в редакторе манифестов.Файл source.extension.vsixmanifest является основой файла extension.vsixmanifest, который является обязательным для всех пакетов VSIX.Дополнительные сведения об этом файле см. в разделе Справочник по схеме расширения VSIX.
В окне Название продукта введите Генератор внешних списков данных.
В окне Автор введите Contoso.
В окне Описание введите Расширение для элемента проекта модель подключения к бизнес-данным, которые могут быть использованы для создания внешних списков данных.
На вкладке Активы редактор выберите кнопку Создать.
Диалоговое окно Добавить новый актив.
В списке Тип выберите Microsoft.VisualStudio.MefComponent.
Примечание
Это значение соответствует элементу MefComponent, описанному в файле extension.vsixmanifest.Этот элемент задает имя сборки расширения в пакете VSIX.Дополнительные сведения см. в разделе MEFComponent Element.
В списке Источник выберите Проект в текущем решении.
В списке Проект выберите BdcProjectItemExtension, а затем нажмите кнопку ОК.
В строке меню выберите Построение, Построить решение.
Убедитесь, что проект будет компилироваться и построения без ошибок.
Убедитесь, что в выходную папку построения для проекта GenerateExternalDataLists теперь содержит файл GenerateExternalDataLists.vsix.
По умолчанию выходной папкой построения является папка ..\bin\Debug, расположенная в папке, содержащей файл проекта.
Тестирование расширения элемента проекта
Расширение элемента проекта готово к тестированию.Начните отладку проекта расширения в экспериментальном экземпляре Visual Studio.Затем с помощью расширения в экспериментальном экземпляре Visual Studio создайте внешний список для модели BDC.После этого откройте внешний список на сайте SharePoint, чтобы проверить, что он работает ожидаемым образом.
Запуск отладки расширения
Если необходимый перезапустите Visual Studio с учетными данными администратора, а затем откройте решение GenerateExternalDataLists.
В проект BdcProjectItemExtension, откройте файл с кодом ProjectItemExtension, а затем добавьте точку останова на строке кода в методе Initialize.
Откройте файл с кодом GenerateExternalDataLists, а затем добавьте точку останова на первой строке кода в методе GenerateExternalDataLists_Execute.
Начать отладку путем выбора ключа F5 либо в строке меню, при выборе Отладка, Начать отладку.
Visual Studio установит расширение в папку %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\External Data List Generator\1.0 и запустит экспериментальный экземпляр Visual Studio.После этого можно тестировать элемент проекта в открытом экземпляре Visual Studio.
Тестирование расширения
В экспериментальном экземпляре Visual Studio в строке меню выберите Файл, Создать, Проект.
В диалоговом окне Создать проект разверните узел Шаблоны разверните узел Visual C# разверните узел SharePoint, а затем выберите 2010.
В списке в верхней части диалогового окна, убедитесь, что .NET Framework 3.5 выделен.Для проектов Microsoft SharePoint Server 2010 требуется эта версия .NET Framework.
В списке шаблонов проектов выберите Проект SharePoint 2010.
В окне Имя, вставки SharePointProjectTestBDC, а затем кнопку ОК.
В мастере настройки SharePoint введите URL-адрес сайта, который необходимо использовать для отладки, выберите Развернуть как решение фермы, а затем нажмите кнопку Готово.
Открыть контекстное меню для проекта SharePointProjectTestBDC выберите Добавить, а затем выберите Создать элемент.
В диалоговом окне Add – SharePointProjectTestBDC NewItem разверните узел задания языка, разверните узел SharePoint.
Выберите узел 2010, а затем выберите шаблон Модель подключения к бизнес-данным (только для решения фермы).
В окне Имя, вставки TestBDCModel, а затем кнопку Добавить.
Убедитесь, что выполнение кода в другом экземпляре Visual Studio прерывается на точке останова будет установлено в методе этой Initialize файла с кодом ProjectItemExtension.
В остановленном экземпляре Visual Studio выберите ключ F5 или в строке меню выберите Отладка, Продолжить, чтобы продолжить отладку проекта.
В экспериментальном экземпляре Visual Studio выберите ключ F5, либо в строке меню выберите Отладка, Начать отладку для построения, развертывания и запустите проект TestBDCModel.
В Интернет-браузере откройте страницу по умолчанию SharePoint распологают, которое определено для отладки.
Убедитесь, что раздел Списки в области панели быстрого запуска еще не содержит список по умолчанию, который основан на модели подключения к бизнес-данным в проект.Необходимо сначала создать внешний список данных, воспользовавшись для этого пользовательским интерфейсом SharePoint или расширением элемента проекта.
Закройте Интернет-браузер.
В экземпляре Visual Studio, имеющее открытый проекта TestBDCModel открыть контекстное меню для узла TestBDCModel в Обозреватель решений, а затем выберите Создайте список внешних данных.
Убедитесь, что выполнение кода в другом экземпляре Visual Studio прерывается на точке останова в методе GenerateExternalDataLists_Execute этой в набор.Выберите ключ F5, либо в строке меню выберите Отладка, Продолжить, чтобы продолжить отладку проекта.
Экспериментальном экземпляре Visual Studio добавляет экземпляр списка в проект с именем Entity1DataList TestBDCModel, а также создает функцию, которая называется экземпляр Feature2 для экземпляра списка.
Выберите ключ F5, либо в строке меню выберите Отладка, Начать отладку для построения, развертывания и запуска проекта TestBDCModel.
В Интернет-браузере откройте страницу по умолчанию SharePoint распологают, используемое для отладки.
в разделе Списки области панели быстрого запуска, выберите список Entity1DataList.
Убедитесь, что список содержит столбцы с именами Identifier1 и сообщением, в дополнение к одному элементу, который имеет значение 0, а значение идентификатор1 сообщения hello world.
Шаблон проекта создает Модель подключения к бизнес-данным по умолчанию модель подключения к бизнес-данным, обеспечивающий все функции из этих данных.
Закройте Интернет-браузер.
Очистка компьютера разработчика
После тестирования расширения элемента проекта удалите с сайта SharePoint внешний список и модель подключения к бизнес-данным, а также удалите из Visual Studio расширение элемента проекта.
Удаление внешнего списка данных с сайта SharePoint
В области панели быстрого запуска сайта SharePoint выберите список Entity1DataList.
На ленте на сайте SharePoint выберите вкладку Список.
На вкладке Список в группе Параметры выберите параметры списка.
В Разрешения и управление ими выберите Удаление этого списка, а затем выберите ОК, чтобы подтвердить отправить список в корзину.
Закройте Интернет-браузер.
Удаление модели подключения к бизнес-данным с сайта SharePoint
В экспериментальном экземпляре Visual Studio в строке меню выберите Построение, Отозвать.
Visual Studio удаляет модель BDC c сайта SharePoint.
Удаление расширения элемента проекта из Visual Studio
В экспериментальном экземпляре Visual Studio в строке меню выберите Сервис, Расширения и обновления.
Будет открыто диалоговое окно Расширения и обновления.
В списке расширений выберите Генератор внешних списков данных, а затем нажмите кнопку Удалить.
В появившемся диалоговом окне выберите Да, чтобы подтвердить удаление расширения.
Выберите Перезагрузить сейчас для завершения удаления.
Закройте оба экземпляра Visual Studio (экспериментальном экземпляра и экземпляр, в котором открыто решение GenerateExternalDataLists).
См. также
Основные понятия
Расширение системы проектов SharePoint