Greg DeRoeck’s Weblog

About work, play and life in Colorado

Silverlight 3 – Adding Page Transitions to the Navigation Project Template

Posted by rockybound on August 18, 2009

During the past couple weeks, I had the opportunity to work with a client that was interested in putting together an eye-catching web site that would be purely informational in nature.  Knowing that Silverlight 3 has a new project template for navigation, I started poking around the template to see if this could be used.  The client wanted to have a certain “Wow” factor to the web site to separate it out from others in his line of work, so I mentioned that Silverlight is a great technology to look at regarding rich experiences within the UI.  Taking into account the business need for a unique site but still making it informational and professional, I decided to use the new Navigation template and add some page transition animations as well as some custom navigation buttons and other graphics.  This post will cover the technique I used to implement custom page transitions in this client’s web site.

As I usually do, I researched various blog posts, sites and books to determine a good way to modify the navigation template for custom page transitions.  I found a couple sites that helped me tremendously in understanding what controls I would have to implement and modify.  This blog posting was probably the most helpful.  It gives instruction on how to replace the Content Presenter Control in the navigation frame with a Transitioning Content Control, new in Silverlight 3.  This new control allows you to use 4 built in transition effects if one of them meets your needs, but you also can modify the template to create your own, which is what I did.  Jesse Liberty has a great video about the Transitioning Content Control available in the Learn section of the Silverlight.net web site.

So, in the end, we decided to create a site with 5 different “pages” for the user to navigate through.  The transition we thought would give enough impact would be a rotating transition, where the page seems like it’s rotating around an axis giving it a 3D type look.  The current page would rotate half way, then it would be replaced by the new page and then rotate back.  Obviously, this transition is not one of the 4 built in for the control, so I’d have to modify the template to create the effect.  The tools I used to do this were Visual Studio 2008, Expression Blend 3 + SketchFlow (trial version), Silverlight 3 tools and the Silverlight 3 Toolkit, all available here.

The following steps will describe the technique used to create this custom page transition.

1)  Open Visual Studio 2008 and create a new Silverlight Navigation Application project.  When asked to create a web project, click OK.

Pic1

2)  The site should open to the MainPage.xaml page.  If not, open the MainPage.xaml file and find the tag <navigation:Frame….  This is the control we are going to modify to implement the custom transition.

   1: <Border x:Name="ContentBorder" Style="{StaticResource ContentBorderStyle}">
   2:  
   3:     <navigation:Frame x:Name="ContentFrame" Style="{StaticResource ContentFrameStyle}" 
   4:                       Source="/Home" Navigated="ContentFrame_Navigated" NavigationFailed="ContentFrame_NavigationFailed">
   5:         <navigation:Frame.UriMapper>
   6:           <uriMapper:UriMapper>
   7:             <uriMapper:UriMapping Uri="" MappedUri="/Views/Home.xaml"/>
   8:             <uriMapper:UriMapping Uri="/{pageName}" MappedUri="/Views/{pageName}.xaml"/>
   9:           </uriMapper:UriMapper>
  10:         </navigation:Frame.UriMapper>
  11:     </navigation:Frame>
  12: </Border>

3)  In the Solution Explorer, right click on MainPage.xaml and select “Open in Expression Blend…”.  If not already viewable, click on the Objects and Timeline tab to view the controls on the MainPage.xaml page, as shown below.

Pic2

3)  You’ll notice that the page contains many controls.  The one we’re concerned about is the ContentFrame control.  Under [UserControl] –> ContentBorder there’s a frame control called ContentFrame.  Right click on this control, hover over Edit Template and select Edit a Copy…

4)  A box called Create ControlTemplate Resource will appear.  In the Name(Key) box, type CustomTransitioningNavFrame.  In the section labeled Define In, select the radio button next to Resource Dictionary.  To the right of the drop down box, click the New button.

Pic8

