These are chat archives for Microsoft/extendvs

19th
May 2016
Yann Duran
@yannduran
May 19 2016 04:28
@wartickler You would use DTE.ExecuteCommand("Edit.FindInFiles", anyParametersYouWantToPass)
Mordechai Zuber
@M-Zuber
May 19 2016 10:16
Is CodeLens extensible?
lukka
@lukka
May 19 2016 15:34
I get: "LegacyContentTypeSource.GlobalServiceProvider"could not be satisfied when i start up VS2015.2. Then the solution i open is completely white/blank. Any help?
Omer Raviv
@OmerRaviv
May 19 2016 16:32
@lukka Delete ComponentModelCache?
Praveen
@praveensng79_twitter
May 19 2016 17:07
@jzoss That registration attribute looks mostly right to me. see if the data it writes is identical to the VS Git provider HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\14.0_Config\SourceControlProviders{11b8e6d7-c08b-4385-b321-321078cdd1f8}
Tim Sneath
@timsneath
May 19 2016 17:13
By the way, welcome everyone to the Office Hours - every third Thursday between 10am-12pm we have some of our engineering team hang out here to focus on questions you may have on extending VS.
So do feel free to ask the lingering questions you may have or give us feedback on our extensibility model - we're eager to hear from you!
Wartickler
@wartickler
May 19 2016 17:13
Is it on right now?
Tim Sneath
@timsneath
May 19 2016 17:14
Yes - we're open for business. I'm just pinging some of my colleagues to remind them to log in to Gitter :)
Wartickler
@wartickler
May 19 2016 17:15
@yannduran suggested I use DTE.ExecuteCommand("Edit.FindInFiles", anyParametersYouWantToPass) in order to open up the FindInFiles dialog. I don't think that's going to give me what I want.
Mordechai Zuber
@M-Zuber
May 19 2016 17:15

Repeating to bring it down to the bottom ;)

Is CodeLens extensible?

