Extend Functionality in SQL Server 2005 Management Studio with Add-ins
page 4 of 12
by Ameet Phadnis
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 19052/ 445

Implementing IDTExtensibility2

As mentioned earlier, the add-in creates a class that implements IDTExtensibility2. In this section we will discuss some of the methods that need to be implemented in the class. The methods that need to be implemented are:

OnConnection - Receives notification that the Add-in is being loaded. The parameters are:

          Application - The Root object of the host application

          connectMode - How the add-in is loaded

          addInInst - Represents the Add-In

OnDisconnection - As the name suggests, the Add-in is being unloaded. The parameters are:

          disconnectMode - How the add-In is unloaded

          Custom - Array of parameters specific for the host application

OnAddInsUpdate - Receives notification that the collection of Add-Ins has changed. Parameters are:

          Custom - Array of parameters specific to the host application

OnStartupcomplete - Receives notification that the host application has completed loading. Parameters are:

          Custom - Array of parameters specific to the host application

OnBeginShutdown - Receives notification that the host application is being unloaded.

          Custom - Array of parameters specific to the host application.

For our application we are mainly concerned with OnConnection. For SSMS add-in we will write our code in the OnConnection method. As we were writing the Add-In for recognizing the database object or table object we needed to have an event handler that would recognize the object that was selected. So, we wrote an event handler called OnSelectionChanged. This event handler was provided to handle the IObjectExplorerEventProvider's SelectionChanged event. So, now our code for OnConnection looks like:

Listing 1

_ApplicationObject = Ctype(Application, DTE2)
 _addInInstance = Ctype(AddINInst, AddIn)
 _ObjectExplorer = ServiceCache.GetObjectExplorer
 Dim typeOfProvider as Type = GetType(IObjectExplorerEventProvider)
 Dim provider as IObjectExplorerEventProvider = _
Ctype(ObjectExplorer.GetService(typeOfProvider), IObjectExplorerEventProvider)
 AddHandler provider.SelectionChanged, AddressOf OnSelectionChanged

The _ApplicationObject, _addInINstance, _ObjectExplorer are declared in the class as follows:

Listing 2

Private _ApplicationObject as DTE2
 Friend _addINInstance as AddIn
 Private _ObjectExplorer as IObjectExplorerService

In our SQL SP Generator application, we have declared another class called SQLObjectNode. The scope of this class is Friend. So, we can call the functions through the SelectionChanged event handler that is declared in the Connect class. The SelectionEventHandler code looks like:

Listing 3

Dim objSQLDBNode as SQLObjectNode = SQLObjectNode.GetInstanceOnSelection(Me)

This is all we need to do on this class. This class just implements the IDTExtensibility2 and lets the application know what to do in it.


View Entire Article

Article Feedback

Title:  
Name:  
Url: ( Optional )
Comment:  
Please add 3 and 2 and type the answer here:

User Comments

Title: Register for COM Interop   
Name: Charles Rex
Date: 9/21/2008 5:41:27 PM
Comment:
Hello,

The add-in must be registered before it can be used

regasm MyAddIn1.dll /codebase

or click project's Properties option from the Project menu, select the Build (C#) or Compile (VB.NET) page, and select the Register for COM Interop check box
Title: Quick Questions   
Name: Alex
Date: 7/22/2008 2:17:40 PM
Comment:
How can i get the text and/or selected text from the active window. I need to retrieve the code that was executed
Title: Really hepful   
Name: Viktar Karpach
Date: 4/15/2008 11:29:13 PM
Comment:
I want to create addin for object browser, so it would have better filtering possibilities.
Title: Tanks   
Name: Harjit Singh
Date: 4/10/2008 2:07:38 AM
Comment:
I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.

When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface
HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item. And I want to get the existing menu item in the context menu. So I convert it to IWinformsMenuHandler. And use GetMenuItems() supplied by IWinformsMenuHandler, this function will return IList [INavigableItem]. Things go well by now.
Title: subkriskat   
Name: subkriskat
Date: 3/21/2008 10:48:26 AM
Comment:
This is a very good article ,which customizing my sql .
But ,where can i get the reference for the SQLServer2005AddIn & SQLObjectNode
Thanks in advance
Title: A question about IMenuHandler   
Name: Daliang Zhang
Date: 11/4/2007 10:06:00 PM
Comment:
A question about IMenuHandler