5)  Clicking the New button should bring up another box named New Item.  In the Name box, replace the contents with CustomControls.xaml and click OK.  What we’re doing is creating the file that will hold the styles and animation storyboards for a new control based upon the existing control.  This file can also be used in the future to hold any styles and storyboards for additional controls that are customized within the site.  You do have the option of storing this code in the existing page as well.  I decided to do it this way because I believe it’s cleaner and gives you the opportunity to used the code in additional pages throughout the site.

You’ll now notice that the Resource dictionary drop down says CustomControls.xaml.  If not, pull down the drop down and select it.  If it’s not there, repeat step four to create the file.  When finished, click OK.

Pic4

6)  When you click OK, you’ll be taken back to the Expression UI and will notice there is a black rectangle with “Frame” in the upper left corner (or somewhere within the rectangle).  In the Objects and Timelines tab, you should see ControlTemplate –> [Border] –> [ContentPresenter].  The Border and the ContentPresenter make up the structure of the navigation frame.  What we want to do now to implement a page transition is to replace the ContentPresenter control with a TransitioningContentPresenter control.  This control is available in the System.Windows.Controls.Layout.Toolkit.dll assembly.

Right click on the [ContentPresenter] control in the Objects and Timelines tab and click Delete.  Click once on the [Border] control to highlight it.  In the rectangle, you should see an arrow pointing down and to the right.  Click and drag this arrow all the way out to the border of the rectangle.

Pic5

7)  Click the [Border] control once to highlight it.  To the left of the Expression Blend window, you should see the toolbox with the various controls available.  On the bottom of the tool box, you should see a button with two arrow-like shapes pointing to the right.  If you hover over this button, it should say Assets.  Click on the Assets button.  You’ll now see a menu-type list on the left side of the box that opens, as well as control names on the right.  At the bottom of the list on the left, you’ll see an option called Locations, with an arrow to the left of it.  Click this arrow.  You’ll then see (eventually – it may take a while to load them) a list of DLL names.  This list of assemblies will load and eventually you should see an assembly named System.Windows.Controls.Layout.Toolkit.dll.  Once you click on this assembly, a group of controls will appear to the right.  One of them should be the Transitioning Content Presenter control.  Double click this control – you should then see the control’s icon appear under the Assets button.  Double click on the icon to insert the control under the Border control in its default size, which should stretch the control to the dimensions of the border.

Pic6 Pic7

8)  So, at this point we’ve replaced the ContentPresenter control with the TransitioningContentPresenter control.  If you didn’t want to create a custom transition and wanted to use one of the built in transitions of the control, you could stop here.  All you’d have to do is modify the xaml of the control and set the Transition attribute of the control to one of the four existing transitions (which are DefaultTransition, Normal, UpTransition and DownTransition) and set the Content attribute to {TemplateBinding Content}.  But, we wanted another type of transition, so now we must edit the template of the TransitioningContentPresenter to create a new transition and set some values so that it works the way we want.

Right click the [TransitioningContentControl] and select Edit Template –> Edit a copy….  In the Create Style Resource box that opens, under Name(Key), type CustomTransitioningContentCtrl.  Under the Define In section, select the radio button next to Resource dictionary and in the drop down box, select CustomControls.  This will ensure that the styles and storyboards we’re going to create will be kept in this file.  Click OK.

Pic8 

9)  You’ll now notice that under the Objects and Timelines tab under the Template heading, you have [Border] –> [Grid] –> PreviousContentPresentationSite and CurrentContentPresentationSite.  The Previous and Current controls are Content Presenter controls that make up the Transitioning Content Presentation control.  These controls represent the content (or “page”, in this case) that was being displayed previous to the transition being implemented and the content that will be displayed after the transition is complete.  These two content presenters are the key players in the Transitioning Content Control and will be what the animations and storyboards will be manipulating during the transitions.

We have to make a couple changes to these two content presenters to get them to act the way we want them to.  These changes need to be done the same way to both content presenters.  First, we have to resize the Grid and center both presenters in the Grid.  Second, we have to set the center points of each presenter so that the will rotate around the middle of themselves when we implement the transition.