Mark Deggeller
@markdeggeller
May 19 2016 17:15
Anyone have an example of using ISpaceReservationManager? I'm trying to create a popup next to the Quickinfo Tooltip, but they keep overlapping.
Mordechai Zuber
@M-Zuber
May 19 2016 17:16
what I am looking for is too have usage/reference count on the members of an enum and not just on the high level of the enum type
Yann Duran
@yannduran
May 19 2016 17:16
@wartickler It's the only way I know of to activate FindInFiles programatically. What do you need to do that it won't do for you?
Wartickler
@wartickler
May 19 2016 17:16
That will just run the command with added in a params. How can I open the dialog and pass it the folders I want it to search with
Then the user would enter the search term and press enter
Yann Duran
@yannduran
May 19 2016 17:19
Oh I see. I can't help you with that I'm afraid. Maybe someone from Microsoft can give you some information on how to do what you want
This message was deleted
@timsneath I have a question about extensibility. I want to add a tab to the Extensions Manager dialog, but the assembly that contains the functionality I need appears to be private. Is the Extension Manager not meant to be extensible by anyone other than Microsoft (as extensions like Roaming Extensions do pretty much what I want to achieve)
Tim Sneath
@timsneath
May 19 2016 17:22
@M-Zuber Unfortunately, CodeLens isn't extensible today :(. We have it on the engineering backlog as something we'd like to enable, however.
Mordechai Zuber
@M-Zuber
May 19 2016 17:25
oh well :( i'll go back to my corner :laughing:
Yann Duran
@yannduran
May 19 2016 17:26
@wartickler You might be able to use automation to manipulate the DTE service. It just depends if that functionality to just open the dialog without executing the command has been exposed
Michael-Eng
@Michael-Eng
May 19 2016 17:27
@yannduran Hi Yann, the extension manager UI is not publicly extensible at this time.
Yann Duran
@yannduran
May 19 2016 17:27
@Michael-Eng You mean not publicly available?
Tim Sneath
@timsneath
May 19 2016 17:28
Oh no, don't go back into your corner, @M-Zuber! Or at least, before you do, give this UserVoice item an upvote: https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/suggestions/5743423-provide-an-open-api-to-allow-us-to-extend-code-len
Wartickler
@wartickler
May 19 2016 17:28
Is that a comment to @yannduran on his comment to me?
Omer Raviv
@OmerRaviv
May 19 2016 17:28
Hi folks! In my VSPackage, I have a ToolWindow that I open while the user is in Debug Mode. If the user hits Shift+F5, it disappears (as I expect and want), but when the user hits F5 again, it immediately reappears, and I’d like to prevent that from happening. I know this behavior is By Design (in that VS persists the ToolWindow configuration for Debug Mode vs Design Mode and restores it appropriately), but I’d like to suppress it for this particular ToolWindow. Any clues on how to go about this?
Yann Duran
@yannduran
May 19 2016 17:30
@wartickler If you're referring to @Michael-Eng 's post, it was in response to the question I asked about extending the Extension Manager dialog
Oleg Tkachenko
@olegtk
May 19 2016 17:30
@markdeggeller that's tricky. Do you have some of your content in the QuickInfo?
Wartickler
@wartickler
May 19 2016 17:30
gotcha
Tim Sneath
@timsneath
May 19 2016 17:31
So we have four or five of us here right now from the editor and extensibility engineering team. Oleg, Chitra, Ryan, Mike, Michael - I'll let you guys introduce yourselves! For myself, I'm the PM lead for acquisition and extensibility. Happy to answer any questions you may have about our roadmap or plans for extensibility and ecosystem.
Mordechai Zuber
@M-Zuber
May 19 2016 17:31
@timsneath upvoted. Thanks for finding that for me :)
IDEIntTest
@IDEIntTest
May 19 2016 17:32
@wartickler I am looking at the find in files command handling code, it looks like you can pass in a parameter that (by the name) seems to indicate where to search, but let me dig a bit more
Yann Duran
@yannduran
May 19 2016 17:32
@timsneath Are there any plans to publicly open Extension Manager extensibility?
Wartickler
@wartickler
May 19 2016 17:32
@IDEIntTest hey how do I do that myself?
Michael-Eng
@Michael-Eng
May 19 2016 17:32
@yannduran Yes, you're right. There is no publicly available way to extend the extension manager UI.
Mark Deggeller
@markdeggeller
May 19 2016 17:33
@olegtk Sometimes yes, but not always. I was hoping the manager from GetSpaceReservationManager("quickinfo") would know about the tooltip, but it doesn't.
IDEIntTest
@IDEIntTest
May 19 2016 17:33
I am looking through the code, it will take me a few minutes to determine if it is possible and how to do it
Yann Duran
@yannduran
May 19 2016 17:33
Thanks Michael
Wartickler
@wartickler
May 19 2016 17:34
@IDEIntTest lol - no I mean how can I look through that code too?
IDEIntTest
@IDEIntTest
May 19 2016 17:34
You can't, I work at Microsoft
Wartickler
@wartickler
May 19 2016 17:34
@IDEIntTest heheh
Ed Dore
@EdDore
May 19 2016 17:38
@OmerRaviv You can turn off the Toolwindow "stickiness" by setting the Transient property in the ProvideToolWindowAttribute. I'm not sure if this will apply for UI context switches as you transition between run and debug mode, but it might be worth a try.
Omer Raviv
@OmerRaviv
May 19 2016 17:38
@EdDore Thanks! I'll give that a try.
Oleg Tkachenko
@olegtk
May 19 2016 17:54
@markdeggeller if you've got your custom content in the QuickInfo you can position your popup more precise (this is how we position the LightBulb next to error squiggle QuickInfo, otherwise ISpaceReservationManager.CreatePopupAgent() should do it as best as it can
IDEIntTest
@IDEIntTest
May 19 2016 17:55
@wartickler It looks like there is a command param, /lookin, that takes a semi-colon separated list of folders to search. It does not appear you can actually specific specific files here, which is consistent with the dialog that allows you to only specify folders to search
you can play with it via the command window, Edit.FindInFiles / will show you a list of recognized params
the ext param controls the file extension(s) to search
oh, sorry, looks like you already explored this route
you want to open the dialog pre-populated.....it does appear that whatever you pass to the command will 'stick' in the dialog
let me see if there is a way to set the values without invoking the command
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:02
@timsneath using the new extensibility project, how can I add my command to the XAML Editor content menu? Much appreciated!!
IDEIntTest
@IDEIntTest
May 19 2016 18:04
@wartickler have you tried using dte.Find to set the search path / options and then invoke the command to show the dialog? Not sure if the DTE options would show in the dialog, but I would suspect they should
Omer Raviv
@OmerRaviv
May 19 2016 18:08
@EdDore Tried using the Transient property, but it does not seem to affect the transition between debug and design modes (I deleted windows.prf and windowsidx.prf and ran devenv /setup before testing, hope I didn't miss something?) Do you happen to have any other ideas I could try? Thanks again!
Mark Deggeller
@markdeggeller
May 19 2016 18:10
@olegtk Thanks, I'll look into how the lightbulbs work, since that's similar to what I'm implementing.
Ed Dore
@EdDore
May 19 2016 18:14
@kdawg02_twitter The context menu you see in the XAML Designer is not a VS menu resource. Probably due to the fact the XAML designer is actually run in an entirely different process XDesProc.exe. Consequently, I don't believe there is a way to add your own commands to it.
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:17
@EdDore Thank you for the information. In the old days I could get to it using
var visualStudioXamlContextMenuCommandBar = ((CommandBars)this.Application.CommandBars)["XAML Editor"];
IDEIntTest
@IDEIntTest
May 19 2016 18:18
Only if it was using the VS command system, which it is not. Perhaps they used to use the VS command system (and the designer was in proc, or they marshalled the context menu show request back to VS and showed a true VS menu), they do not appear to anymore.
Actually, are you sure that XAML Editor doesn't mean the editor when it has a XAML file open? That would be different than the designer, the editor still uses a VS context menu
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:19
@IDEIntTest Thank you.
Ed Dore
@EdDore
May 19 2016 18:20
@kdawg02_twitter Are you after the context menu of the code editor or the designer? I'm not sure when the XAML designer was pushed to XDesProc, probably VS 2010. If after the context menu of the code editor, you can get that. But the XAML Designer doesn't use VS to pop that menu, so that one's out of reach.
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:21
@EdDore yes, the XAML Code Editor.
Ed Dore
@EdDore
May 19 2016 18:28
@kdawg02_twitter I usually recommend using the EnableVSIPLogging registry value to identify the guid:id pair of the context menu, and then parent your menu group to that specific context menu. Note, Mad's latest Extensibility extension has a feature that'll set this key for you.
I wrote this almost a decade ago, but it's still valid (if you account for the version# of the IDE) https://blogs.msdn.microsoft.com/dr._ex/2007/04/17/using-enablevsiplogging-to-identify-menus-and-commands-with-vs-2005-sp1/
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:30
@EdDore thank you. I have Mad's extension installed.
@EdDore I'll read the docs for it and figure it out. Thank you for helping me.
Ed Dore
@EdDore
May 19 2016 18:32
If it's the latest greatest version, you'll see an Enable/Disable VSIP Logging under the IDE's View menu.
After restart you can use CTRL+SHIFT + right click in XAML code editor, to display the diagnostic dialog mentioned in that dr ex. blog.
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:33
@EdDore TOTALLY awesome!! Restarting now.
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:39
blob
Ed Dore
@EdDore
May 19 2016 18:40
That's the one.
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:41

@EdDore

      <Group guid="guidLoadAssemblyCommandPackageCmdSet" id="MyMenuGroup" priority="0x0600">
        <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_MAINMENU"/>
      </Group>

Apology for the newbee question, I'm not sure where I need to add the information in the image that the Mad's tool supplied me. I tried adding it to the "id" field but it didn't like that. Is there an example for adding commands to a context menu?

IDEIntTest
@IDEIntTest
May 19 2016 18:42
The problem is it wants symbolic names, so if you paste GUIDs and integers it will not be happy. There are two possible solutions.
1: I can look up the symbolic names and see if they are exposed so you can just use them in your VSCT
2: You can redefine the symbols locally, i.e. give a name to the GUID/int in your own VSCT
let me look at the first option and see if it is viable
doesn't look like it is exposed properly (that I can see), so on to option 2
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:46
@IDEIntTest trying to figure out #2 now
Ed Dore
@EdDore
May 19 2016 18:47
@OmerRaviv you could try monitoring for ui context changes by implementing IVsSelectionEvents.OnCmdUIContextChanged and programmatically hide the Toolwindow, but given the non-standard behavior you do run the risk of confusing your users.
@kdawg02_twitter no worries. it's a bit different from the addin/envdte scenario I suspect you are already familiar with. Sometimes that GUID and CmdID value are predefined, and you can find the strings that represent those values. However you can also just define those values in the <Symbols> section of your .VSCT file, then swap them inplace of the guidSHLMainMenu and IDM_VS_TOOLS_MAINMENU you mentioned above.
IDEIntTest
@IDEIntTest
May 19 2016 18:51

you can add this to your VSCT

<GuidSymbol name="guidXamlCmdSet" value="{4C87B692-1202-46AA-B64C-EF01FAEC53DA}">
<IDSymbol name="editorContextMenu" value="387"/>
</GuidSymbol>

the string names don't matter, call them whatever you like
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:51
@IDEIntTest BLESS YOU.
Omer Raviv
@OmerRaviv
May 19 2016 18:52
@EdDore Thanks for the tip! I'll give it a try.
IDEIntTest
@IDEIntTest
May 19 2016 18:52
then parent your command group to Guid=guidXamlCmdSet and id=editorContextMenu, that will place your group on that menu. You can adjust the priority to place it relative to the various groups on there
add that to the Symbols section that @EdDore talked about
Karl Shifflett
@kdawg02_twitter
May 19 2016 18:53
@EdDore @IDEIntTest editing my code now.
Preben Huybrechts
@prebenh
May 19 2016 19:06
Hi, how can i write an addin for Sql Server Managment Studio 2014. Is it the same as a Visual Studio extension ?
Karl Shifflett
@kdawg02_twitter
May 19 2016 19:06

@IDEIntTest @EdDore Got it working, thank you. Just needed to change the the value from 387 to 259. So much appreciated.

Please say hello to @timsneath for me.

IDEIntTest
@IDEIntTest
May 19 2016 19:09
@kdawg02_twitter: Whoops, yeah, sorry, that was an id for something else, obviously :P
Karl Shifflett
@kdawg02_twitter
May 19 2016 19:13
@IDEIntTest Great learning experience for the next time. Actually easy if you know the moving parts.
Wartickler
@wartickler
May 19 2016 19:20
@IDEIntTest Hey that works much nicer! The dialog opens up with the SearchPath in the "Look In:" field. I apologize if I'm asking a simple question: The dialog disappears on its own. Is there a way to stop it from disappearing? It seems to execute the command and then finish kinda like the Console.WriteLine() does unless you put in a Console.Read() to stop the window from closing. Is there a Console.Read() equivalent you'd suggest?
Ed Dore
@EdDore
May 19 2016 19:53
@prebenh The SQL folks own that particular platform, and the official answer is that extensions for SSMS are unsupported. Addin support has been removed from the VS IDE, so even if you can figure out a way to do with SSMS 2014, that functionality will likely be gone when they move to the latest VS shell.
Alex
@suprak
May 19 2016 20:51
Can someone recommend the correct pattern to use here? Here's my scenario: I have various extensions points implemented (aka Providers). I need my providers to have access to a shared state (User settings, etc). I am currently relying on my VsPackage to register itself once it's initialized into a static variable, that then all providers rely on. However I've run into an issue where sometimes my providers are initialized BEFORE my VsPackage has loaded. So how do I work around this issue?
Mads Kristensen
@madskristensen
May 19 2016 21:04
@suprak Lazy load the package and thereby the user settings when needed. See this https://github.com/madskristensen/IgnoreFiles/blob/master/src/IgnorePackage.cs#L33
Alex
@suprak
May 19 2016 21:05
@madskristensen thanks Mads! I was hoping you caught my question :)
IDEIntTest
@IDEIntTest
May 19 2016 21:21
@wartickler hmmmm it shouldn't, I would presume the command execution should JUST raise the dialog, so you are seeing it raise and immediately close? Or does it auto-invoke an empty search and then just immediately exit?
how are you showing the dialog? Via dte.executecommand? Are you passing any parameters? I don't think you want to pass anything, so probably null instead of the empty string (if you are doing that), otherwise it may take it as a programmatic execution, which normally would NOT want the dialog to stick around since it would be used in automation kind of scenarios likely
IDEIntTest
@IDEIntTest
May 19 2016 21:27

