This document contains an introduction to developing LabVIEW Project Providers. The documentation and examples collectively demostrate most current features of the Project Provider Framework.
The LabVIEW Project Provider framework is an unsupported feature of LabVIEW. The only documentation for it exists in this community group, and it is community supported only. While NI has no plans to modify or break the existing APIs, there is no guarantee that all features will work in future versions of LabVIEW. Please use at your own risk.
I've have some feedback on this document. First, I think it covers most of the questions I at least had and it well structured and very interesting reading. Two things that crossed my mind:
1) Page 11-12. Shouldn't there also be a type string, GUID etc. for packed libraries?
2) I do miss some discussions in the documents regarding race conditions and how to deal with this. What happens if two project providers installed implements the same event? Will both events be executed or just one? E.g. two project providers implements the Item_Init event. Both providers tries to set an overlay icon. Who will end up winning? I believe a solution would be to first check if an item should be updated and not update the item. E.g. if you are using classes or libraries, these could be tagged and a check could be performed to see if this class or library is something my project provider should update.
I am glad to know that you are finding the documentation helpful and interesting. Thanks a lot for the feedback.
1) I have added the GUID for packed libraries to the document.
2) This is a very good point. I missed this in the documentation and thanks for bringing it up now.
If two project providers implement the same event like Item_Init both the events will be executed in the order in which the providers are loaded in the framewrok.
But user doesn't have a control over the order in which the providers are loaded.
Now if both the providers try to set an overlay icon, depending on the overlaying images and the order of the providers you will see the icon updated with a layered image of the overlay images.
Here are some examples. Overlay images:
1. 2. 3. (3 image is not a transparent image)
When I overlay a VI icon by images 1 and 2, I will get:
When I overlay a VI icon by images 2 and 3, I can get:
You are right it should always be checked whether the item should be updated or not before actually updating the item. Similar functionality is implemented in Item_Init of SecondaryProviderExample2 of the uploaded examples.
Please keep the good feedback coming!!
Thanks for the clarification. Really good example.
I found one more thing missing. I do believe that there also should be a type string, GUID etc. for "Property Definition", the new LabVIEW Class Properties introduced in LV 2010.
I have updated the document with the GUID and type string for "Property Definition". Please let us know if you see anything else missing.
Thanks for the feedback!
Please note that I have updated the following two VIs in the Project Provider Examples.zip to correctly use the API VI mxLvSetPopupMenuBatch.vi
1. In SecondaryProviderExample1 the SecondaryProviderExample1_Provider_OnPopupMenu.vi
2. In DummyPrimaryProvider the PrimaryProviderExample_Provider_OnPopupMenu.vi
There is an issue with the documention for Global_OnUpdateCommand within the Project Provider Interface Vi's Document.
The Inputs/Outputs as outlined are not correct and cause the Labview to hard crash. The Inputs/Outputs should mirror those of SCC_Global_OnUpdateCommand.vi found in <resource>\Framework\Providers\SCC.
Its missing a Menu Item Out Output
I was wondering if there is a GUID String for the project itself so that I can have individual menu items on right clicking on the project
I've been trying to get the LV_TortoiseGit (https://forums.ni.com/t5/Git-User-Group/Labview-Tortoise-Git-Integration-LV-TortoiseGit-v0-8-1-1/gpm...) addon working, and am getting error messages trying to use .NET assemblies. I have documented the errors here: https://forums.ni.com/t5/LabVIEW/NET-Constructor-Nodes-give-Error-1-when-used-in-existing-project/td...
I believe the errors are a result of the addon using this API's mxLvSetName.vi to rename the Project heading at the top of the tree in the Project Explorer (this is done to append the git Branch that is currently checked-out). I have commented this function out and am not seeing the error anymore.
Project Items seem to have a Name property as well as a Display Name property. The documentation for this API seems to indicate that the mxLvSetName.vi modifies the Display Name, but it seems to modify the actual Name property instead. In any case, the mxLvSetName.vi wreaks havoc on .NET assembly loading.
Why does this occur? Is there a mxLvSetDisplayName.vi somewhere or an equivalent? What other way could the user easily be notified of something like the current Branch right from the Project Explorer?
The problem was caused by an invalid character in the name that was being used (I believe it was the colon ':' symbol). Changing the way the name is generated solved the problem.