For the first change, click on the Grid control under Objects and Timelines.  In the design window, drag the lower right corner of the grid to lower right corner of the black rectangle.  Doing this will statically set the dimensions of the grid.  Now, under Objects and Timelines, click on the PreviousContentPresentationSite control.  On the right side of Expression Blend, you should see the Properties tab.  If Layouts is not expanded, go ahead and expand it.  At this point, you’ll notice that there is an orange border around the Horizontal Alignment and Vertical Alignment options.  These borders indicate that these settings are fixed in the control, but we can manipulate them by changing it to a local value.  To do this, click within the Horizontal Alignment border.  A menu will pop up and you should see the option Convert to Local Value.  Click that option and the orange border will disappear.  Do the same for the Vertical Alignment option.  Go ahead and click the Center option in both the Vertical and Horizontal sections (should be the second one from the left).  The content will now appear in the center of the grid for both the Previous and Current content presenters.

Pic9 Pic10

10)  The next step is to set the center point of each Content Presenter.  To do this, select the PreviousContentPresentationSite content presenter by clicking it once in the Objects and Timelines tab.  Go to the Properties tab to the right of the designer and expand the Transform section.  Within the Transform section, you’ll see Render Transform and Projection areas.  Under Projection, there are 4 tabs.  The second tab should be Center of Rotation.  Click on this tab and you’ll see boxes with X, Y and Z next to them, which are probably filled with 0s.  Change the 0s to 0.5 for all three boxes.  Doing this will set the center of rotation directly in the middle of the content presenter control you’re working with.  Repeat these steps for the CurrentContentPresentationSite content presenter.

Pic11

11)  We still have to make sure that our content presenters show the content of the pages we want to display.  To do this, select the PreviousContentPresentationSite content presenter by clicking it once in the Objects and Timelines tab.  Again in the Properties section, find the Common Properties area.  Within this area, there’s a Content box which has a small white square to the right of it.  Click on this square and you’ll see a menu come up called Content with an option for Template Binding.  Hover over this option and another menu will come up.  Find the Content option and click it.  This tells the control to look to the Content template for the content of the control.  Do the same thing with the CurrentContentPresentationSite content presenter.

We also have to set the navigation frame control that contains the Transitioning Content Control to get its content from the same template binding setting.  To do this, close the CustomControls.xaml file and return to the MainPage.xaml file.  Right click again on the ContentFrame control under the ContentBorder control and hover over Edit Template… and select Edit Current.  You’ll again see the [TransitioningContentControl] under the [Border] control (look familiar?).  Follow the steps above to change the content to read from the TemplateBinding content setting for this control.  When finished, right click on the [TransitioningContentControl] control, hover over Edit Template… and select Edit Current to go back to the contents of the Transitioning Content Control.

Pic12

12)  We have now prepared our Transitioning Content Control and its parts for the animation we want.  The next thing to do is to create the visual state for the effect we want.  Showing exactly how to do this in Blend using the Timeline would take a lot of time, so I think it’s better just to give you the code to implement it.  If you open the CustomControls.xaml file in xaml view, you’ll see the Visual States that are built into the Transitioning Content Control – DefaultTransition, Normal, UpTransition and DownTransition.   Find the closing tag of the DownTransition visual state (</VisualState>).  Position your cursor at the end of this tag and press enter on the keyboard.  Copy and paste in the following code:

<VisualState x:Name="Flipper">
    <Storyboard>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="CurrentContentPresentationSite" Storyboard.TargetProperty="(UIElement.Opacity)">
            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="00:00:00.9000000" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="00:00:01" Value="1"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="PreviousContentPresentationSite" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">
            <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
            <EasingDoubleKeyFrame KeyTime="00:00:01" Value="90"/>
        </DoubleAnimationUsingKeyFrames>
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="CurrentContentPresentationSite" Storyboard.TargetProperty="(UIElement.Projection).(PlaneProjection.RotationY)">
            <EasingDoubleKeyFrame KeyTime="00:00:01" Value="-90"/>
            <EasingDoubleKeyFrame KeyTime="00:00:02" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

Now, find the Control Template tag that defines the navigation frame.  Within this tag, you should see the TransitioningContentControl tag defining the control.  Add an attribute to the tag after the Style attribute for the Transition type and give it a value of “Flipper”.  It should look like this:

<!-- Resource dictionary entries should be defined here. -->
<ControlTemplate x:Key="NavFrame" TargetType="navigation:Frame">
    <Border Background="{TemplateBinding Background}"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}"
        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
        VerticalAlignment="{TemplateBinding VerticalContentAlignment}" d:DesignWidth="639" d:DesignHeight="432">
        <layoutToolkit:TransitioningContentControl 
            Content="{TemplateBinding Content}" 
            Style="{StaticResource TCCCustom}"
            Transition="Flipper"/>
    </Border>
</ControlTemplate>

Save and close the file.  Switch back to Visual Studio and accept the changes if it asks.  Go ahead and press F5 to run the application.  You should see the content of the pages flip one way then flip back with the content of the new page.

This is the technique I used to create a customized page transition for use within the Navigation Project template for Silverlight 3.  There are many other types of transitions you can implement and play around with, so I hope this has given you a look into what’s possible for this type of animation.  In my next post, I’ll go over how I created an animation for displaying a life cycle type graphic using Expression Design and Expression Blend.  Hope you found this useful!  Thanks for reading!

Posted in Application Development, Silverlight | Tagged: , | 1 Comment »

.NET 3.5 SP1 – Action Attribute in the Form Element of an ASP.NET Page

Posted by rockybound on February 27, 2009

I was recently brought into a SharePoint project to help fix some bugs and generally be there as an extra resource while the team prepared for various “go live” dates.  One issue we were having was a failure to post form data to another web site for an automated login of sorts.  From within SharePoint, a link was created that would direct the user to an ASP.NET page, gather information and manipulate it from the user’s profile, determine which site the user wanted to go to and then submit the data to the site for an automatic login.  Easy enough, right?  Except it had one catch – when the “redirector” page submitted the form data to the site, it wouldn’t post to the target site.  Now, this problem occurred when the necessary files were deployed to the dev environment.  It worked very well on our individual development machines.  Why was this happening?

After some research, I found a couple articles here and here that outline an issue that is solved by installing .NET 3.5 SP1.  From my understanding, from .NET 1.1 through 3.5, if you put a URL value in the Action attribute of the ASP.NET form, the code was ignored by the framework and posted back to itself.  Unlike the days of classic ASP where you could define the POST event, .NET adopted the model of single post back.  This means that regardless of the URL you specify in the Action attribute of the form tag, the page will always post back to itself, rendering the Action attribute useless and dead.  You’d have to use the Response.Redirect method or the Server.Transfer method (under certain circumstances) to get to another page.  Unfortunately, this didn’t actually post the data in the form – it just redirected the user to the new page, without logging the user in.  (Server.Transfer would probably work if you were posting to a site on the same server, but in this case we were not.)

<form id="form1" runat="server" action="http://www.myurl.com"></form>

With the release and implementation of SP1 for .NET 3.5, this issue has been addressed.  You can now enter a URL to post to in the Action attribute and then use the submit() from within a RegisterStartupScript call to submit the form data to the target URL.

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myScript", "document.forms.form1.submit();", true);

So, if you ever have to post data to another web site for anything, this is an easy method.  Just make sure the server the code is running on has .NET 3.5 SP1 installed and you shouldn’t have the problem we did.

Posted in Application Development, SharePoint | Leave a Comment »

Custom Client Installation Experience for Silverlight 2 SharePoint Web Part

Posted by rockybound on January 22, 2009

I was recently tasked with creating a demonstration for a company that involved creating a video player to place into a SharePoint Web Part.  The end result turned out to be very nice and was based upon the Silverlight SharePoint Blueprint project on CodePlex.  I did modify the player to add functionality for play, pause, stop and volume controls, as well as a video slider I found that works very well.  I’d like to compliment the folks on the Blueprint team for their results – it’s really a great starting point for a customized Silverlight and SharePoint solution.  Just a note – I believe the Blueprint still uses the Beta 2 version of Silverlight, so be aware of the break-changes relating to that if you decide to implement any of the controls.

