Podrobné pokyny: 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í rozšíření aplikace Visual Studio balíčku (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 Requirements for Developing SharePoint Solutions.
Rozhraní Visual Studio 2010 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ástroje 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 Architektura BDC.
Schéma XML pro modely služby BDC. Další informace naleznete v BDC infrastruktury modelu.
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 nástroj Visual Studio.
V nabídce File (Soubor) přejděte na příkaz New (Nový) a klepněte na příkaz Project (Projekt).
V dialogovém okně Nový projekt rozbalte uzly 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 2010 SDK. Další informace naleznete ve výše uvedeném oddílu požadavků.
V poli se seznamem v horní části dialogového okna zvolte Rozhraní .NET framework 4. Rozšíření nástrojů SharePoint vyžaduje funkce této verze rozhraní .NET Framework.
Klikněte na šablonu Projekt VSIX.
Do pole Název zadejte GenerateExternalDataLists.
Klepněte na tlačítko OK.
Visual Studio přidá projekt GenerateExternalDataLists do Průzkumníku řešení.
Chcete-li vytvořit projekt rozšíření
V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel řešení, klikněte na Přidat a pak na 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ě Nový projekt rozbalte uzel Visual C# nebo Visual Basic a potom klikněte na Windows.
V poli se seznamem v horní části dialogového okna zvolte Rozhraní .NET framework 4.
Zvolte šablonu projektu Knihovna tříd.
V poli Název zadejte BdcProjectItemExtension.
Klepně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 projekt sestavení.
Chcete-li konfigurovat projekt
V projektu BdcProjectItemExtension přidejte dva soubory kódu, které mají následující názvy:
ProjectItemExtension
GenerateExternalDataLists
V nabídce Projekt klepněte na příkaz Přidat odkaz.
Na záložce .NET stiskněte klávesu CTRL klikněte na tlačítko následujících sestavení a potom klikněte na tlačítko OK:
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
WindowsBase
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
Poklikejte na soubor s kódem ProjectItemExtension.
Do souboru vložte následující kód.
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ždý subjekt 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
Poklikejte na soubor s kódem GenerateExternalDataLists.
Do souboru vložte následující kód.
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; } } }
Checkpoint
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.
Sestavte řešení
- V nabídce Sestavit zvolte 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í.
Chcete-li konfigurovat a vytvořit balíček VSIX
V Průzkumníku řešení poklikejte na soubor source.extension.vsixmanifest v projektu GenerateExternalDataLists.
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 VSX Schema for Extensions.
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 projekt Model Připojení obchodních dat, který může být použit pro vygenerování seznamu externích dat.
V oddílu Obsah editoru klikněte na tlačítko Přidání obsahu.
V dialogovém okně Přidání obsahu v seznamu Volba typu obsahu zvolte Komponenta MEF.
Poznámka
Tato hodnota odpovídá prvku MefComponent v souboru extension.vsixmanifest file. Tento prvek určuje název sestavení rozšíření v balíčku VSIX. Další informace naleznete v tématu MEFComponent Element (VSX Schema).
Pod Vybrat zdroj, klepněte projektu rádiové tlačítko a vyberte BdcProjectItemExtension v seznamu vedle něj.
Klepněte na tlačítko OK.
V nabídce Build (Sestavit) klepněte na příkaz Build Solution (Sestavit řešení). Přesvědčte se, zda je projekt zkompilován bez chyb.
Otevřete složku výstupu sestavení pro projekt GenerateExternalDataLists. Ujistěte se, zda tato složka nyní obsahuje soubor GenerateExternalDataLists.vsix.
Ve výchozím nastavení je výstupní složka sestavení \bin\Debug složka 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í rozšíření projektu 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í
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řidat 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.
Stiskněte F5 pro spuštění ladění.
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 v nabídce Soubor vyberte Nový a potom klikněte na Projekt.
Rozbalte Visual C#, rozbalte SharePoint a potom klikněte na 2010.
V poli se seznamem 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 projektů klikněte na položku Model Připojení obchodních dat.
Do pole Název zadejte TestBDCModel.
Klepněte na tlačítko OK.
V Průvodce nastavením služby SharePoint zadejte adresu URL webu, který chcete použít k ladění a klikněte na tlačítko Dokonce.
Ověřte, že se kód ve druhé instanci aplikace Visual Studio zastaví na zarážce, kterou jste nastavili výše v metodě Initialize. Stisknutím F5 v této instanci aplikace Visual Studio pokračujte v ladění projektu.
Stiskněte v experimentální instanci aplikace Visual Studio F5 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í.
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, klikněte pravým tlačítkem myši na uzel BdcModel1 v Průzkumníku řešení a klikněte na 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ýše v metodě GenerateExternalDataLists_Execute. Stisknutím F5 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.
Stiskněte F5 k vytvoření, 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í.
Ověřte, zda oddíl Seznamy na panelu Snadné spuštění nyní obsahuje seznam s názvem Entity1DataList.
Klikněte na seznam Entity1DataList.
Přesvědčte se, že seznam obsahuje sloupce s názvem Identifier1 a Message a jednu položku Identifier1 s hodnotou 0 a Message s hodnotou Hello World. Všechna tato data pochází od modelu výchozí služby BDC, která je generována šablonou projektu Model Připojení obchodních dat.
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.
Chcete-li odebrat seznam externích dat z webu služby SharePoint
V panelu Snadné spuštění webu služby SharePoint klikněte na seznam Entity1DataList.
V pásu karet na webu služby SharePoint klikněte na záložku Seznam.
Na záložce Seznam ve skupině Nastavení klikněte na Nastavení seznamu.
Pod Oprávnění a Správa klikněte Odstranit tento seznam. Klikněte na tlačítko OK k potvrzení, že chcete odeslat seznam do odpadkového koše.
Zavřete webový prohlížeč.
Chcete-li odebrat model služby BDC z webu služby SharePoint
V experimentální instanci Visual Studio v nabídce Sestavení klikněte na tlačítko Odvolání.
Visual Studio odebere model služby BDC z webu služby SharePoint.
Chcete-li odebrat rozšíření položky projektu z aplikace Visual Studio
V experimentální instanci Visual Studio v nabídce Nástroje klikněte na tlačítko Správce rozšíření.
Otevře se okno Správce rozšíření.
V seznamu rozšíření klikněte na položku Generátor seznamu externích dat a potom klikněte na tlačítko Odinstalovat.
V dialogovém okně, které se objeví, klikněte na tlačítko Ano pro potvrzení, že chcete odinstalovat rozšíření.
Klikněte na Restartovat nyní pro dokonční odinstalace.
Zavřete obě instance programu Visual Studio (experimentální instanci aplikace Visual Studio a instanci obsahující otevřené řešení GenerateExternalDataLists).
Viz také
Koncepty
Rozšíření systému projektů služby SharePoint