<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" version="2.0"><channel><title>David Higgins</title><link>http://community.axosoft.com/blogs/davidh/default.aspx</link><description>General Development Blog</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/DavidHiggins" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="davidhiggins" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>33.598841</geo:lat><geo:long>-112.120235</geo:long><item><title>Adobe Flex and Flex Charts, OnTime 2007 SDK Sample</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/04/24/adobe-flex-and-flex-charts-ontime-2007-sdk-sample.aspx</link><pubDate>Tue, 24 Apr 2007 18:35:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:11346</guid><dc:creator>David Higgins</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/11346.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=11346</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=11346</wfw:comment><description>&lt;p&gt;Have you been wondering what all the hype was about Adobe Flex? Ever wondered what it was, or what it could do for you? Well, Dan Suceava and I spent a day or two looking into it, and this is just a quick and simple example of what we came up with.&lt;/p&gt;&lt;p&gt;We downloaded the latest version of Adobe Flex Builder and Flex Charts and start digging around, after a lot of trial and error we eventually managed to throw together something that we were both quite happy with. As usual, I'll start with the eye-candy before going into details, so check out this video recording of our 'OnTime SDK Flex Chart Demo' (included in the OnTime SDK Examples).&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="700" height="600"&gt;&lt;param name="movie" value="/blogs/davidh/flash/flex_chart_demo.swf"&gt;&lt;param name="quality" value="high"&gt;&lt;embed src="/blogs/davidh/flash/flex_chart_demo.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="700" height="600"&gt;&lt;/embed&gt;&lt;/object&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;As you can see in the video, we created an 'advanced' charting tool with Adobe Flex, ActionScript and a custom .NET Web Service.&amp;nbsp; This was all, for the most part, fairly simple, once we wrapped our heads around the concept of coding in ActionScript and the oddities that are Flex Component Design. When I first looked into Flex, I was overly impressed with the look and feel, and the demo's and marketing pages from Adobe made it look so cool, I just &lt;b&gt;had&lt;/b&gt; to try it out.&amp;nbsp; After fiddling around for quite some time with it, and producing this seemingly simple sample, my enthusiasm quickly dissipated.&lt;/p&gt;&lt;p&gt;Not to say that Flex is horrible, it's just not my style.&amp;nbsp; You create MXML files, which contain 'components' which are, for the most part, custom controls.&amp;nbsp; In these controls, you can place other controls (very similar to .NET User Controls).&amp;nbsp; All your controls, in the designer anyhow, are created through Markup, which is ... again, very similar to ASP.NET Markup.&amp;nbsp; The tools available for the creation of Flex application, Adobe Flex Builder (built on Eclipse), are ... how do I say this right ... lacking? Very clunky, IntelliSense works ...sometimes, Code Highlighting ... almost all the time, type-ahead ... ack, it works, and it does things that drove me nuts! Granted, most of these tool related issues are probably configurable in the options somewhere, but wow, the defaults drove me mad.&lt;/p&gt;&lt;p&gt;I won't speak for Dan, but I'm pretty sure he wasn't digging the tool set either.&lt;/p&gt;&lt;p&gt;All in all, I can see Flex working for quite a large majority of developers, I'm just not one of them.&amp;nbsp; I attempted a few various projects at home on my free time, and couldn't get most of what I wanted to do accomplished without extending the default controls (which, thanks to Adobe, full ActionScript source is provided for all tools, which was nice!).&amp;nbsp;&lt;/p&gt;&lt;p&gt;So, with all that said, let me explain how we put this whole thing together.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Visual Studio 2005 (Web Service)&lt;br&gt;&lt;/li&gt;&lt;li&gt;Adobe Flex Builder 2 (Trial is OK to Build Demo)&lt;br&gt;&lt;/li&gt;&lt;li&gt;OnTime SDK &lt;br&gt;&lt;/li&gt;&lt;li&gt;Adobe Flex Charts (Trial is OK)&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Time Invested&lt;/b&gt;: 16 work hours (10 hours research, 6 hours code)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;First, we installed Adobe Flex Builder, along with the Flex SDK. We then created a new Flex Application Project, and added a Flex Application, and 3 Flex Components.&amp;nbsp; The first component was called 'ChartWindow'. We placed the 'ChartWindow' component into our Flex Application.&amp;nbsp; The ChartWindow component contained our Application menu and the User List box, which we attempted to have populated directly from the OnTime SDK.&amp;nbsp; However, ActionScript was not able to understand the DataSet XML Structure returned by the OnTime SDK, so we whipped together a really quick wrapper Service that tied everything together fairly neatly.&amp;nbsp; I believe it also helped reduce some of the more hassling code we would have to have written if ActionScript did understand the DataSet structure.&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;NOTE&lt;/b&gt;: Dan did some research on the DataSet issue and found that there was at least one commercial ActionScript component which was able to understand the full range of .NET Web Service XML Structures, including DataSets.&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;For the Web Service Wrapper, we wrote a GetProjects and GetUsers method, which simply returned an ArrayOfUser and ArrayOfProject (we actually created wrapper classes for OnTime Users and Projects, to reduce the bandwidth overhead for the Flex Application).&amp;nbsp; We then placed a Flex Web Service component into the ChartWindow code and attached it to the wrapper and binded to the two methods.&amp;nbsp; We wrote 'result' handlers which basically built a collection of objects in ActionScript (this was actually pretty cool, ActionScript automatically converted the returned XML into Objects for us) and then added the drop-down lists and listbox code to populate from these collections.&lt;/p&gt;&lt;p&gt;After we got all this working, we immediately started tackling the Charting and we decided to split the top and bottom charts into separate components to help manage the code a little easier.&amp;nbsp; We started with the chart on the top, since it's the controlling chart.&amp;nbsp; We spent some time playing around with different features and functionalities available and eventually wound up with what you saw in the above video.&lt;/p&gt;&lt;p&gt;When the user changes there filtering options (clicks a User in the List or changes a Drop-down value), we call an 'update' method which basically retrieves all of the data from the wrapper Web Service again, using the filtering options currently selected.&amp;nbsp; In the 'result' handler for this call, we build an Items Collection and then pass this collection into the two charts.&amp;nbsp; Each chart component (top and bottom) handles the collections differently, the top chart always aggregates on the Status or Priority and shows an overall 'big picture' pie chart, while the bottom chart is provided with the top charts current selection and shows the 'overall details' of the current selection.&amp;nbsp; We also thought that a nice Bar Chart showing Estimated vs. Actual durations would be somewhat fun, so we tossed that in there as well.&lt;/p&gt;&lt;p&gt;When we finished with all of the coding, we grabbed a backup of the Axosoft production database for the OnTime product and gave it a test whirl.&amp;nbsp; It performed spectacularly, almost no hesitation, even when loading large sets of data (1000+ items for a single user). I must say, after going through the struggle of getting this demo finished, both myself and Dan were extremely happy with the results.&amp;nbsp; I personally had some issues with the path to completion, but wow ... it's like hiking up a large rugged mountain, the hike can kill, but it's all worth it when you reach the top and look at the view below.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flex has quite a few really cool things, and I can't really knock it too much cause I did have fun writing this charting demo.&amp;nbsp; I just can't see myself doing this type of coding for a living -- but the next time I need something visually stunning and web-based (with Apollo, you can even make it Desktop based, Oh no!) I am definitely going to give Flex the benefit of the doubt and try to utilize it.&amp;nbsp; Hopefully, with some more time invested into the technology, it may wind up being the next greatest development platform (who knows -- could happen).&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br&gt;To download the full source to this sample, goto the &lt;a href="http://community.axosoft.com/files/folders/sdk_samples/entry11350.aspx" title="download page"&gt;download page&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=11346" width="1" height="1"&gt;</description></item><item><title>OnTime 2007 SDK - System Tray Notifications, with Fading Windows</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/04/23/ontime-2007-sdk-system-tray-notifications-with-fading-windows.aspx</link><pubDate>Mon, 23 Apr 2007 21:52:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:11340</guid><dc:creator>David Higgins</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/11340.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=11340</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=11340</wfw:comment><description>&lt;p&gt;By now, you've probably realized that I've spent the past few days working on some SDK Samples, and, here's yet another OnTime SDK Sample.&amp;nbsp; I tried to focus on SDK Examples that were both educational about the SDK, as well as the possible uses of the SDK.&amp;nbsp; Our previous SDK Examples were more focused on the actual use of the SDK, and not the practical uses of it -- such as Integration with Microsoft Office Tools (Outlook, Project, etc), and so, here's another practical use for the OnTime SDK.&lt;/p&gt;
&lt;p&gt;For those of you who may wish to be notified about OnTime items being assigned to you, when they become assigned to you, this little example will be a great starting point.&amp;nbsp; Basically, the purpose of this example is to try to mimic the "You've got new Mail" functionality of most common email readers.&amp;nbsp; This sample would most likely find itself extremely useful in Help Desk related positions where response times are critical to the success of your Help Desk.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br&gt;Now, onto the eye candy.... cause we all know, I can say 100 different things, but these pictures say 1,000,000 :)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's an example of the 'Notification Window'&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11333/original.aspx" border="0"&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's the "Quick View", with a Grouped List Box&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11334/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's the Tray Menu&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11335/original.aspx" border="0" height="76" width="161"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's the Options Window&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11336/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's the "Quick View" with Tabs Enabled&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11337/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Here's the Notification Window, you can't really tell, but it's Fading Out&lt;/i&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11338/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Oh and, since we got new Tasks, they are Highlighted&lt;br&gt;and you can see the 'Mark as Viewed' option as well&lt;/i&gt;&lt;br&gt;
&lt;img src="http://community.axosoft.com/photos/davidh/images/11339/original.aspx" border="0"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Visual Studio 2005&lt;/li&gt;&lt;li&gt;OnTime Client&lt;br&gt;&lt;/li&gt;&lt;li&gt;OnTime SDK &lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/csharp/diffusedialog.asp" title="Diffuse Dialog Resource"&gt;Diffuse Dialog Resource&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Time Invested&lt;/b&gt;: 6 work hours (2 hours research, 4 hours code)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To create this sample, I searched &lt;a href="http://www.google.com" title="Google" target="_blank"&gt;Google&lt;/a&gt; for an example of Fading Windows, and found a &lt;a href="http://www.codeproject.com/" title="Code Project" target="_blank"&gt;CodeProject.com&lt;/a&gt; resource called &lt;a href="http://www.codeproject.com/csharp/diffusedialog.asp" title="Form appearance effect and notifications" target="_blank"&gt;Diffuse Dialog&lt;/a&gt;. I then created a C# Windows Project in Visual Studio, and started adding my Web References to the Task, Defect, Feature, Incident and User Services.&amp;nbsp; I used the User Service to retrieve the UserId of the specified user -- I then modified the Diffuse Dialog example a little, to extend the period of time the window stays 'up', and I created a Notifications List which stored a reference to my 'notifications', which were simply just text and item types so I knew what type of message to display --- if only one item exists, you got a nice "You have a new Task" message -- if you had 4 tasks, you get a nice "You have new Tasks" messages, if you have a mixture of Tasks and Defects that are new ... "You have new Items".&amp;nbsp; Which, worked out quite well.&lt;/p&gt;&lt;p&gt;So, basically, it's just a little application that sits in your system tray (next to the clock) and checks the OnTime SDK every X minutes to see if you have new items.&amp;nbsp; It also allows you to see a "Quick View" of all your assigned items at a glance (using a Grouped List Box).&amp;nbsp; Double Click any item in the Quick View, and the item is launched in your default Browser right to the 'View Item' page in OnTime Web.&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;
To download the full source to this sample, goto the &lt;a href="http://community.axosoft.com/files/folders/sdk_samples/entry11343.aspx" title="download page"&gt;download page&lt;/a&gt;.&lt;br&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=11340" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Examples/default.aspx">Examples</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+SDK/default.aspx">OnTime SDK</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+2007/default.aspx">OnTime 2007</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Tray+Notifications/default.aspx">Tray Notifications</category></item><item><title>Design your Project in Microsoft Project, Manage it in OnTime!</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/04/23/design-your-project-in-project-manage-it-in-ontime.aspx</link><pubDate>Mon, 23 Apr 2007 16:19:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:11328</guid><dc:creator>David Higgins</dc:creator><slash:comments>8</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/11328.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=11328</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=11328</wfw:comment><description>&lt;p&gt;As the title suggests, this article will describe how you can utilize Microsoft Project to Design your overall Project Layout and Manage it with Axosoft's OnTime 2007.&amp;nbsp; Provided with this article is complete source, written against the Office .NET Assemblies and the OnTime 2007 SDK.&lt;/p&gt;&lt;p&gt;As usual, let's see some eye candy first, then we'll go into details ...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here's the actual startup form, the source provided allows for a&lt;br&gt;single command-line parameter to be passed, which is the path&lt;br&gt;to the MS Project (*.mpp) file to import&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11299/original.aspx" border="0"&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here's a standard .NET 'OpenFileDialog', and we're selecting the example project&lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11300/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here we are, selecting the OnTime 2007 Project&lt;br&gt;to import the MS Project items into&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11301/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;After selecting 'Convert', you'll see MS Project launch and open the Project (*.mpp) file you selected --&lt;br&gt;and look, is that a Gantt Chart?&lt;/i&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11302/original.aspx" border="0" height="453" width="683"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here, we disable all the form controls, and show&lt;br&gt;a progress bar (this bar cycles twice, and I'll&lt;br&gt;explain why in a minute)&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11303/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Here's a nice "Complete!"&lt;br&gt;notification popup&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11304/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;i&gt;And here's what the tool looks like after it's complete ...&amp;nbsp;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11305/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Ok, now after seeing all that, your probably sitting there going ... "Huh?".&amp;nbsp; Trust me, I wasn't too impressed with the screenshots either, and I wrote the thing ... BUT, you want to know why this is so cool?&lt;/p&gt;&lt;p&gt;&lt;br&gt;You do? Good ... picture this, one thing I've come across in my various positions over the years is a Project Manager using Microsoft Project to design a general time-line and work schedule, almost every one of these Project Managers turns around and spends just about as much time as they did designing the MS Project layout as they do trying to convert it into something that their employee's can work with, in this case, a Project Management Tool such as Axosoft's OnTime.&amp;nbsp; Why do Project Managers like to use Project, simple, it's got Gantt Charts and all sorts of other nifty scheduling functionalities that allows the Project Manager to design an efficient schedule.&amp;nbsp; Why do the spend so much time converting Project layouts into tools like OnTime, again, quite simple, OnTime has the tools and functionality to get things done.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font size="5"&gt;&lt;b&gt;The Technical Details&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Visual Studio 2005&lt;/li&gt;&lt;li&gt;Microsoft Project 2003&lt;/li&gt;&lt;li&gt;Microsoft Office .NET Interop Assemblies&lt;br&gt;&lt;/li&gt;&lt;li&gt;OnTime Client&lt;br&gt;&lt;/li&gt;&lt;li&gt;OnTime SDK &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Time Invested&lt;/b&gt;: 4 work hours (2 hours research, 2 hours code)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, onto the more technical details, and this time, I'll actually get into some source in the post, since in all honesty, this example is quite simple and contains very little source.&lt;/p&gt;&lt;p&gt;First, we create a new Windows Application in Visual Studio, and after the solution has been created your going to add a reference to a few things, and they are;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;COM -&amp;gt; Microsoft Office 11.0 Object Library&lt;/li&gt;&lt;li&gt;COM -&amp;gt; Microsoft Project 11.0 Object Library&lt;/li&gt;&lt;li&gt;Web -&amp;gt; OnTime SDK Task Service&lt;/li&gt;&lt;li&gt;Web -&amp;gt; OnTime SDK Feature Service&lt;/li&gt;&lt;li&gt;Web -&amp;gt; OnTime SDK Project Service&lt;/li&gt;&lt;li&gt;Web -&amp;gt; OnTime SDK RelatedItems Server&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;Once you've added all the above references, add a form Windows Form to the project (or open the default form if one exists in the project) and drop two Labels, one TextBox control and one ComboBox control, two Button controls and a progress bar.&amp;nbsp; Also, while your at it, toss an OpenFileDialog into the form as well.&amp;nbsp; We'll name the first TextBox "txtMSProject" and the ComboBox will be called mbProjects.&amp;nbsp; We'll put the first label to the left of the TextBox and put "MS Project:" as it's Text, and the second label next to the ComboBox and give it the value of "OnTime Project:".&lt;/p&gt;&lt;p&gt;Place the first Button to the right of the TextBox, and give it the value Text value of "..." and assign the following code to the Click event:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; bBrowse_Click(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            openFileDialog1.ShowDialog();&lt;br /&gt;            txtMSProject.Text &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; openFileDialog1.FileName;&lt;br /&gt;        }&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Now, for the Forms Load event, we're going to grab a list of all the Projects available in OnTime and add them as objects to the ComboBox.&amp;nbsp; To do this, I created a custom 'OnTimeProject' class which contains the ProjectId and ProjectName and an override for the ToString() method so that the ComboBox displays the Project's Name rather then the Class Name.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Here's the code for the OnTimeProject class;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;class&lt;/span&gt; OnTimeProject&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; Name;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; ProjectId;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; ToString()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;return&lt;/span&gt; Name;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;Now, to get a list of all the projects from the OnTime SDK, we create a ProjectHandler object instance and then call the &lt;i&gt;projectHandler.getAllProjects(Guid SecurityToken)&lt;/i&gt; method.&amp;nbsp; This will return a DataSet, containing all the information you'll need to know about your OnTime Projects, we then do a 'foreach' loop through this DataSet (more specifically, the first tables DataRow collection, 'Rows') and create a new OnTimeProject instance and assign the Name and ProjectId and add it to the ComboBox's Items, here's the code for that;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;void&lt;/span&gt; OnLoad(EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;base&lt;/span&gt;.OnLoad(e);&lt;br /&gt;            OnTimeProjects.ProjectHandler projectHandler &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; OnTimeProjects.ProjectHandler();&lt;br /&gt;            DataSet otProjects &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; projectHandler.GetAllProjects(securityToken);&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;foreach&lt;/span&gt; (DataRow dr &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;in&lt;/span&gt; otProjects.Tables[0].Rows)&lt;br /&gt;            {&lt;br /&gt;                OnTimeProject p &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; OnTimeProject();&lt;br /&gt;                p.Name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt;)dr[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"Name"&lt;/span&gt;];&lt;br /&gt;                p.ProjectId &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt;)dr[&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;"ProjectId"&lt;/span&gt;];&lt;br /&gt;                cbProjects.Items.Add(p);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;For clarification, the 'securityToken' parameter passed to GetAllProjects() is a Guid defined in the source that contains the same Guid value as the OnTime SDK's&amp;nbsp; Web.config SecurityToken value -- this is used as a security measure, to prevent unwanted users from accessing data from your OnTime SDK without authorization.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Now, with what we have so far, you should be able to test-run your code and your ComboBox should be pre-populated with your projects from OnTime and your 'Browse' button should allow you to locate and reference a file, storing it's value in the txtMSProject TextBox.&lt;/p&gt;&lt;p&gt;Now for the fun part, let's do some Microsoft Project Automation!&lt;/p&gt;&lt;p&gt;To launch an instance of Microsoft Project, or reference the currently running instance, you need the following code;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;ApplicationClass prjApp &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; ApplicationClass();&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;This prjApp has a number of properties available, and were going to set the Visible property to true.&amp;nbsp; This is not necessary, but is helpful for debugging, by default the Application is hidden, unless it's referencing an already running instance of Microsoft Project.&lt;/p&gt;&lt;p&gt;To open an MS Project File (*.mpp), you use the FileOpen() method in the ApplicationClass, for this example, were not really concerned about most of the parameters passed to this method, so we pass Type.Missing rather then null.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;string&lt;/span&gt; fName &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; txtMSProject.Text; &lt;br /&gt;prjApp.FileOpen(fName, &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;true&lt;/span&gt;, Type.Missing, Type.Missing, Type.Missing,&lt;br /&gt;    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,&lt;br /&gt;    Type.Missing, PjPoolOpen.pjPoolReadOnly, Type.Missing, Type.Missing, &lt;br /&gt;    Type.Missing, Type.Missing);&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;You'll notice the PjPoolOpen.pjPoolReadOnly value passed, this prevents our code from altering the MS Project file in any way, as the file is opened in Read-Only mode (again, not absolutely necessary, but a nice safe guard).&amp;nbsp; Once you've opened your Project file, it becomes the ActiveProject and can be referenced by the prjApp.ActiveProject, which is a Project object instance.&lt;/p&gt;&lt;p&gt;Now that we have a Project reference, we can begin going through all of it's tasks, which are in the Tasks collection, a property of the Project class.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;foreach&lt;/span&gt;(Task task &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;in&lt;/span&gt; project.Tasks) { }&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;So far, we've got the skeleton structure of our converter, now let's create some OnTime Tasks and introduce them into our OnTime database, ok?&lt;/p&gt;&lt;p&gt;Let's create an instance of the TaskHandler class, this will allow us to call the AddTask() method.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;OnTimeTasks.TaskHandler taskHandler &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; OnTimeTasks.TaskHandler();&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now, to create an OnTime Task, we have to create an OnTimeTasks.Task object, set our values, and then call the taskHandler.AddTask(Guid SecurityToken, OnTimeTasks.Task) method (FYI - OnTimeTasks is what I called my Web Reference to the OnTime Task Service), let's look at some sample code;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;OnTimeTasks otTask &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;new&lt;/span&gt; OnTimeTasks.Task();&lt;br /&gt;otTask.Name &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; task.Name; &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;// sets the OnTime Task Name to the Project Task Name&lt;/span&gt;&lt;br /&gt;onTask.StartDate &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (DateTime)task.Start;&lt;br /&gt;otTask.DueDate &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (DateTime)task.Finish;&lt;br /&gt;otTask.Notes &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; task.Notes;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;// 60 minutes, 8 hours in a day&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt; days &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;int&lt;/span&gt;)task.Duration &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;/&lt;/span&gt; 60 &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;/&lt;/span&gt; 8; &lt;br /&gt;otTask.EstimatedDuration &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; days;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;// Days (select * from OnTimeDB..TimeUnitTypes)&lt;/span&gt;&lt;br /&gt;otTask.DurationUnitTypeId &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; 1;&lt;br /&gt;otTask.ProjectId &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; (cbProjects.SelectedItem &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;as&lt;/span&gt; OnTimeProject).ProjectId; &lt;br /&gt;otTask.TaskId &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 11px;font-weight: normal;"&gt;=&lt;/span&gt; taskHandler.AddTask(otTask);&lt;/span&gt;&lt;/code&gt;&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Ok, most of that should be fairly obvious, but the stuff toward the end might not be, the EstimationDuration and DurationUnitTypeId are probably the two most obscure properties were going to work with.&amp;nbsp; The EstimatedDuration property stores a System.Int32 which represents the number of Minutes that the task is estimated to take, however, in OnTime we want to display this as a much smaller number, since presumably we'll spend much more then a few minutes on a single task (remember, MS Project is for setting up the 'Big Picture').&amp;nbsp; The DurationUnitTypeId is another System.Int32, whose value needs to match a value from the TimeUnitTypes table in the OnTime Database.&amp;nbsp; The SQL Query needed to look at this tables data is provided in the preceeding comment.&amp;nbsp; Once you've found the value for the 'Days' type, put it in the DurationUnitTypeId.&lt;/p&gt;&lt;p&gt;After we set all our of Task values, and have added the Task into OnTime, we can switch over to our favorite OnTime Client (Web, Windows or VS.NET) and Refresh our view and your Task(s) should now be present.&lt;/p&gt;&lt;p&gt;Now, your probably thinking to yourself, "What good is this if I can't go back?".&amp;nbsp; Your right, this tool is fairly useless, as it is now, because all it does is convert an MS Project to an OnTime Project -- but, with little work, you can have a completely customized Synchronization Tool written in a matter of hours.&amp;nbsp; Why didn't I include this ability in the sample? Well, it's a tad beyond the scope of a "sample" for one, but mainly because such a tool would need to be tailored to your specific needs and usage of both applications and there is no hard-set standard for this, so I simply omitted that functionality.&lt;/p&gt;&lt;p&gt;&amp;nbsp;In short though, if you want to introduce tasks into Microsoft Project from OnTime, you can more or less just completely flip the logic used in this sample, and create tasks in Project from tasks in OnTime -- you can even, using Custom Fields to store meta-data (OnTime TaskId and Project TaskId) perform synchronization, so that your Project Manager can quickly say "Sychronize" from a pre-defined Macro which launches a Shell (VBA, gotta love to hate it ... I mean, hate to love it ... err ... its there, just use it ;p) that executes your custom synchronization app -- an example VBA macro would be:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;code&gt;Sub SynchronizeOnTime()&lt;br /&gt;Dim i as Double&lt;br /&gt;i = Shell("path\to\your\exe" &amp; " " &amp; ActiveProject.Path &amp; "\" &amp; ActiveProject.Name, vbNormalFocus)&lt;br /&gt;End Sub&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Which could easily launch your tool and pass the current Projects File path to it, so that a synchronization could be performed -- storing additional meta-data in your Project's Properties using Custom Fields, you can determine the OnTime project to lookup, and the Tasks to keep in sync -- &amp;nbsp;&lt;/p&gt;&lt;p&gt;For the complete source to this example, please goto the &lt;a href="http://community.axosoft.com/files/folders/sdk_samples/entry11327.aspx" title="download page"&gt;download page&lt;/a&gt;.&lt;br&gt;To discuss this sample, please refer to this &lt;a href="http://community.axosoft.com/forums/thread/11329.aspx" title="forum thread"&gt;forum thread&lt;/a&gt;.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=11328" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Examples/default.aspx">Examples</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+SDK/default.aspx">OnTime SDK</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+2007/default.aspx">OnTime 2007</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Microsoft+Project/default.aspx">Microsoft Project</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Importers/default.aspx">Importers</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Converters/default.aspx">Converters</category></item><item><title>OnTime 2007, Outlook 2007, Tasks and your PDA ... </title><link>http://community.axosoft.com/blogs/davidh/archive/2007/04/19/ontime-2007-outlook-2007-tasks-and-your-pda.aspx</link><pubDate>Thu, 19 Apr 2007 22:10:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:11276</guid><dc:creator>David Higgins</dc:creator><slash:comments>0</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/11276.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=11276</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=11276</wfw:comment><description>&lt;p&gt;As the newest member of the Axosoft Team, I've spent quite a good deal of time getting acquainted with the OnTime Product Suite.&amp;nbsp; I've come to find that I'm totally digging the OnTime SDK, and I thought that one of my first OnTime SDK projects should be something that everyone's been asking for ... so, I hope I've accomplished at least one of my goals for the day.&lt;/p&gt;
&lt;p&gt;I know, everyone loves their screenshots, so I won't hold you up from your eye-candy;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tasks in OnTime, how ... Normal!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11267/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Tasks from OnTime ... in &lt;b&gt;Outlook&lt;/b&gt;?!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11268/original.aspx" border="0"&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And again, just cause it's so cool ...&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://community.axosoft.com/photos/davidh/images/11277/original.aspx" border="0"&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A Task from OnTime, in a customized Outlook Task Form&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11269/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;A Custom Form Region in an Outlook 2007 Task Form, with a &lt;b&gt;Lady Bug Icon!&lt;/b&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11270/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Editing the Outlook version of the Task ... &lt;i&gt;wonder what happens to the OnTime version&lt;/i&gt;?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11271/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Oh, nice ... thats convenient!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11272/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-weight:bold;"&gt;NOTE&lt;/span&gt;: &lt;span style="font-style:italic;"&gt;The items in Outlook are 'tagged' with a custom User Property, the only thing this sample relies on to match an OnTime Task to an Outlook Task is this custom property which stores the OnTime TaskId.&amp;nbsp; This means you can literally changed anything, and as long as you account for it in the 'behind the scenes' code, it'll update -- including the Subject/Name of the task itself!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;What if I edit it in OnTime though?&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11273/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Hey ... &lt;i&gt;that's actually pretty cool!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/11274/original.aspx" border="0"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now that &lt;i&gt;the eye candies over&lt;/i&gt;, and &lt;b&gt;I've got your attention&lt;/b&gt; ... I wanted to tell you about my cool &lt;a href="http://community.axosoft.com/blogs/hamids/archive/2007/04/04/world-s-first-geek-marketing-contest-win-5-000-for-your-idea.aspx" title="World's First Geek Marketing Contest: Win $5,000 for Your Idea"&gt;Geek Marketing&lt;/a&gt; idea ... &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;lt;plug&amp;gt;&lt;br&gt;&lt;/b&gt;Since I can't officially make contributions to the contest, I figured I'd toss an idea in a blog post and mask it under the guise of a really cool thing you can do with the OnTime SDK, complete with Photoshoped screenshots and all.&lt;/p&gt;
&lt;p&gt;So ... my idea is ...&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;b&gt;&amp;lt;/plug&amp;gt;&lt;/b&gt; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Err, ok ... ok, already... you got me ... the screenshots are &lt;i&gt;&lt;b&gt;REAL&lt;/b&gt;&lt;/i&gt;! For the impatient, you can jump right to the &lt;a href="http://community.axosoft.com/files/folders/sdk_samples/entry11266.aspx" title="download link" target="_blank"&gt;download link,&lt;/a&gt; and for those who like to read the nitty gritty details ... &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Requirements&lt;/b&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio 2005&lt;/li&gt;
&lt;li&gt;Visual Studio Tools for Office 2005 Second Edition&lt;/li&gt;
&lt;li&gt;Outlook 2007&lt;/li&gt;
&lt;li&gt;OnTime Client&lt;/li&gt;
&lt;li&gt;OnTime SDK &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt;&lt;br&gt;Time Invested&lt;/b&gt;: 12 work hours (8 hours research, 4 hours code)&lt;/p&gt;&lt;p&gt;I'd also like to note that my knowledge of the OnTime SDK prior to starting this was limited, and my knowledge of VSTO was completely nil -- I spent a good day researching the possibilities and experimenting with different ways to modify Outlook, and the following day I came in and wrote this example (got it done before lunch!)&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;b&gt;The Basics&lt;/b&gt;:&lt;br&gt;First, we create a new Outlook 2007 Addin Project with VSTO 2005 SE, and then we add a Web Reference to the OnTime SDK Task Service.&amp;nbsp; We create a custom Form Region in Outlook 2007 and save it to Disk, add the Form Region to our projects Resources, and then write the wrapper code that loads the Form Region for OnTime Tasks in Outlook.&amp;nbsp; We also write some simple 'get all tasks, compare them to current outlook tasks, create or update as necessary' code, and viola ... we're done.&lt;/p&gt;
&lt;p&gt;Ok ... sorry, I know thats not as detailed as some people would like it to be, but the amount of code and steps involved in creating an Outlook 2007 Addin is a bit beyond the scope of a single Blog post, so you'll just have to &lt;a href="http://community.axosoft.com/files/folders/sdk_samples/entry11266.aspx" title="download link"&gt;download the Sample Code&lt;/a&gt; and check it out.&lt;/p&gt;
&lt;p&gt;For those of you who may have specific questions about this sample, please feel free to post them in the following &lt;a href="http://community.axosoft.com/forums/11275/ShowThread.aspx#11275" title="forum thread"&gt;forum thread&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=11276" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Tasks/default.aspx">Tasks</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Examples/default.aspx">Examples</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Outlook/default.aspx">Outlook</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+SDK/default.aspx">OnTime SDK</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/OnTime+2007/default.aspx">OnTime 2007</category></item><item><title>Network Deployment of OnTime for Windows</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/03/28/network-deployment-of-ontime-for-windows.aspx</link><pubDate>Wed, 28 Mar 2007 22:19:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:10940</guid><dc:creator>David Higgins</dc:creator><slash:comments>1</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/10940.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=10940</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=10940</wfw:comment><description>&lt;p&gt;Not quite sure how I wound up getting all these questions, but I've been asked a few times recently how one might go about performing an "Unattended Installation" or a "Group Policy Network Deployment" for &lt;a href="http://axosoft.com/products/ontime.aspx" title="OnTime Overview"&gt;OnTime Windows&lt;/a&gt;, so I spent a few hours this afternoon looking into it.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;br&gt;I recently posted an FAQ on this subject, but I felt I wasn't being technical enough, and here's what I came up with:&lt;/p&gt;