After the player was created, I started thinking about the situation that would arise when the user didn’t have Silverlight installed on their machine.  We all know the standard image and link that is displayed when this is the case.  Tim Heuer has a great video on how to customize the installation experience for pure Silverlight applications, but I wondered how that would apply to a SharePoint Web Part.  After scouring the internet and a couple of emails to Tim regarding this caveat, I figured it out.  Of course, like most things that take me a while to figure out, it’s actually quite simple. ":)

What the web part was doing was declaring an ASP.NET Silverlight control and setting the properties to it in the Web Part’s CreateChildControls overridden method.  The basic, necessary attributes of the control were then set (ID, Version and Source in this case) , excluding the PluginNotInstalledTemplate property.  Without setting the content of this property, the default image/link appears for the client by default.  Example is below:

   1: // instantiation of the silverlight control
   2: System.Web.UI.SilverlightControls.Silverlight silverlightControl = new System.Web.UI.SilverlightControls.Silverlight();
   3: silverlightControl.ID = "MediaViewerBeta2";
   4: silverlightControl.MinimumVersion = "2.0.30523";
   5: silverlightControl.Source = "/ClientBin/XAP/SLSP_MediaViewer.xap";
   6:  
   7: // Define the width and height based on the webpart height
   8: Unit height = new Unit(425);
   9: Unit width = new Unit(600);
  10: if (!this.Height.IsEmpty)
  11:     height = this.Height;
  12: silverlightControl.Width = width;
  13: silverlightControl.Height = height;

To set this property, I overrode the Silverlight control class and declared a new class called PluginTemplate that inherits from the iTemplate interface.  The PluginNotInstalledTemplate property type is of iTemplate.  Within the new PluginTemplate class, I created the InstantiateIn method to set the custom installation verbiage within an asp.net label control via a StringBuilder.  Obviously, this can be done in different ways depending on the experience you want the user to have.  I just chose this for simplicity sake – it may require some jazzing up later.  The two new classes are below:

   1: /// <summary>
   2: /// Custom control class representing the SilverlightControl - will be used to provide a custom installation experience for the client if
   3: /// Silverlight is not installed.
   4: /// </summary>
   5:     public class SilverlightBase : System.Web.UI.SilverlightControls.Silverlight
   6:     {
   7:         public SilverlightBase() 
   8:         {
   9:             base.PluginNotInstalledTemplate = new PlugInTemplate(); 
  10:         }
  11:     }
  12:  
  13:     /// <summary>
  14:     /// ITemplate class to add to the custom Silverlight control
  15:     /// </summary>
  16:     public class PlugInTemplate: ITemplate
  17:     {
  18:         #region ITemplate Members
  19:  
  20:         public void InstantiateIn(Control container) 
  21:         {
  22:             StringBuilder str = new StringBuilder();
  23:             str.Append("<h2>Get Microsoft Silverlight 2</h2>");
  24:             str.Append("<p>This application requires Microsoft Silverlight 2 to " + 
  25:             "provide a rich integrated media experience. Silverlight is a small, " + 
  26:             "safe, cross-platform browser plugin created and supported by Microsoft.</p>");
  27:  
  28:             str.Append("<p><div style='position:absolute;'>" + 
  29:             "<a href='http://go.microsoft.com/fwlink/?LinkID=124807' " + 
  30:             "style='text-decoration: none;'><img src='http://go.microsoft.com/fwlink/?LinkId=108181' " + 
  31:             "alt='Get Microsoft Silverlight' style='border-style: none'/></div></p>");
  32:  
  33:             System.Web.UI.WebControls.Label txt = new System.Web.UI.WebControls.Label();
  34:             txt.ID = "lblMess";
  35:             txt.Text = str.ToString();
  36:             
  37:             container.Controls.Add(txt);
  38:         }
  39:  
  40:         #endregion
  41:     }
  42: }

With the new Silverlight control class built with the new instance of the PluginNotinstalledTemplate, I changed the declared instance of the Silverlight control in the Web Part from the System control to the custom control.  Now the installation experience for the client is customized according to the content of the PluginTemplate class.  The resulting display is below:

Result 

Not a totally exciting result, but it is better than just the image, no?  Hope this helps someone!

-G

Posted in SharePoint, Silverlight | Tagged: , , , , , , | Leave a Comment »

What is an expert?

Posted by rockybound on January 15, 2009

Each day that goes by, each work hour I spend sitting in front of a computer trying to create solutions to problems clients bring, I learn more.  I learn from you, from bloggers, from colleagues and clients.  I learn from books, websites, white papers and other documents I’ve accumulated over the years.  Lately, I’ve stumbled across some materials while researching some items that came from self proclaimed “experts”.  These materials were just flatly inaccurate and I started wondering, what exactly does the term “expert” mean?

Thinking about it some more (probably way too much, actually), I started trying to define what and “expert” really is.  My view of an expert has always been someone who knows all there is to know about a subject.  My definition has always just stopped at that point, but lately, I’ve been thinking about it in more philosophical terms.  Taking that definition, one could come to the conclusion that an “expert” couldn’t learn anymore about a subject.  If that were true, is there anyone on this planet that is naive enough to think they can’t learn anymore about something?  Unfortunately, the answer is yes.

Now I realize that people claim to be experts on a variety of things.  The field of Information Technology is filled with people that consider themselves experts on all kinds of subjects.  Some are considered by many others to be experts in their particular field, and rightfully so.  There are people out there with tremendous knowledge, skill and experience.  I attended a DevConnections conference last year and met a lot of these people – most of them were presenters, but some were attendees.  The one thing I notice about all of them was that they were all students of their trade – extremely bright, curious, determined and exited people that loved what they do.  Talking to them, I never got the sense that they knew everything about their particular subject.  What I did get was an eagerness to learn more about it.

According to the definition of “expert” stated earlier, I know I’ll never become one.  No one will.  Yes, there will be some people that will think they know everything about something, but that just proves that they are NOT experts.  My new view of what the term “expert” means is modeled after the type of people I met at the conference.  They may know a lot about their subject – they may even have created it.  But they will always be the first to admit that they don’t know everything about it.  It’s these kind of people that I look up to, because they will always be the ones that strive to know more.  And, with that attitude, they always will.

Posted in General | Tagged: , , | Leave a Comment »

RMSUG Presentation – Workflow References, 11/18/08

Posted by rockybound on November 18, 2008

If you attended the Rocky Mountain SharePoint User Group meeting on the 18th, I thank you for sitting through my presentation on Workflow. Hopefully, you found it informative. (Or entertaining at the very least!) The following is a list of 10 sites and materials that helped me in preparing for this presentation and can be used as general references for Workflow in a SharePoint environment and beyond, with an emphasis on custom workflows for SharePoint.

  1. SharePoint Workflow Development in VS – This is the first of a series of walkthroughs written by Eilene Hao for creating workflows with Visual Studio.

    http://blogs.msdn.com/sharepoint/archive/2006/11/18/developing-workflows-in-vs-part-1-workflow-objects-and-a-crash-course-on-mechanics.aspx

  2. Introduction to Workflows – One good basic introduction into Workflows in an Office environment

    http://office.microsoft.com/en-us/sharepointserver/HA101544241033.aspx

  3. Information on Translation Workflows

    http://office.microsoft.com/en-us/sharepointserver/HA101544301033.aspx

  4. Writing Workflows in VS 2005

    http://blah.winsmarts.com/2007-8-Writing_SharePoint_Workflows_in_VS2005_-_Crawl_Walk_Run.aspx

  5. How to Debug your Windows SharePoint Services Workflow

    http://msdn.microsoft.com/en-us/library/ms455354.aspx

  6. SharePoint Advanced Asynchronous Workflow Messaging – Video presenting advance techniques for creating workflows with asynchronous functionality

    http://channel9.msdn.com/pdc2008/BB47/

  7. Delete Files with Workflow Using Duration

    http://www.sharepointblogs.com/holliday/archive/2007/07/26/delete-files-using-workflow-using-duration.aspx

  8. Deactivate and Delete a Workflow Activity from SharePoint

    http://russellmccloy.blogspot.com/2008/01/deactivate-and-delete-workflow-feature.html

  9. Developer Introduction to Workflows for Windows SharePoint Services 3.0 and SharePoint Server 2007

    http://msdn.microsoft.com/en-us/library/aa830816.aspx

  10. K2 Underground – Third party company specializing in providing workflow engines for SharePoint and beyond

    http://www.k2underground.com/