Calling LoadPackage is kind of non-ideal, you could rely on existing mechanisms like UI contexts or even service proffering. If you had some settings service, like IMySettingsService, then simply requesting that service would trigger a package load by the shell.

If you do go the route of loading the package, please make it an async pacakage and use IVsShell7::LoadPackageAsync if possible

Mads Kristensen
@madskristensen
May 19 2016 21:59
@IDEIntTest @suprak Righ, but LoadPackage is one line of code and works. Tough to beat with any other solution no matter how "right" it would be
IDEIntTest
@IDEIntTest
May 19 2016 22:01
multiple components sharing things is already supported in VS, they do it all the time with services. A settings service that is used by all your components avoids you having to LoadPackage explicitly and actually leverages the original design of lazy loading in VS
Also your code has an implicit assumption that Options is first accessed on the UI thread, or if off thread that at least one package from your version of MPF has already been loaded.
Alex
@suprak
May 19 2016 22:17
@IDEIntTest did you get a chance to see my scenario? If not through LoadPackage, how do ensure that my package is loaded when one of my providers is activated?
I should note too, that I already have [ProvideAutoLoad(UIContextGuids80.SolutionExists)] decoration and yet still that's not enough.
IDEIntTest
@IDEIntTest
May 19 2016 22:21
Functionality is shared in VS through services, one simple way to follow that model is to define a service that your components will use, when one asks the shell for that service the shell will load your package and return the service to the caller. This also eliminates your reliance on static (globals) which makes testing and multi-instancing hard (though multi-instancing of a package is likely not a concern)
Alex
@suprak
May 19 2016 22:22
@IDEIntTest I haven't found good example of creating/registering a service that will get instantiated on demand. Can you help?
Alex
@suprak
May 19 2016 22:24
@IDEIntTest thanks! Also can you clarify the use case for having a Package vs just registering a service?
@IDEIntTest looking closer at the code you shared, looks like Package is the way to register the service
answering my question
IDEIntTest
@IDEIntTest
May 19 2016 22:26

