It has been a while. In addition to my daily project work, I am working on several side projects in various states of readiness:
1.) Project Pro add-in for managing security
2.) Project-Pro adding for managing custom fields
3.) Schedule analyzer
4.) Lookup table value import tool
5.) Algorithms for overcoming the 1000-row project queue limitation
6.) Project Server configuration documentation generator
7.) Project Conference 2009 400-level track with Stephen Sanderlin from MSProjectExperts
I have been travelling quite a bit these days, so I am trying to spend more time with my family when I am home, so don’t expect these projects to come rolling off the assembly line any time soon.
Also, all of these projects are based on mpFx, so that project continues to evolve as well.
Let’s take a closer look at the security manager add-in.
Security Manager Add-In
Here is a screen shot:
I plan to implement CRUD operations on all security entities:
3.) Global Permissions (only allowing deleting or updating custom permissions)
I have extended mpFx’s security features to include the following methods:
NOTE: Many of these new methods are not supported because they are only minimally if at all covered in the SDK.
One area that is covered in the SDK is the creation of both global and category permissions. The security add-in provides user interfaces for this:
And you can see this is now present in the list of project permissions:
And here it is in PWA:
Same for category permissions:
And again, here is the new category permission in PWA:
Another feature I have added is the ability to create a user:
Lookup Table Value Importer
The lookup table value importer that takes an Excel workbook as a data source, provides a means for mapping worksheets and columns to specific lookup tables, and then performs the import automatically.
Version 1.0 does not support hierarchical lookup tables. I am working on a user interface for this.
In addition, the tool validates the source data. It provides spellchecking functionality, checks for illegal characters, looks for duplicates, inspects for fitness given the underlying data type (a date can’t be stored in a number list), and trims the input values to rid the data of the dreaded leading and trailing whitespace.
Here is a quick overview…
The tool reads your profile information from the registry, so if you have Project Pro installed, your profiles will appear in the drop down. You can also create new profiles (which will not show up in Pro). The tool supports logging in under alternate credentials, which I thought would be handy when you are onsite and trying to update lookup tables on a PS instance on the customer’s domain.
Working With Source Workbooks
Clicking the button produces a file open dialog. Browse to the Excel workbook you would like to use as the source. The tool scans each worksheet for columns and populates the user interface with mapping elements that you use to point the tool to the target lookup table:
Note that the tabs correspond to each worksheet found in the workbook. Here is a screenshot of the underlying workbook so you can see how this works:
Choose the data type for the import. Do this for each worksheet\column that you want to import:
After you have completed the mapping, clicking the button will open the workbook and perform validation on it. A validator window is displayed above the workbook (it is part of the tool—I am using native calls to set its parent window to Excel):
Note that in addition to checking for duplicates and illegal characters, it looks at each value to make sure it fits the underlying data type. Clicking the error in the validator box navigates you to the error in the workbook.
Clicking the save button saves the wordbook. Clicking refresh causes the validation to run again. Clicking the close button closes the workbook and returns you to the tool.
Note on the status bar the red button, which allows you to cancel.
A minor feature is the ability to indicate to the tool that the first row is a column header.
A more important feature is the ability to persist the map so you can reopen the workbook later and use the map without recreating it all over again. The map is persisted in a hidden worksheet in the source workbook.
Kind of neat.
Have a great week.