Hi Ameet

I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.

When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface
HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item. And I want to get the existing menu item in the context menu. So I convert it to IWinformsMenuHandler. And use GetMenuItems() supplied by IWinformsMenuHandler, this function will return IList [INavigableItem]. Things go well by now.

But when I try to enumerate menu items in IList, I found a weird thing. For example, I click a stored procedure node for the first time, GetMenuItems() return a IList with count equals to 1, but there should be about 12 menu items in the context menu; then I click another stored procedure node, GetMenuItems() return a IList with count equals to the correct menu items count. I don't know why. Anyway, since I get those menu items, I try to do some modification on them. So I try to modify the text of a menu item, try to disable a menu item, but all failed. there is no change when the context menu popup.

Have you ever seen this issue, could you share with my your experience, thanks in advance.

Daliang Zhang
Best Regards
mail:zdliang1981@gmail.com
Title: A question about IMenuHandler   
Name: Daliang Zhang
Date: 11/4/2007 10:04:28 PM
Comment:
When I try my test, I found using Node.GetService(typeof(IMenuHandler)), it returns a internal class DefaultMenuHandler, which implements interface
HierarchyObject IMultiSelectMenuHandler IMenuHandler IWinformsMenuHandler. In your article, you converted it to HierarchyObject to add a new menu item.
Title: A question about IMenuHandler   
Name: Daliang Zhang
Date: 11/4/2007 10:02:21 PM
Comment:
Hi Ameet

I am a developer of .net, recently I did some test on add-in for SSMS. Thank you for the great article, it's very helpful for me.
Title: For Sam and Mark   
Name: A
Date: 10/24/2007 11:36:13 AM
Comment:
If you notice the registry entry already is mentioned in the sections for Registry. Also the debugging explains how you can setup the application for debugging.

Thanks
Title: Additional info that may help others   
Name: Mark
Date: 10/24/2007 10:54:13 AM
Comment:
\
\
\
\
\
\
\
\
Title: Thanks; but Results To?   
Name: Daniel Macey
Date: 10/20/2007 11:13:58 PM
Comment:
Good to find someone has written about this.

Thanks!


I wanted to provide my own output option (Results To) but by the looks of SQLEditors.dll and the Microsoft.SqlServer.Management.QueryExecution namespace it is impossible.

Any comment on what I am trying to do would be appreciated.
Title: Great Article   
Name: Sam
Date: 9/11/2007 9:11:35 PM
Comment:
Hi,
I hope you can shine some light on this. I am interested in debugging my add-in. in the mean time, i am not able to debug. I noticed my add in is never been loaded. Do i need to do the extra step by adding a register entry.
P.S I don't have the AddIn folder there, but i could create it.
(I am using Management Studio Express).

Thanks,
Title: SQLServer2005AddIn?   
Name: kkam
Date: 8/23/2007 9:28:42 PM
Comment:
Hi,
I'm trying to follow your article and code samples to give me a start on my first SSMS add-in. In Listing 4 you define your incomming parameter as "SQLServer2005AddIn". What am I missing...I can't see where that comes from.

Thanks.
Title: Good Job!   
Name: Kelly
Date: 8/8/2007 6:51:44 AM
Comment:
You rock,Ameet -- nice job!
Title: Wow   
Name: W
Date: 8/7/2007 4:56:41 PM
Comment:
The SQL SP Generator you guys developed works great.

Thanks
Title: Extend Functionality in SQL Server 2005 Management Studio with Add-ins   
Name: T
Date: 8/7/2007 3:32:02 PM
Comment:
What class are you looking for?
Check the Context Menu Addition Class
The Menu class to perform actions
sections to get more information.

The author has just put down the basics. They won't reveal the code as they own the code. Most of the stuff is given in the article itself.
Title: Extend Functionality in SQL Server 2005 Management Studio with Add-ins   
Name: Hiren
Date: 8/7/2007 3:10:52 PM
Comment:
I was really interested to know about SQL 2005 extenbility, but it would help more clear if you explain more about creating class that have been used in this sample.
Title: Extend Functionality in SQL Server 2005 Management Studio with Add-ins   
Name: Sanket Terdal
Date: 8/7/2007 9:48:26 AM
Comment:
Very nice article.The step by step demo makes it easier to understand.






Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2008 ASPAlliance.com  |  Page Processed at 10/11/2008 3:46:12 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search