the only really important parts are

1: A service is registered via a GUID, in the example they use a type, but internally it justs asks the CLR for the GUID associated with that type. The MPF attribute requires a type though I believe.

2: When your package loads it calls AddService passing true as the last parameter (this is the 'promote' parameter, meaning make this visible to people outside this package, i.e. your providers)

3: When your provider needs a setting it does something like

IMySettingsService service = (IMySettingsService)GetService(typeof(IMySettingsService)) (or SMySettingsService if you follow the more verbose pattern)

The shell will ensure your package is loaded and your providers can then deal with the service instead of relying on concrete statics on specific types inside your dll. This gives more flexibility in a number of ways, including location of the settings code (i.e. you could trivially move it to another dll, which you couldn't do with the other pattern unless you made the static public or gave internals visible to access to your provider supplying dll(s))

yes, you can't avoid having a package. This avoids having a global (static) as well as using LoadPackage yourself. It is a shame LoadPackage was ever exposed, it causes people to do things they likely don't need to do, because they don't know any other way.
Alex
@suprak
May 19 2016 22:27
@IDEIntTest awesome, the insight is much appreciated!
@IDEIntTest doing things this way will also allow automatic [Import] to work as well?
IDEIntTest
@IDEIntTest
May 19 2016 22:29
You can go either way, I just know from experience that things like explicit LoadPackage calls aren't great patterns (I think of the millions of lines of code in VS it may be used at one or two places at the most) and statics are a well known anti-pattern that will make your testing life difficult (including making test parallelization impossible)_
no, if you are using MEF you don't even need to register a service, just Export your settings class and Import it in your other MEF components
basically I would have one class whose sole responsibility is settings exposure/management. ALL consumers (your providers, a tools option page, etc..) would Import that class. Done.
Alex
@suprak
May 19 2016 22:30
who will instantiate the class? I guess I've been conflating GetService and Import/Export in my head this whole time
IDEIntTest
@IDEIntTest
May 19 2016 22:30
when you Import/Export the MEF runtime instantiates the class
Alex
@suprak
May 19 2016 22:31
so for MEF, tagging a class with [Export] etc is enough?
IDEIntTest
@IDEIntTest
May 19 2016 22:31
GetService, when needed, triggers a package load, in that case the VS shell will instantiate your package class
yes
and marking in your vsixmanifest that you contain MEF components so that MEF will process your dlls when building its graph
MEF came after the other VS extensibility mechanisms, which are COM based, so if you already primarily (or only) use MEF I would just stick to using that
Alex
@suprak
May 19 2016 22:32
perfect, I'll have to give it another crack, because I didn't have success last time, trying to [Export] my service
IDEIntTest
@IDEIntTest
May 19 2016 22:33
that said you can't offer a package through MEF, as the VS shell doesn't consume packages via MEF it requires static registration (i.e. the PackageRegistration attribute ) and is the only way to do certain integration into VS. Not much in VS knows about MEF as it is relatively new and a huge chunk of VS is still written in native code. Primary MEF aware extension points include CPS (project system stuff) and the editor.
You can ask if you have issue, but afaik simply putting Export and then Importing that type and marking your vsix as having MEF components should be enough
Alex
@suprak
May 19 2016 22:34
@IDEIntTest thanks, will do
SQL-MisterMagoo
@SQL-MisterMagoo
May 19 2016 22:58
Hi, does anyone know if it is possible to register an event handler against a DTE CommandEvent from a MEF editor extension? I have code to register the event handler, which worked from an Addin, but my event handler is not called if I use the same code to register from a MEF extension.
Alex
@suprak
May 19 2016 23:04
@IDEIntTest what's the MEF way for getting a service? (instead of magic [Import])
IDEIntTest
@IDEIntTest
May 19 2016 23:08
@suprak a VS service? You import SVsServiceProvider cast as IServiceProvider and call GetService, iirc
Alex
@suprak
May 19 2016 23:09
@IDEIntTest no I mean, we just talked about how to expose a service in MEF world, simply decorating it with [Export(...)] is enough.
So how do I pull down a MEF class, without using [Import]?
IDEIntTest
@IDEIntTest
May 19 2016 23:10
@SQL-MisterMagoo It should work, I believe others do the same thing. What is the code that registers the handler? Are you sure that code has run? For instance if your package has not been loaded (because VS loads packages lazily) then your handler will not have been hooked up because the code that registers it will not hav erun
you GetService on SComponentModel, cast to IComponentModel and call GetService<T> on it where T is the exported type
SQL-MisterMagoo
@SQL-MisterMagoo
May 19 2016 23:12
@IDEIntTest I Import SVsServiceProvider and GetService to get a DTE instance, then use DTEInstance.Events.CommandEvents["{52692960-56BC-4989-B5D3-94C47A513E8D}", 1].BeforeExecute += QueryExecution;
Alex
@suprak
May 19 2016 23:12
got it, so there is some "GetService" overlap between the old COM world and the "new" MEF world. Thanks for clarifying!
IDEIntTest
@IDEIntTest
May 19 2016 23:12
@Alex above was for you, if the code is in MEF it should always use MEF to consume it (import) for classes not instantiated via MEF you need to either explicitly satisfy their dependencies (i.e. if you newed the class up) or use the GetService from IComponentModel
SQL-MisterMagoo
@SQL-MisterMagoo
May 19 2016 23:13
I know the extension is loaded as I have a margin that is working.
IDEIntTest
@IDEIntTest
May 19 2016 23:13
IIRC you need to save the object that comes back from the CommandEvents indexing because otherwise it can be GCed due to how the CLR interacts with COM in this scenario. Try saving the result of the index into a class field and calling .BeforeExecute on that
SQL-MisterMagoo
@SQL-MisterMagoo
May 19 2016 23:14
@IDEIntTest Great, thanks for the advice.
SQL-MisterMagoo
@SQL-MisterMagoo
May 19 2016 23:19
@IDEIntTest Yes, that was it - thank you.