Posted in SharePoint | Tagged: , , , | Leave a Comment »

Please, no more politics…….

Posted by rockybound on October 27, 2008

Oh please, please let November 4th come quickly. Not because I want one or the other candidate to win, and not because I want this or that amendment to pass – but because I am so sick of the ignorant, rampant rhetoric from people. Not just the senseless repetitive ads that bombard us day in and day out, but everyday people that all of a sudden become experts on what kind of person a candidate is. It seems that every time a story about this election comes out on the local news web sites, the “experts” come out of the woodwork to verbally vomit on any opposing viewpoint. It just astounds me that these people are so narrow minded and have such strong, damaging comments to make about people they know nothing about. I’ve read and heard comments about Obama being a “socialist” and a “communist”. I’ve also heard from the other side as McCain being “too old” or “too feeble” to be president. It’s amazing what people will do to convince people to think a certain way.

When I was a senior in high school, I was fortunate enough to be placed into an honors class for English. Although the teacher was not very dynamic and I switched out at the end of the semester to another class, this honors teacher had us unknowingly participate in a little experiment. He has us read an editorial that appeared in the San Francisco Chronicle dealing with a subject (I can’t remember exactly what it was) that appeared on the surface to be logical, truthful and forthcoming. We were asked to write a page reviewing the article, telling what we thought about the content and whether we agreed with the writer or not. When the class got their papers back, we were informed that 98% of the class had a favorable opinion about the article and the writer’s viewpoints – I was included in that majority. Before he handed back our papers, he told us that the article was written by a committed schizophrenic gentleman that had been arrested for threatening the life of a high ranking government official. When asked to read the article again with this knowledge, I saw for myself the complete bogusness of the writing. That day really opened my eyes to something. It made me realize that questioning the motives and finding the agenda of the person speaking is paramount to making sure that the truth – your OWN truth – is realized. What that means is you need to make up your own mind on issues – not just blindly believe what you’re told.

My point is this – in this election year, we’re obviously being subjected to so many opinions that it’s easy to just throw up your hands and say, “Forget it – I’ll just vote for who my (insert close personal friend, relative, etc) votes for.” I want to ask that you don’t just follow the masses, whichever way they may go. Think about what you value. Think about what’s important to you. Think about how you’d really be affected by each decision/candidate. Don’t just blindly believe something you hear because it “sounds right”.

As for me, this year I’m voting for Obama. Not because I’m a Democrat (I’m unaffiliated) and not because I think McCain is an idiot (the guy’s brilliant – both candidates are, in my opinion). I just believe that Obama has given more detailed solutions to the nation’s problems. He’s stated more about what he will do to improve my situation. I think he can represent us better internationally than McCain can and has more of a chance of negotiating and relating with foreign countries. Of course, through all my thoughts and opinions, I still have no idea if I’ll be proven right. In fact, there’s no way to tell if I will or not – you can’t go back in time. Hell – I voted for Bush four years ago!! But, I can sleep at night because I have not let my opinion be swayed by the people telling me who I should vote for. Can you say the same?

Good luck America.

Posted in General | Leave a Comment »

Hello to Analysts International

Posted by rockybound on August 31, 2008

I’ve now been at Analysts for two weeks and love it! I should be starting my first project sometime mid September, from what I hear. In the meantime, I’ve been asked to learn about and come up with a presentation on SharePoint Workflow. I’ve done some research and have found a lot of great sites that have helped me learn about creating workflows in SharePoint. I’ve also purchased a couple books that have helped me create workflows in Visual Studio 2005 and 2008. Two in particular that have been open on my desk for the past couple weeks are Workflow in the 2007 Microsoft Office System by David Mann and Pro InfoPath 2007 by Philo Janus. Both have a great amount of information specific to workflow within the SharePoint framework and cover everything needed to create custom workflows in MOSS.

