Návod: Rozšiřování typu položky projektu SharePoint
Můžete použít položku projektu Model připojení obchodních dat k vytvoření modelu pro službu Připojení obchodních dat ve službě SharePoint.Ve výchozím nastavení se data v modelu uživatelům nezobrazí, když vytvoříte model pomocí této položky projektu.Musíte také vytvořit externí seznam ve službě SharePoint pro umožnění zobrazení dat uživatelům.
V tomto návodu vytvoříte rozšíření pro položku projektu Model Připojení obchodních dat.Vývojáři mohou pomocí rozšíření vytvořit externí seznam v jejich projektu, který zobrazuje data v modelu služby BDC.Tento návod demonstruje následující úkoly:
Vytvoření rozšíření aplikace Visual Studio, které provádí dvě hlavní úlohy:
Generuje externí seznam, který zobrazí data v modelu služby BDC.Rozšíření používá model objektu pro projekt systému SharePoint ke generování souboru Elements.xml, který definuje seznam.Také přidá soubor do projektu tak, aby byl nasazen spolu s modelem služby BDC.
Přidá položku nabídky zástupců položek projektu Model Připojení obchodních dat v Průzkumníku řešení.Vývojáři mohou kliknutím na tuto položku nabídky generovat externí seznam pro model služby BDC.
Vytváření balíčku rozšíření Visual Studio (VSIX) pro nasazení sestavení rozšíření.
Testování rozšíření.
Požadavky
Ve vývojovém počítači potřebujete následující součásti pro dokončení tohoto návodu:
Podporované vydání systému Microsoft Windows, SharePoint a Visual Studio.Další informace naleznete v tématu Požadavky na vývoj řešení služby SharePoint.
Visual Studio SDK.Tento návod používá šablonu Projekt VSIX v sadě SDK pro vytvoření balíčku VSIX k nasazení položky projektu.Další informace naleznete v tématu Rozšíření nástrojů SharePoint v aplikaci Visual Studio.
Znalost následujících konceptů je užitečná, ale není požadována k dokončení návodu:
Služba BDC v Microsoft SharePoint Server 2010.Další informace naleznete v tématu Architektura BDC.
Schéma XML pro modely služby BDC.Další informace naleznete v tématu Infrastruktura modelu služby BDC.
Vytváření projektů
Chcete-li dokončit tento návod, je nutné vytvořit dva projekty:
Projekt VSIX k vytvoření balíčku VSIX pro nasazení rozšíření položky projektu.
Projekt knihovny tříd, který implementuje rozšíření položky projektu.
Začněte postup vytvořením projektů.
Pro vytvoření projektu VSIX
Spusťte Visual Studio.
Na panelu nabídky vyberte možnosti Soubor, Nový, Projekt.
V dialogovém okně Nový projekt rozbalte uzel Visual C# nebo Visual Basic a potom klikněte na uzel Rozšiřitelnost.
[!POZNÁMKA]
Uzel Rozšiřitelnost je k dispozici pouze v případě, že nainstalujete Visual Studio SDK.Další informace naleznete v oddílu požadavky dříve v tomto tématu.
V seznamu v horní části dialogového okna Nový projekt zvolte .NET framework 4.5.
Rozšíření nástrojů SharePoint vyžaduje funkce této verze rozhraní .NET Framework.
Zvolte šablonu Projekt VSIX.
Do pole Název zadejte GenerateExternalDataLists a poté klikněte na tlačítko OK.
Visual Studio přidá projekt GenerateExternalDataLists do Průzkumníka řešení.
Pokud se soubor source.extension.vsixmanifest neotevře automaticky, otevřete jeho místní nabídku v projektu GenerateExternalDataLists a zvolte možnost Otevřít
Ověřte, zda soubor source.extension.vsixmanifest obsahuje neprázdnou položku (zadejte Contoso) pro pole Autor, uložte soubor a zavřete jej.
Chcete-li vytvořit projekt rozšíření
V Průzkumníku řešení otevřete místní nabídku uzlu řešení GenerateExternalDataLists a vyberte položky Přidat a Nový projekt.
[!POZNÁMKA]
V projektech v jazyce Visual Basic se uzel řešení zobrazí v Průzkumníku řešení pouze pokud je označeno zaškrtávací políčko Vždy zobrazit řešeníObecné – Projekty a řešení – dialogové okno Možnosti.
V dialogovém okně Přidat nový projekt rozbalte uzel Visual C# nebo Visual Basic a potom klikněte na uzel Windows.
V seznamu v horní části dialogového okna zvolte Rozhraní .NET framework 4.5.
V seznamu šablon projektu vyberte možnost Knihovna tříd.
Do pole Název zadejte BdcProjectItemExtension a poté klikněte na tlačítko OK.
Visual Studio přidá projekt BdcProjectItemExtension do řešení a otevře soubor výchozího kódu Class1.
Odstraňte soubor kódu Class1 z projektu.
Konfigurace projektu rozšíření
Před napsáním kódu pro vytvoření rozšíření položky projektu přidejte soubory kódu a odkazy na sestavení do projektu rozšíření.
Chcete-li konfigurovat projekt
V projektu BdcProjectItemExtension přidejte dva soubory kódu, které mají následující názvy:
ProjectItemExtension
GenerateExternalDataLists
Zvolte projekt BdcProjectItemExtension a poté na panelu nabídky zvolte Projekt, Přidání odkazu.
V uzlu Sestavení zvolte uzel Rozhraní a pak zaškrtněte políčko pro každé následující sestavení:
System.ComponentModel.Composition
WindowsBase
V uzlu Sestavení zvolte uzel Rozšíření a pak zaškrtněte políčko pro následující sestavení:
- Microsoft.VisualStudio.SharePoint
Klikněte na tlačítko OK.
Definování rozšíření položky projektu
Vytvořte třídu, která definuje rozšíření položky projektu Model připojení obchodních dat.Chcete-li definovat rozšíření, třída implementuje rozhraní ISharePointProjectItemTypeExtension.Toto rozhraní implementujte, kdykoli budete chtít rozšířit existující typ položky projektu.
Chcete-li definovat rozšíření položky projektu
Vložte následující kód do souboru s kódem ProjectItemExtension.
[!POZNÁMKA]
Po přidání tohoto kódu bude mít projekt několik chyb kompilace.Těmto chybám předejdete přidáním kódu v dalších krocích.
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; } } }
Vytváření seznamů externích dat
Přidejte částečnou definici třídy GenerateExternalDataListsExtension, která vytváří seznam externích dat pro každou entitu v modelu služby BDC.Chcete-li vytvořit seznam externích dat, tento kód nejprve čte data subjektu v modelu služby BDC pomocí analýzy dat XML v souboru modelu služby BDC.Potom vytvoří instanci seznamu, která je založena na modelu služby BDC, a přidá tuto instanci seznamu do projektu.
Chcete-li vytvořit seznam externích dat
Vložte následující kód do souboru s kódem 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; } } }
Kontrolní bod
V tomto okamžiku návodu je celý kód pro rozšíření položky projektu v projektu.Sestavte řešení, abyste se ujistili, že se projekt zkompiluje bez chyb.
Sestavení řešení
- V panelu nabídek zvolte Sestavit, Sestavit řešení.
Vytvoření balíčku VSIX k nasazení rozšíření položky projektu
Chcete-li nasadit rozšíření, použijte VSIX projekt ve vašem řešení k vytvoření VSIX balíčku.Nejprve nakonfigurujte VSIX balíček úpravou souboru source.extension.vsixmanifest, který je součástí projektu VSIX.Potom vytvořte VSIX balíček vytvořením řešení.
Konfigurace a vytvoření balíčku VSIX
V Průzkumníku řešení otevřete místní nabídku pro soubor source.extension.vsixmanifest v projektu GenerateExternalDataLists a vyberte Otevřít.
Visual Studio otevře soubor v editoru manifestu.Soubor source.extension.vsixmanifest je základem pro soubor extension.vsixmanifest a je vyžadován pro všechny balíčky VSIX.Další informace o tomto souboru získáte v tématu VSIX rozšíření schématu Reference.
V poli Název produktu napište Generátor seznamu externích dat.
V poli Autor napište Contoso.
V poli Popis napište Rozšíření pro položky projektu Model Připojení obchodních dat, který může být použit pro vygenerování seznamu externích dat.
Na kartě Aktiva editoru zvolte tlačítko Nové.
Zobrazí se dialogové okno Přidat nové aktivum.
V seznamu Typ zvolte Microsoft.VisualStudio.MefComponent.
[!POZNÁMKA]
Tato hodnota odpovídá prvku MefComponent v souboru extension.vsixmanifest.Tento prvek určuje název sestavení rozšíření v balíčku VSIX.Další informace naleznete v tématu MEFComponent Element.
V seznamu Zdroje zvolte Projekt v aktuálním řešení.
V seznamu Projekt vyberte možnost BdcProjectItemExtension a klikněte na tlačítko OK.
V panelu nabídek zvolte Sestavit, Sestavit řešení.
Ujistěte se, že se projekt zkompiluje a sestaví bez chyb.
Ujistěte se, že výstupní složka sestavení pro projekt GenerateExternalDataLists nyní obsahuje soubor GenerateExternalDataLists.vsix.
Výchozí výstupní složka sestavení je složka ..\bin\Debug pod složkou, která obsahuje soubor projektu.
Testování rozšíření položky projektu
Nyní jste připraveni k testování rozšíření položky projektu.Nejprve spusťte ladění projektu rozšíření v experimentální instanci aplikace Visual Studio.Potom použijte rozšíření v experimentální instanci Visual Studio k vytvoření externího seznamu pro model služby BDC.Nakonec otevřete externí seznam na webu služby SharePoint pro ověření, zda funguje podle očekávání.
Chcete-li začít ladit rozšíření
Pokud je to nutné, restartujte aplikaci Visual Studio s oprávněními správce a otevřete řešení GenerateExternalDataLists.
V projektu BdcProjectItemExtension otevřete soubor s kódem ProjectItemExtension a přidejte zarážku do řádku kódu v metodě Initialize.
Otevřete soubor s kódem GenerateExternalDataLists a na první řádek kódu přidejte zarážku v metodě GenerateExternalDataLists_Execute.
Zahajte ladění zvolením klávesy F5 nebo zvolením možnosti Ladění, Zahájit ladění na panelu nabídky.
Visual Studio nainstaluje rozšíření do %UserProfile%\AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\Contoso\External Data List Generator\1.0 a spustí experimentální instanci Visual Studio.Položku projektu budete testovat v této instanci aplikace Visual Studio.
Chcete-li testovat rozšíření
V experimentální instanci Visual Studio na panelu nabídky zvolte Soubor, Nový, Projekt.
V dialogovém okně Nový projekt rozbalte uzel Šablony nebo rozbalte uzel Visual C#, uzel SharePoint a poté zvolte 2010.
V seznamu v horní části dialogového okna zkontrolujte, zda je vybráno .NET framework 3.5.Projekty pro Microsoft SharePoint Server 2010 vyžadují tuto verzí rozhraní .NET Framework.
V seznamu šablon projektu vyberte možnost Projekt SharePoint 2010.
Do pole Název zadejte SharePointProjectTestBDC a poté klikněte na tlačítko OK.
Do Průvodce nastavením služby SharePoint zadejte adresu URL webu, který chcete použít k ladění, zvolte Nasadit jako řešení farmy a pak zvolte tlačítko Dokončit.
Otevřete místní nabídku projektu SharePointProjectTestBDC, vyberte položku Přidat a poté položku Nová položka.
V dialogovém okně Přidat NewItem – SharePointProjectTestBDC rozbalte uzel nainstalovaného jazyka, rozbalte uzel SharePoint.
Zvolte uzel 2010 a poté šablonu Model připojení obchodních dat (pouze řešení farmy).
Do textového pole Název zadejte TestBDCModel a poté klikněte na tlačítko Přidat.
Ověřte, že se kód ve druhé instanci aplikace Visual Studio zastaví na zarážce, kterou jste nastavili v metodě Initialize souboru kódu ProjectItemExtension.
V zastavené instanci Visual Studio zvolte klávesu F5 nebo v řádku nabídek zvolte Ladit, Pokračovat a pokračujte v ladění projektu.
V experimentální instanci Visual Studio zvolte klávesu F5 nebo v řádku nabídek zvolte Ladit, Spustit ladění k sestavení, nasazení a spuštění projektu TestBDCModel.
Webový prohlížeč otevře výchozí stránku webu služby SharePoint, která je určena pro ladění.
Ověřte, zda oddíl Seznamy v oblast Snadné spuštění ještě neobsahuje seznam, který je založen na výchozím modelu služby BDC v projektu.Je nutné nejprve vytvořit externí datový seznam, buď uživatelským rozhraním služby SharePoint nebo rozšířením položky projektu.
Zavřete webový prohlížeč.
V instanci aplikace Visual Studio, která má otevřen projekt TestBDCModel, otevřete místní nabídku uzlu TestBDCModel v Průzkumníku řešení a poté zvolte Generovat seznam externích dat.
Ověřte, že se kód ve druhé instanci aplikace Visual Studio zastaví na zarážce, kterou jste nastavili v metodě GenerateExternalDataLists_Execute.Zvolte klávesu F5 nebo v řádku nabídek zvolte Ladění, Pokračovat a pokračujte v ladění projektu.
Experimentální instance aplikace Visual Studio přidá instanci seznamu s názvem Entity1DataList do projektu TestBDCModel a také vytváří funkci s názvem Feature2 pro instanci seznamu.
Zvolte klávesu F5 nebo v řádku nabídek zvolte Ladit, Spustit ladění k sestavení, nasazení a spuštění projektu TestBDCModel.
Webový prohlížeč otevře výchozí stránku webu služby SharePoint, která se používá pro ladění.
V části Seznamy v oblasti Snadné spuštění zvolte seznam Entity1DataList.
Přesvědčte se, že seznam obsahuje sloupce s názvem Identifier1 a Message a jednu položku s názvem Identifier1 s hodnotou 0 a Message s hodnotou Hello World.
Šablona projektu Model připojení obchodních dat generuje výchozí model BDC, který poskytuje všechna tato data.
Zavřete webový prohlížeč.
Čištění vývojového počítače
Po dokončení testování rozšíření položky projektu odstraňte externí seznam a model služby BDC z webu služby SharePoint a odeberte rozšíření položky projektu z Visual Studio.
Odebrat seznam externích dat z webu služby SharePoint
V panelu Snadné spuštění webu služby SharePoint zvolte seznam Entity1DataList.
V pásu karet na webu služby SharePoint zvolte záložku Seznam.
Na záložce Seznam ve skupině Nastavení zvolte Nastavení seznamu.
V části Oprávnění a správa zvolte možnost Odstranit tento seznam a pak zvolte OK, a potvrďte tak, že chcete odeslat seznam do odpadkového koše.
Zavřete webový prohlížeč.
Odebrat model služby BDC z webu služby SharePoint
V experimentální instanci Visual Studio na panelu nabídky zvolte Sestavení, Odvolání.
Visual Studio odebere model služby BDC z webu služby SharePoint.
Odebrat rozšíření položky projektu z aplikace Visual Studio
V experimentální instanci Visual Studio na panelu nabídky zvolte Tools, Rozšíření a aktualizace.
Otevře se dialogové okno Aktualizace a rozšíření.
V seznamu rozšíření zvolte Generátor seznamu externích dat a potom klikněte na tlačítko Odinstalovat.
V dialogovém okně, které se objeví, zvolte Ano pro potvrzení, že chcete odinstalovat rozšíření.
Zvolením možnosti Restartovat nyní dokončete odinstalaci.
Zavřete obě instance programu Visual Studio (experimentální instanci a instanci obsahující otevřené řešení GenerateExternalDataLists).
Viz také
Koncepty
Rozšíření systému projektu služby SharePoint