&lt;div style="width:100%;background-color:Lightgrey;color:Black;"&gt;

&lt;pre&gt;&lt;code&gt;&lt;br&gt;Set wshShell = CreateObject("WScript.Shell")&lt;br&gt;Set fso = CreateObject("Scripting.FileSystemObject")&lt;br&gt;isUpgrade = True ' Are we performing an Upgrade?&lt;br&gt;tempDir = wshShell.ExpandEnvironmentStrings("%TEMP%")&lt;br&gt;tempPath = tempDir &amp;amp; "\OnTimeInstaller.exe"&lt;br&gt;installerPath = "\\server\share\path\OnTime2007WindowsSetup.exe"&lt;br&gt;installPath = "C:\Program Files\Axosoft\OnTime 2007\"&lt;br&gt;configPath = "C:\TEMP\OnTime.config"&lt;br&gt;currentUserName = wshShell.ExpandEnvironmentStrings("%USERNAME%")&lt;br&gt;userConfigPath = "C:\Documents and Settings\" &amp;amp; currentUserName &amp;amp; _&lt;br&gt;                 "\Local Settings\Application Data\Axosoft\OnTime Windows\7.0\"&lt;br&gt;' ARE WE UPGRADING, IF SO, UNINSTALL&lt;br&gt;If(isUpgrade) Then&lt;br&gt;	If(fso.FileExists(installPath &amp;amp; "OnTime Windows\Uninstall.exe")) Then &lt;br&gt;		wshShell.Run """" &amp;amp; installPath &amp;amp; "OnTime Windows\Uninstall.exe "" /S _?=" &amp;amp; _ &lt;br&gt;                             installPath &amp;amp; "OnTime Windows", 10, True&lt;br&gt;		&lt;br&gt;		' The uninstaller returns a bit -too- quickly, we have to wait&lt;br&gt;		WScript.Sleep 4000&lt;br&gt;		fso.DeleteFile installpath &amp;amp; "OnTime Windows\Uninstall.exe"&lt;br&gt;		fso.DeleteFolder installPath &amp;amp; "OnTime Windows"&lt;br&gt;	End If&lt;br&gt;End If&lt;br&gt;' CHECK IF ONTIME IS ALREADY INSTALLED&lt;br&gt;' THIS CHECK IS ERROR PRONE!&lt;br&gt;If(Not fso.FolderExists(installPath &amp;amp; "OnTime Windows")) Then&lt;br&gt;	If(Not fso.FileExists(installerPath)) Then&lt;br&gt;		MsgBox "BAD BAD BAD"&lt;br&gt;	Else&lt;br&gt;		fso.CopyFile installerPath, tempPath, True&lt;br&gt;		wshShell.Run tempPath &amp;amp; " /S /D=" &amp;amp; installPath, 10, True&lt;br&gt;	End If&lt;br&gt;End If&lt;br&gt;' CHECK IF OnTime.config exists for User&lt;br&gt;If(Not fso.FileExists(userConfigPath &amp;amp; "OnTime.config")) Then&lt;br&gt;	If(Not fso.FolderExists(userConfigPath)) Then&lt;br&gt;		p1 = fso.GetParentFolderName(userConfigPath)&lt;br&gt;		p2 = fso.GetParentFolderName(p1)&lt;br&gt;		if(Not fso.FolderExists(p2)) Then fso.CreateFolder(p2)&lt;br&gt;		if(Not fso.FolderExists(p1)) Then fso.CreateFolder(p1)&lt;br&gt;		if(Not fso.FolderExists(userConfigPath)) Then fso.CreateFolder(userConfigPath)&lt;br&gt;	End If&lt;br&gt;	fso.CopyFile configPath, userConfigPath&lt;br&gt;End If&lt;br&gt;&lt;/code&gt;&lt;br&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br&gt;Basically, the above code would reside in a .VBS file, and would be executed by either WScript.exe or CScript.exe during the User Login process -- &lt;/p&gt;

&lt;blockquote&gt;&lt;i&gt;The code is an example, and should be treated as such -- most of the code blocks are reusable in actual production scripts,&amp;nbsp; but the entire script as a whole is not production ready.&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;A quick walk-thru of the code shows that we first initialize some variables, which can be stored anywhere, or hard-coded like the example script has them, we then have an 'isUpgrade' flag, which we check in the first 'block', and if true, we run the OnTime Windows Uninstaller, and then delete the Uninstaller and the OnTime Windows directory (this will leave the 'Axosoft' directory and any other contents -- such as SDK, VS.Net, etc).&lt;/p&gt;

&lt;p&gt;We then check to see if the OnTime Windows directory exists, if it does not, we launch the OnTime Windows installer in "silent" mode, and we force the installation path with the "/D" flag -- this ensures that we are installing it in the same place as we uninstalled it from, etc ...&lt;/p&gt;

&lt;p&gt;We then copy over a pre-made OnTime.config to the current users App Data for OnTime, building the necessary directory tree, if required.&lt;/p&gt;

&lt;p&gt;So, how do we get this "OnTime.config" you ask? To get the "OnTime.config", you'll have to install OnTime for Windows on at least one workstation, launch it, and configure the database connectivity -- from there, you can find the OnTime.config in the Current Users "Local Settings\Application Data\Axosoft\OnTime Windows\7.0" directory tree.&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;And, for those of you who want to try this, here is some useful information about the installer we use:&lt;/p&gt;

&lt;blockquote&gt;&lt;b&gt;OntimeWindowsSetup.exe&lt;/b&gt; Parameters:&lt;br&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;/S&amp;nbsp;&amp;nbsp;&amp;nbsp; -- Performs a "Silent" installation, preventing the UI from displaying&lt;br&gt;/D&amp;nbsp;&amp;nbsp;&amp;nbsp; -- Override default Install Directory (ie; /D=C:\New\Path)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Uninstall.exe&lt;/b&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;/S&amp;nbsp;&amp;nbsp;&amp;nbsp; -- Performs a "Silent" uninstallation, preventing the UI from display&lt;br&gt;_?&amp;nbsp;&amp;nbsp;&amp;nbsp; -- Override the default Install Directory, also prevents the Installer&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; from Copying itself to a temporary location and exiting immediately (useful for "WaitOnReturn")&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;
&lt;br&gt;
&lt;br&gt;This form of installation is not officially supported by Axosoft, however, the command-line parameters for the (Un)Installer &lt;br&gt;are supported.&lt;/p&gt;

&lt;p&gt;If you've had a successful network deployment and would like to share your experience, or contribute any reusable code, please contact me and I will add it to this Blog Post.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;&lt;i&gt;David Higgins&lt;/i&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=10940" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Group+Policy/default.aspx">Group Policy</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Network+Deployment/default.aspx">Network Deployment</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Corporate+Install/default.aspx">Corporate Install</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Logon+Script/default.aspx">Logon Script</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Install/default.aspx">Install</category></item><item><title>Free Instant Forum to Community Server Conversion Tool</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/03/23/free-instant-forum-to-community-server-conversion-tool.aspx</link><pubDate>Fri, 23 Mar 2007 20:43:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:10861</guid><dc:creator>David Higgins</dc:creator><slash:comments>2</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/10861.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=10861</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=10861</wfw:comment><description>&lt;p&gt;While working on the Axosoft Community Site, one of my tasks was to convert the existing &lt;a href="http://www.instantasp.co.uk/products/instantforum/default.aspx" title="Instant Forum Product Page" target="_blank"&gt;Instant Forum&lt;/a&gt; Users and Posts to Community Server.&amp;nbsp; I was lucky enough to have been able to use the &lt;a href="http://communityserver.org/files/folders/tools__utilities/entry498099.aspx" title=".Text V0.95 Converter Download Page" target="_blank"&gt;DotText-CS-Converter&lt;/a&gt; by &lt;a href="http://kevinharder.com/blog/archive/2005/06/09/dottext_cs_converter_22.aspx" title="Kevin Harders Post about the DotText-CS-Converter" target="_blank"&gt;Kevin Harder&lt;/a&gt; to convert the &lt;a href="http://www.gotdotnet.com/workspaces/workspace.aspx?id=e99fccb3-1a8c-42b5-90ee-348f6b77c407" title="DotText V0.95 on GotDotNet" target="_blank"&gt;.Text V0.95&lt;/a&gt; Blog site, but was lacking a tool to do the same for our Instant Forum V3.04 database.&lt;/p&gt;&lt;p&gt;With the lack of a tool, I took a few days and wrote one. I learned quite a bit about the Community Server SDK while working on this tool, and I felt that it would only be fair to provide the tool back to the CS community. I also wanted to take the chance to thank &lt;a href="http://nayyeri.net/" title="Keyvan's Blog Site"&gt;Keyvan Nayyeri&lt;/a&gt;, for his &lt;a href="http://nayyeri.net/archive/tags/CS+Dev+Guide/default.aspx" title="Keyvan's CS Dev Guide Blogs"&gt;CS Dev Guide Series&lt;/a&gt;, which proved to be an absolutely invaluable resource to me while developing the Axosoft Community Site, as well as &lt;a href="http://kevinharder.com/blog/archive/2005/06/09/dottext_cs_converter_22.aspx" title="Kevin Harders Blog"&gt;Kevin Harder&lt;/a&gt; for his work on the DotText-CS-Converter which inspired this tool.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;SO .... without further delays ... &lt;br&gt;&lt;/p&gt;&lt;p&gt;The &lt;a href="http://community.axosoft.com/files/folders/converters/entry10854.aspx" title="InstantForum2CS21 Download Link"&gt;Instant Forum V3.04 to Community Server 2.1 Converter&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;The tool is fairly simple, you launch it, fill in the required Database Connection Information, allow the application to Save the settings to the App.config and restart itself, and then just goto the "Convert" tab and click "Start". The entire process is automated, however, it is highly recommended that you test this functionality prior to attempting a Production Server Conversion -- this tool was only tested using the Axosoft Forum Backup (Instant Forum V3.04) against a fresh copy of Community Server V2.1.&lt;/p&gt;&lt;p&gt;&amp;nbsp;And, for some screenshots, cause we all love screenshots ... &lt;/p&gt;&lt;p&gt;&amp;nbsp;Here is the Startup screen, along with the Readme.txt in the background ...&lt;br&gt;&lt;a href="http://community.axosoft.com/photos/davidh/images/10856/original.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/10856/640x369.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Here is the second config screen, where you enter your Community Server database information: &amp;nbsp;&lt;br&gt;&lt;a href="http://community.axosoft.com/photos/davidh/images/10857/original.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/10857/original.aspx" border="0"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;The "Saving your Config" popup, after you click OK, the Application writes to App.config and Restarts itself ... &lt;br&gt;&lt;a href="http://community.axosoft.com/photos/davidh/images/10858/original.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/10858/640x236.aspx" border="0"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;After the application restarts, you should be brought back to the second config tab, and your CString field should&lt;br&gt;be a properly formed ADO.NET Connection String pointing to your Community Server and Instant Forum databases.&lt;br&gt;&lt;a href="http://community.axosoft.com/photos/davidh/images/10859/original.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/10859/518x248.aspx" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Here's the Convert! tab, where all the fun begins ... just Click Start and turn on your favorite&lt;br&gt;movie or something (conversion time is dependent on User/Post count)&lt;br&gt;&lt;a href="http://community.axosoft.com/photos/davidh/images/10860/original.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/10860/514x251.aspx" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To download the tool, along with source, &lt;a href="http://community.axosoft.com/files/folders/converters/entry10854.aspx"&gt;Click Here!&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;i&gt;This is an unsupported tool and by downloading and using this tool you accept all responsibilities and risks involved in using this tool.&amp;nbsp; It is highly recommended that you perform database backups and 'test runs' prior to attempting to run this tool in a production environment. Although Axosoft has given me the opportunity to spend the time to clean this tool up for general usage, Axosoft is not responsible for its contents nor has it been reviewed by anyone at Axosoft in any official capacity.&lt;br&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=10861" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Converter/default.aspx">Converter</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Migration/default.aspx">Migration</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Forums/default.aspx">Forums</category></item><item><title>How We Did it, a Brief Synopsis</title><link>http://community.axosoft.com/blogs/davidh/archive/2007/03/22/how-we-did-it.aspx</link><pubDate>Thu, 22 Mar 2007 16:48:00 GMT</pubDate><guid isPermaLink="false">d315da8f-0088-447e-a94f-056123fb98a9:10803</guid><dc:creator>David Higgins</dc:creator><slash:comments>9</slash:comments><comments>http://community.axosoft.com/blogs/davidh/comments/10803.aspx</comments><wfw:commentRss>http://community.axosoft.com/blogs/davidh/commentrss.aspx?PostID=10803</wfw:commentRss><wfw:comment>http://community.axosoft.com/blogs/davidh/rsscomments.aspx?PostID=10803</wfw:comment><description>&lt;p&gt;&lt;a href="http://community.axosoft.com/photos/davidh/David-Higgins-_2D00_-Axosoft.aspx" target="_blank"&gt;&lt;img src="http://community.axosoft.com/photos/davidh/images/original/David-Higgins-_2D00_-Axosoft.aspx" style="padding:10px;" align="left" border="0" hspace="0"&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; First, let me start off by introducing myself, I am one of the newest members of the Axosoft Team, my name is David Higgins.&amp;nbsp; I have been working with Axosoft since early 2007.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I have spent the past few weeks working on the Axosoft Community Site, and the conversion from the previously used .Text (DotText) and Instant Forum applications.&amp;nbsp; I started first with the .Text blog site, as the &lt;a href="http://www.communityserver.org" title="Community Server" target="_blank"&gt;Community Server&lt;/a&gt; website had a freely available conversion program that already existed.&amp;nbsp; Problem here was, it only converted .Text V0.95 into Community Server 1.1 -- so I was left with the task of installing CS 1.1, Converting the Blogs and then upgrading to CS 2.1 and converting the forums.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The forums were where I had to put some real work into the site, as no conversion programs existed for Instant Forum at this point.&amp;nbsp; So I wrote one, put it through a few dry tests, and after being satisfied with the results, performed my first 'full' conversion using a backup of the Instant Forum database.&amp;nbsp; This was a success, but did have a few glitches, I remedied these problems and began working on the 'skin' for Community Server so that we could provide an almost seamless transition between all of the Axosoft websites (&lt;a href="http://www.axosoft.com" title="Axosoft Home"&gt;Axosoft&lt;/a&gt;, &lt;a href="http://store.axosoft.com" title="Axosoft Store"&gt;Axosoft Store&lt;/a&gt;, &lt;a href="http://community.axosoft.com" title="Axosoft Community"&gt;Axosoft Community&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; After many trial and error modifications to the default Community Server skin, I made some fairly good progress and became quite accustomed to the oddities that are Community Server Theming.&amp;nbsp; I wish I could say it was easy, but it was not.&amp;nbsp; The process was very time consuming, and I wound up visiting almost every single Skin file that ships with the default skin for Community Server.&amp;nbsp; After working through this, I began working on the Single-Sign-On system that you can see by using the 'Sign In' or 'Register' options in the top header.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The Single-Sign-On system brought Jonas Bush on board in the Community Server development, and required some interesting modifications to our Customer Portal product as well, not to mention some modifications to the way the Axosoft Store worked. We introduced some new elements, such as the ability to load pages within, what we call, 'windows' as well as the ability to have pages redirect after a PostBack.&amp;nbsp; Jonas did a great job with this, and I'm very pleased with the Single-Sign-On and cross-site navigation that was introduced to all three of the Axosoft Sites.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For now, I won't go into too many technical details about how we pulled this off, I'll reserve those for future posts (which may even include example code, or downloads), and I'll just leave you with this ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;div style="margin-left:40px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family:times new roman,times;"&gt; &lt;/span&gt;&lt;span style="font-style:italic;font-family:times new roman,times;"&gt;When I first approached Community Server, I was a bit weary about whether or not it would be a successful tool and if we could pull off everything we hoped to with it.&amp;nbsp; After working with it for a mere 4-5 weeks, I am extremely pleased with it and would suggest it to anyone who wanted to build a Community Site, or even a corporate Intranet.&amp;nbsp; The power that Community Server provides is outstanding, and once you get past those first few steps in development, you can develop and deploy new tools, controls and components in literally minutes (of course, depending on the complexity requirements).&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;-- David Higgins&lt;br&gt;Axosoft, Developer&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.axosoft.com/aggbug.aspx?PostID=10803" width="1" height="1"&gt;</description><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Integration/default.aspx">Integration</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Axosoft/default.aspx">Axosoft</category><category domain="http://community.axosoft.com/blogs/davidh/archive/tags/Customer+Portal/default.aspx">Customer Portal</category></item></channel></rss>