Suffice it to say, I’ve created test workflows in my little test environment and have found that creating them in VS 2008 and deploying them from it is much easier than VS 2005. The feature and workflow XML files are already created and filled in with what was typically in the snippet provided for VS 2005. As well, all you need to deploy workflows in VS 2008 is to right click the workflow project and select Deploy, instead of the two or three steps needed in VS 2005. Very nice.

One thing I did learn to do while creating my demo workflow is to make sure you create only one or two activities, compile and test them, then add additional activities. This may go without saying, but it’s MUCH easier to debug a workflow that has only a couple of new activities than it is to go through part of the workflow and finally find the issue. Yes, I learned this the hard way.

I’m thinking in an upcoming blog of creating a workflow for demonstration purpose through VS 2008. You’ll possibly see that soon.

Posted in SharePoint | Leave a Comment »

Goodbye to Air Methods

Posted by rockybound on August 16, 2008

Today was my last day working for Air Methods. I spent just over a year and a half there developing mostly ASP.NET applications for various internal departments. While I learned a lot and made some good friends, it was time to start thinking more about my career goals and what I want to be doing in the next few years. I’ve accepted a job with Analysts International – a consulting firm based out of Minnesota. Here I hopefully will be working with colleagues I can learn from as well as work with MOSS 2007 and other cutting edge products. I’m really looking forward to starting Monday with them.

I’ve been researching and studying a lot about MOSS Business Data Catalog (BDC). In my research, I’ve discovered a few tools that allow developers to write Application Definition Files (ADFs) graphically. The one I’m using now, although a license for it is $1200 and I’m just using the trial version, is BDC Meta Man. I’ve found the functionality very easy to use so far. I hope to try and learn more about this tool and others in the upcoming week. A buddy of mine, Todd Baginski, has had a hand in developing BDC Meta Man and I think it’s a great asset to anyone trying to create ADFs quickly and efficiently. More to come on other tools as I get some experience with them.

Posted in General | Leave a Comment »

SharePoint Certified!

Posted by rockybound on May 31, 2008

I have passed the MCTS – SharePoint Configuration exam and am now an MCP! Yipee! It wasn’t as hard as I thought, although I did go overboard on the studying, which isn’t that bad. I definitely learned a lot from the experience and the studying, so I believe it was worthwhile. It doesn’t look bad on a resume either.

I’ve set up a company GJDCorp to start the process of getting a consulting business up and running. I’m planning on working with Matt Passanante from SharePoint Experts in doing this. We’ve talked quite a bit and I’m excited to start.

Posted in SharePoint | Leave a Comment »

One Option for Capturing Local Date/Time in ASP.NET

Posted by rockybound on March 10, 2008

I recently had a need to capture local computer time in an asp.net application.  At my company, there’s an application I wrote called the FLOG, short for Flight Log, that helps track our helicopters all over the country.  We have folks in each of the four continental time zones that track these flights and report their positions to a centralized SQL server located in Denver.  The problem was that the default time that was showing up in the time field for all time zones was showing the server time, in the Mountain time zone.  ASP.NET unfortunately doesn’t have a great way to capture local computer time.  Which actually makes sense, being that ASP.NET is mainly server based.  But, if a web application needs to capture the local computer time to be used in server side code, how does the programmer capture it?

Well, I found one way to do it using a mix of Javascript and .NET code.  The following is the method I used.  Keep in mind that this is ONE way, not necessarily the best way.  But I do know it works.

Code - Local DateTime

**The code above is actually an image – this blog service is a royal pain to format with code. If you can’t see the entire box border, expand it out. The method used was modified from a web site I found – http://www.dotnet247.com/247reference/msgs/37/188110.aspx

Hope this helps someone out there.  Enjoy!

-G

Posted in Application Development | Leave a Comment »