Four months at XCentium and loving it!

It’s hard to believe it’s been four months since I joined XCentium. XCentium is a consulting company that some previous colleagues started while I was working at Microsoft. They currently have three Sitecore MVP’s on staff: Niket Ashesh, Martin Knudsen and Zac Malmquist. Getting to work with these guys again (and everyone else at XCentium) has been very exciting so far.

In the four fast months at XCentium I have wrapped up a Sitecore 7.0 project and converted a heavily customized Flash based Google map to jQuery/Google Maps v3 API. I am currently working on a massive Sitecore 7.2 MVC project with about 170,000-340,000 microsites and Insite Commerce integration. Very exciting! I will share more details as I get approval to share. One of the many reasons I love working on Sitecore solutions versus intranet SharePoint solutions 99.9% of the time they are publicly accessible!

In case you don’t know what Sitecore is, or you haven’t seen their relatively recent site redesign, you definitely should check out http://www.sitecore.net

I always like to put it in terms that most people can understand. It’s like SharePoint, but for public facing web sites with so many extra features that makes the decision to use it very simple. It is much easier to implement multi-lingual capabilities, has built in analytics and what started as a Content Management System is now a complete Experience Management System. By the way, you can even replace your SharePoint intranet with the Sitecore Intranet Portal as well.



Source: ASPAdvice Blog

Congratulations! You have one of the top 1% most viewed LinkedIn profiles for 2012

I just received this email yesterday congratulating me on the achievement of having one of the top 1% most viewed LinkedIn profiles for 2012. I am humbled and shocked.

In the same email they announced that have now reached 200 million members. I just had to share, since I find it ironic that so many years ago I had some personal exchanges regarding the value and privacy risks of using a service such as LinkedIn.

I do have at least a few beefs with LinkedIn. I wish they’d either raise or drop the 50 group limit. I like the idea they just launched of having a separate section of your profile for Volunteering and Non-Profit organizations. So much that I moved some of my previous roles to them, only to find out that the recommendations that people have taken their precious time to leave for me can not be moved. After contacting support, I was told that they currently do not have this feature. Now I get to move some of those items back at some point, so I can preserve those invaluable recommendations. argh. Oh well, it is still a terrific site and obviously no one is perfect.

Technorati Tags: ,



Source: ASPAdvice Blog

My Blog/Site Reimagined!

One of the exciting things that I have decided to do for 2013 is a relaunch, or to coin the phrase Microsoft has liked to use lately, to reimagine both my blog and personal web site. Over the holidays, I happened to notice that RadicalDave.com was available. Since there has always been cybersquatters occupying my namespace .com and I had to utilize David L Walker.com, I am excited to utilize this easier to use domain. Back in high school and even earlier, I had used the alias Radical Dave quite a few times while connecting and running BBS’s, etc.

I can only hope and strive to live up to the expectations that come with using such a namespace. Stay tuned!

Technorati Tags: ,



Source: ASPAdvice Blog

New Year’s Resolutions in progress for 2013!

You may have noticed from my social networks – Twitter, FaceBook, and/or LinkedIn, that my family and I decided to kick off 2013 with some major life changing events. After exactly three and half years as a Senior Application Development Manager for Microsoft, I accepted the exciting opportunity to join FMCTechnologies as their Public Web Architect. I am already really enjoying the opportunity to return to focusing on Sitecore. They have some major projects underway and I am excited to be involved with them. I will be more than happy to share more details as I can.

I have several other new and exciting surprises planned for 2013, so stay tuned!



Source: ASPAdvice Blog

First annual NWA TechFest event was a huge success!

I am proud to say that the NWA community came out and did the first NWA TechFest justice!

Due to a few minor glitches in the first run of the touch screen kiosks, we were unable to get an exact head count. It was very safe to say we had over 250+ attendees. The volunteers ran the registration through the kiosks this time, but next time, at the 5th annual Tulsa TechFest – Friday, November 12th, it will be all Self-Service Touch screen kiosks.

All the speakers did excellent jobs and the evaluations are still coming in, but they have all been very good so far!

Special kudo’s were given to our keynote presenter Microsoft’s Murray Vince, General Manager OEM Embedded, Field & Service Partners, for coming up with a new term in the title of his presentation: Retail Computure: The Retail Computing Future!

There will be more news and information from the event released as it comes in. The attendee’s donated a total of $269 to the big local non-profit community program: The Jones Center. We are still waiting on the weight from the NWA Food bank for the cans that were donated.

Thanks to all who attended and help make it a huge success!

Even my last minute filler session that I had to deliver: “Your Data in the Cloud Securely using OData (The Open Data Protocol) was well attended! You can find the slides here:

2010 2-31 AM Type- Compressed (zipped) Folder Size- 0.8 MB



Source: ASPAdvice Blog

NWATechFest 2010 Agenda is complete and registration is now open

It is with great pleasure that I am announcing the newest city to host a TechFest event – Rogers, Arkansas! The North West Arkansas area has a thriving Developer and IT Pro community. Not to mention it is home to the *Fortune 1* company in the world.

Facilities to hold this first event were very difficult to come by economically, but we’ve found a great win-win location: the Center for Nonprofits @ St. Marys. It is owned and operated by The Jones Center. The list of community programs they have is very long and includes things such as a Women’s Shelter.

The agenda is now up and as complete as any agenda can be for an event of this size. (After running the TulsaTechFest event for now going on it’s fifth year, I know the schedule will change – due to cancelations, etc.)

With eight tracks, twenty seven+ speakers and forty sessions, the event will definitely have something for everyone!

We are still working on Prizes for the event, but we are already over $17,000 in books and software!

As with all the Tulsa TechFest events this one is Free! Although, we do ask you to support the community and bring two canned foods or two bucks to be donated to the www.NWAFoodBank.com and www.TheJonesCenter.org.

 

We hope to see you there! Register now at: www.NWATechFest.com

 

Be sure to watch www.TechFests.com as I am publicizing any other TechFest events that are now occurring all over. It’s powered by www.CommunityMegaphone.com, so be sure to add your events there.

Another new city to host a TechFest – Washington DC!! www.DCTechFest.com

If you are interested in hosting a TechFest event in your area and want assistance, just email me. After moving to Windows SharePoint Services 3.0 just before TulsaTechFest 2008, I’ve honed the process and can spin up a new city / year very easily. Just in case you If you don’t want to have to worry about building a website on top of all the other things involved with organizing an event.



Source: ASPAdvice Blog

Want the benefits of the cloud on premise? Don't miss the Application Infrastructure virtual launch event! #Appfabric FTW!

Here is one virtual event that I am definitely looking forward to! The launch of Windows Server Appfabric and Windows Azure Appfabric!

Application Infrastructure: Cloud Benefits Delivered

http://www.appinfrastructure.com

Want to bring the benefits of the cloud to your current IT environment? Cloud computing offers a range of benefits, including elastic scale and never-before-seen applications. While you ponder your long-term investment in the cloud, you can harness a number of cloud benefits in your current IT environment now.

Join us on May 20 at 8:30 A.M. Pacific Time to learn how your current IT assets can harness some of the benefits of the cloud on-premises—and can readily connect to new applications and data running in the cloud. As part of the Virtual Launch Event, Gartner vice president and distinguished analyst Yefim Natis will discuss the latest trends and biggest questions facing the Application Infrastructure space. He will also speak about the role Application Infrastructure will play in helping businesses benefit from the cloud.  Plus, you’ll hear some exciting product announcements and a keynote from Abhay Parasnis, GM of Application Server Group at Microsoft.  Parasnis will discuss the latest Microsoft investments in the Application Infrastructure space aimed at delivering on-demand scalability, highly available applications, a new level of connectivity, and more. Save the date!

Technorati Tags: ,,,


Source: ASPAdvice Blog

Many quick updates and first XSLT sample for SharePoint – Event Management System

Okay. Life has been rolling so very fast lately. Here are a few quick updates to as quickly as possible keep everyone updated:

Jan 24, 2009 – Second annual – HoustonTechFest – Presented “Building Powerful WebParts with SharePoint 2007” and “WCF for the REST of us”! Awesome audience participation!

Feb 7, 2009 – Presented at the first annual SharePoint Saturday KC – “Building Powerful WebParts with SharePoint 2007”. Becky Isserman and team did an awesome job! Attended some awesome presentations. Had some great BBQ with Daniel Larson!

March 1-5, 2009 – MVP Summit 09! Totally awesome. Got to see the Gu (Scott Guthrie) and hang out with a bunch of the SharePoint MVPs!

March 28, 2009 – Second annual School of Dev / first time to join with SharePoint Saturday! – about 87 people braved the weather reports to attend. It was just rain! Then 9am to 3pm had about 6+ inches of snow drop and stop. Within 24 hours 99.9% was all melted. Presented “Building Powerful WebParts with SharePoint 2007” and “Knowledge (Social) Networking for the Enterprise”

April 16, 2009 – White paper I wrote for Quest.com was republished on to the home page as a Popular Article on SSWUG.org – SQL Server and SharePoint – The More You Know, The Better Off You Are (if you are a paid member you can read it here.)

April 18, 2009 – St Louis MOSS Camp! Had a great time presenting – “Building Powerful WebParts with SharePoint 2007“ and attending the other sessions. Becky Isserman and Scott Spradlin talked me into playing Rock band with spoons for drum sticks, didn’t do too bad. LOL

April 25, 2009 – NWACodeCamp – awesome job! Especially for their first event! “Presented Building Powerful WebParts with SharePoint 2007”.

May 28, 2009 – Baby # 5 – Kadison Zoey-Mae Walker born, thanks to my beautiful wife!

 Kadison Zoey-Mae Walker, born March 28, 2009

June 1, 2009 – Two year term as Vice President of the INETA NORAM Speakers Bureau ended.

June 22, 2009 – 1st day at Microsoft as a ADC (Application Developer Consultant) – in Dallas at Las Colinas office for New Employee Orientation, after hours – attended DFW SharePoint group that night and saw Ted Pattison!

June 23, 2009 – Day 2 at Microsoft, after hours – attended Dallas ASP .NET User Group where Dr. Tobias Komischke, Director of User Experience @ Infragistics presented.

June 29, 2009 – Turned over Tulsa Developers .NET user group to the very capable Vice-President Sean Whitesell and the other groups to their respective leaders as well.

July 2, 2009 – My beautiful bride and I celebrated our 15th wedding anniversary

July 27-31, 2009 – TechReady 9 in Seattle. I thought the MVP Summit was huge. Wow. Amazing time, learned a lot, and met a lot of new people. Plus, folks I haven’t seen in awhile – Zewei Song, Michael Wiley, Steve Walker.. and lots of new friends!

Okay.. whew. There’s a whole lot more in there as well, between the monthly TulsaDevelopers.NET, Tulsa SQL Server Group, Tulsa SharePoint Interest Group and Tulsa Java Developers Group that I was involved with every month until recently due to my commute and some new NWASQL Server User Group meetings at lunch. But, my “quick” update has turned into a lot more.

Now… finally on to the code!

For those of you that haven’t seen my “Building Powerful WebParts for SharePoint 2007” session, I totally love writing code and utilizing SharePoint as an application development platform. But, it took several years and practically hundreds of contacts to find a hosting company able and generous enough to donate/sponsor a virtual server for the TulsaTechFest.com web site and for the Tulsa User Groups I am involved with.

Due to timing, I had to build out the site last year so quickly that I took the opportunity to explore the functionality of SharePoint Designer 2007 for the first time.

I utilized it to enable friendly url’s in SharePoint (can anyone say /Pages)? yuck!

I copied the 2008 content as a Site Template to kick start the 2009 site. But that left a lot of extra data, so I just recently added an “Active” Yes/No checkbox to the Speakers List. That’s one thing I’ve learned over the last 4 years of running large events, the agenda is bound to change up to the last minute.

Starting with Visual Studio 2008, it offered the excellent ability to debug XSLT! I took advantage of that, to deliver a no-code solution for the Event Management, by parsing the SharePoint List RSS feed utilizing XSLT. The default RSS feed is kind of gnarly to work with, but I’ve managed to work around it. (See my WSS_LIST_RSS_FIELDS.xsl distributed as part of my PowerQueryWebPart CodePlex project for a great reusable parser.)

Ironically, when I first added the Active filter to the xsl:for-each statement the xsl:sort quit sorting by the SortOrder number column. Very strange. Open in Visual Studio 2010 Beta 1, same results. Sleep on it. Deploy today, so I could share with the world and get some others input and boom – it works!

For some reason Visual Studio 2008 isn’t showing the Debug XSLT option every so often. Visual Studio 2010 Beta 1 is showing it with no issues. Reopened it and reran the Debug XSLT option and boom – working every time now. Very strange. I’ll chalk both issues up to Visual Studio 2010 Beta 1 testing. All working great now.

So, simply create a Speakers list with the following columns: Title (FirstName LastName), Bio, Link, Company, Tagline, SortOrder (Number), Active (Yes/No) and you’re ready to role!

I have a SiteImages Picture Library with a sub folder called Speakers where the images are stored: Title(spaces replaced with __).jpg.

The following XSLT shows a 3 column right rail for speakers filtered by Active flag, sorted by SortOrder, Title

<xsl:transform  version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xsl xs" xmlns:ddwrt2="urn:frontpage:internal">
    <xsl:output method="html"/>

    <xsl:template match="rss/channel" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    <xsl:for-each select="item[substring-before(substring-after(description, 'Active:&lt;/b&gt;'), '&lt;/div&gt;')=' Yes']">
                        <xsl:sort select="substring-before(substring-after(description, ‘SortOrder:&lt;/b&gt;’), ‘&lt;/div&gt;’)" data-type="number" order="ascending"/>
                        <xsl:sort select="title" />

                        <!–                        <xsl:if test="substring-before(substring-after(description, ‘Active:&lt;/b&gt;’), ‘&lt;/div&gt;’)=’ Yes’">–>
                            <a>
                                <xsl:attribute name="href">
                                    <!–
                  <xsl:call-template name="getWSSDescriptionField">
                    <xsl:with-param name="description" select="description"/>
                    <xsl:with-param name="fieldName" select="’Link’"/>
                  </xsl:call-template>
                  –>
                                    <xsl:value-of select="concat(concat(‘/Tulsa/2009/Speakers/’, translate(title, ‘ ,.’,”)), ‘/’)"/>
                                </xsl:attribute>
                                <img border="1" style="border-color: black;" hspace="3" vspace="3" width="46" height="60">
                                    <xsl:attribute name="src">
                                        <xsl:text>/Tulsa/2009/SiteImages/Speakers/</xsl:text>
                                        <xsl:value-of select ="translate(title,’ ,.’,’_’)"/>
                                        <xsl:text>.jpg</xsl:text>
                                    </xsl:attribute >
                                    <xsl:attribute name="alt">
                                        <xsl:value-of select="title"/>
                                        <xsl:variable name="tagline">
                                            <xsl:call-template name="getWSSDescriptionField">
                                                <xsl:with-param name="description" select="description"/>
                                                <xsl:with-param name="fieldName" select="’Tagline’"/>
                                            </xsl:call-template>
                                        </xsl:variable>
                                        <xsl:if test="$tagline!=”">
                                            <xsl:text>, </xsl:text>
                                            <xsl:value-of select="$tagline"/>
                                        </xsl:if>
                                        <xsl:variable name="company">
                                            <xsl:call-template name="getWSSDescriptionField">
                                                <xsl:with-param name="description" select="description"/>
                                                <xsl:with-param name="fieldName" select="’Company’"/>
                                            </xsl:call-template>
                                        </xsl:variable>
                                        <xsl:if test="$company!=”">
                                            <xsl:text>, </xsl:text>
                                            <xsl:value-of select="$company"/>
                                        </xsl:if>
                                    </xsl:attribute>
                                </img>
                            </a>
                            <xsl:if test="position() mod 3 = 0">
                                <br/>
                            </xsl:if>
<!–                        </xsl:if>–>
                    </xsl:for-each>
                </td>
            </tr>
        </table>
    </xsl:template>

    <xsl:template name="string-replace-all">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="with"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text, $replace)"/>
                <xsl:value-of select="$with"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text, $replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="with" select="$with"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template name="getWSSDescriptionField">
        <xsl:param name="description"/>
        <xsl:param name="fieldName"/>

        <xsl:variable name="before" select="concat($fieldName,':&lt;/b&gt; ‘)" />
        <xsl:variable name="after" select ="’&lt;/div&gt;’" />
        <xsl:variable name="htmlFieldStart" select="’&lt;div class=ExternalClass’" />

        <xsl:variable name = "leftRemoved" >
            <xsl:value-of disable-output-escaping="yes" select="substring-after($description,$before)"/>
        </xsl:variable>
        <xsl:variable name = "results">
            <xsl:value-of disable-output-escaping="yes" select="substring-before($leftRemoved,$after)" />
        </xsl:variable>

        <!– HTML fields have extra <div>–>
        <xsl:choose>
            <xsl:when test="starts-with($results, $htmlFieldStart)">
                <xsl:value-of disable-output-escaping="yes" select="substring-after($results,’&gt;’)" />
            </xsl:when >
            <xsl:otherwise>
                <xsl:choose>
                    <xsl:when test="contains($results, ‘&amp;amp’)">
                        <xsl:call-template name="string-replace-all">
                            <xsl:with-param name="text" select="$results"/>
                            <xsl:with-param name="replace" select="’&amp;amp;’"/>
                            <xsl:with-param name="with" select="’&amp;’"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of disable-output-escaping="yes" select="$results"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:transform>

I’ll continue explaining more of the other sections of the site, plans for the future and more in upcoming posts!

I definitely don’t claim to be an XSLT expert. I’ve just managed to keep making it do what I need as I need to over the years. It is an excellent way to build functionality into SharePoint with no-code out of the box web parts.

Let me know if you have any questions and/or suggestions for improvements!



Source: ASPAdvice Blog

Many quick updates and first XSLT sample for SharePoint – Event Management System

Okay. Life has been rolling so very fast lately. Here are a few quick updates to as quickly as possible keep everyone updated:

Jan 24, 2009 – Second annual – HoustonTechFest – Presented “Building Powerful WebParts with SharePoint 2007” and “WCF for the REST of us”! Awesome audience participation!

Feb 7, 2009 – Presented at the first annual SharePoint Saturday KC – “Building Powerful WebParts with SharePoint 2007”. Becky Isserman and team did an awesome job! Attended some awesome presentations. Had some great BBQ with Daniel Larson!

March 1-5, 2009 – MVP Summit 09! Totally awesome. Got to see the Gu (Scott Guthrie) and hang out with a bunch of the SharePoint MVPs!

March 28, 2009 – Second annual School of Dev / first time to join with SharePoint Saturday! – about 87 people braved the weather reports to attend. It was just rain! Then 9am to 3pm had about 6+ inches of snow drop and stop. Within 24 hours 99.9% was all melted. Presented “Building Powerful WebParts with SharePoint 2007” and “Knowledge (Social) Networking for the Enterprise”

April 16, 2009 – White paper I wrote for Quest.com was republished on to the home page as a Popular Article on SSWUG.org – SQL Server and SharePoint – The More You Know, The Better Off You Are (if you are a paid member you can read it here.)

April 18, 2009 – St Louis MOSS Camp! Had a great time presenting – “Building Powerful WebParts with SharePoint 2007“ and attending the other sessions. Becky Isserman and Scott Spradlin talked me into playing Rock band with spoons for drum sticks, didn’t do too bad. LOL

April 25, 2009 – NWACodeCamp – awesome job! Especially for their first event! “Presented Building Powerful WebParts with SharePoint 2007”.

May 28, 2009 – Baby # 5 – Kadison Zoey-Mae Walker born, thanks to my beautiful wife!

 Kadison Zoey-Mae Walker, born March 28, 2009

June 1, 2009 – Two year term as Vice President of the INETA NORAM Speakers Bureau ended.

June 22, 2009 – 1st day at Microsoft as a ADC (Application Developer Consultant) – in Dallas at Las Colinas office for New Employee Orientation, after hours – attended DFW SharePoint group that night and saw Ted Pattison!

June 23, 2009 – Day 2 at Microsoft, after hours – attended Dallas ASP .NET User Group where Dr. Tobias Komischke, Director of User Experience @ Infragistics presented.

June 29, 2009 – Turned over Tulsa Developers .NET user group to the very capable Vice-President Sean Whitesell and the other groups to their respective leaders as well.

July 2, 2009 – My beautiful bride and I celebrated our 15th wedding anniversary

July 27-31, 2009 – TechReady 9 in Seattle. I thought the MVP Summit was huge. Wow. Amazing time, learned a lot, and met a lot of new people. Plus, folks I haven’t seen in awhile – Zewei Song, Michael Wiley, Steve Walker.. and lots of new friends!

Okay.. whew. There’s a whole lot more in there as well, between the monthly TulsaDevelopers.NET, Tulsa SQL Server Group, Tulsa SharePoint Interest Group and Tulsa Java Developers Group that I was involved with every month until recently due to my commute and some new NWASQL Server User Group meetings at lunch. But, my “quick” update has turned into a lot more.

Now… finally on to the code!

For those of you that haven’t seen my “Building Powerful WebParts for SharePoint 2007” session, I totally love writing code and utilizing SharePoint as an application development platform. But, it took several years and practically hundreds of contacts to find a hosting company able and generous enough to donate/sponsor a virtual server for the TulsaTechFest.com web site and for the Tulsa User Groups I am involved with.

Due to timing, I had to build out the site last year so quickly that I took the opportunity to explore the functionality of SharePoint Designer 2007 for the first time.

I utilized it to enable friendly url’s in SharePoint (can anyone say /Pages)? yuck!

I copied the 2008 content as a Site Template to kick start the 2009 site. But that left a lot of extra data, so I just recently added an “Active” Yes/No checkbox to the Speakers List. That’s one thing I’ve learned over the last 4 years of running large events, the agenda is bound to change up to the last minute.

Starting with Visual Studio 2008, it offered the excellent ability to debug XSLT! I took advantage of that, to deliver a no-code solution for the Event Management, by parsing the SharePoint List RSS feed utilizing XSLT. The default RSS feed is kind of gnarly to work with, but I’ve managed to work around it. (See my WSS_LIST_RSS_FIELDS.xsl distributed as part of my PowerQueryWebPart CodePlex project for a great reusable parser.)

Ironically, when I first added the Active filter to the xsl:for-each statement the xsl:sort quit sorting by the SortOrder number column. Very strange. Open in Visual Studio 2010 Beta 1, same results. Sleep on it. Deploy today, so I could share with the world and get some others input and boom – it works!

For some reason Visual Studio 2008 isn’t showing the Debug XSLT option every so often. Visual Studio 2010 Beta 1 is showing it with no issues. Reopened it and reran the Debug XSLT option and boom – working every time now. Very strange. I’ll chalk both issues up to Visual Studio 2010 Beta 1 testing. All working great now.

So, simply create a Speakers list with the following columns: Title (FirstName LastName), Bio, Link, Company, Tagline, SortOrder (Number), Active (Yes/No) and you’re ready to role!

I have a SiteImages Picture Library with a sub folder called Speakers where the images are stored: Title(spaces replaced with __).jpg.

The following XSLT shows a 3 column right rail for speakers filtered by Active flag, sorted by SortOrder, Title

<xsl:transform  version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
                exclude-result-prefixes="xsl xs" xmlns:ddwrt2="urn:frontpage:internal">
    <xsl:output method="html"/>

    <xsl:template match="rss/channel" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime">
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    <xsl:for-each select="item[substring-before(substring-after(description, 'Active:&lt;/b&gt;'), '&lt;/div&gt;')=' Yes']">
                        <xsl:sort select="substring-before(substring-after(description, ‘SortOrder:&lt;/b&gt;’), ‘&lt;/div&gt;’)" data-type="number" order="ascending"/>
                        <xsl:sort select="title" />

                        <!–                        <xsl:if test="substring-before(substring-after(description, ‘Active:&lt;/b&gt;’), ‘&lt;/div&gt;’)=’ Yes’">–>
                            <a>
                                <xsl:attribute name="href">
                                    <!–
                  <xsl:call-template name="getWSSDescriptionField">
                    <xsl:with-param name="description" select="description"/>
                    <xsl:with-param name="fieldName" select="’Link’"/>
                  </xsl:call-template>
                  –>
                                    <xsl:value-of select="concat(concat(‘/Tulsa/2009/Speakers/’, translate(title, ‘ ,.’,”)), ‘/’)"/>
                                </xsl:attribute>
                                <img border="1" style="border-color: black;" hspace="3" vspace="3" width="46" height="60">
                                    <xsl:attribute name="src">
                                        <xsl:text>/Tulsa/2009/SiteImages/Speakers/</xsl:text>
                                        <xsl:value-of select ="translate(title,’ ,.’,’_’)"/>
                                        <xsl:text>.jpg</xsl:text>
                                    </xsl:attribute >
                                    <xsl:attribute name="alt">
                                        <xsl:value-of select="title"/>
                                        <xsl:variable name="tagline">
                                            <xsl:call-template name="getWSSDescriptionField">
                                                <xsl:with-param name="description" select="description"/>
                                                <xsl:with-param name="fieldName" select="’Tagline’"/>
                                            </xsl:call-template>
                                        </xsl:variable>
                                        <xsl:if test="$tagline!=”">
                                            <xsl:text>, </xsl:text>
                                            <xsl:value-of select="$tagline"/>
                                        </xsl:if>
                                        <xsl:variable name="company">
                                            <xsl:call-template name="getWSSDescriptionField">
                                                <xsl:with-param name="description" select="description"/>
                                                <xsl:with-param name="fieldName" select="’Company’"/>
                                            </xsl:call-template>
                                        </xsl:variable>
                                        <xsl:if test="$company!=”">
                                            <xsl:text>, </xsl:text>
                                            <xsl:value-of select="$company"/>
                                        </xsl:if>
                                    </xsl:attribute>
                                </img>
                            </a>
                            <xsl:if test="position() mod 3 = 0">
                                <br/>
                            </xsl:if>
<!–                        </xsl:if>–>
                    </xsl:for-each>
                </td>
            </tr>
        </table>
    </xsl:template>

    <xsl:template name="string-replace-all">
        <xsl:param name="text"/>
        <xsl:param name="replace"/>
        <xsl:param name="with"/>
        <xsl:choose>
            <xsl:when test="contains($text, $replace)">
                <xsl:value-of select="substring-before($text, $replace)"/>
                <xsl:value-of select="$with"/>
                <xsl:call-template name="string-replace-all">
                    <xsl:with-param name="text" select="substring-after($text, $replace)"/>
                    <xsl:with-param name="replace" select="$replace"/>
                    <xsl:with-param name="with" select="$with"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$text"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template name="getWSSDescriptionField">
        <xsl:param name="description"/>
        <xsl:param name="fieldName"/>

        <xsl:variable name="before" select="concat($fieldName,':&lt;/b&gt; ‘)" />
        <xsl:variable name="after" select ="’&lt;/div&gt;’" />
        <xsl:variable name="htmlFieldStart" select="’&lt;div class=ExternalClass’" />

        <xsl:variable name = "leftRemoved" >
            <xsl:value-of disable-output-escaping="yes" select="substring-after($description,$before)"/>
        </xsl:variable>
        <xsl:variable name = "results">
            <xsl:value-of disable-output-escaping="yes" select="substring-before($leftRemoved,$after)" />
        </xsl:variable>

        <!– HTML fields have extra <div>–>
        <xsl:choose>
            <xsl:when test="starts-with($results, $htmlFieldStart)">
                <xsl:value-of disable-output-escaping="yes" select="substring-after($results,’&gt;’)" />
            </xsl:when >
            <xsl:otherwise>
                <xsl:choose>
                    <xsl:when test="contains($results, ‘&amp;amp’)">
                        <xsl:call-template name="string-replace-all">
                            <xsl:with-param name="text" select="$results"/>
                            <xsl:with-param name="replace" select="’&amp;amp;’"/>
                            <xsl:with-param name="with" select="’&amp;’"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of disable-output-escaping="yes" select="$results"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:transform>

I’ll continue explaining more of the other sections of the site, plans for the future and more in upcoming posts!

I definitely don’t claim to be an XSLT expert. I’ve just managed to keep making it do what I need as I need to over the years. It is an excellent way to build functionality into SharePoint with no-code out of the box web parts.

Let me know if you have any questions and/or suggestions for improvements!


Get Your Head In the Clouds with SQL Server Data Services Presentation

Yesterday I had the great privilege of presenting to the Oklahoma Chapter of the IAMCP (International Association of Microsoft Certified Partners). This was the first time in a few years that I presented to a mostly non-developer audience. I really enjoyed the challenge and hope to have the opportunity to do that more frequently. It is much more challenging, since you have to actually explain something without really being able to dive into code and show exactly what your talking about.

Since SQL Data Services along with the rest of the Windows Azure framework is still in beta, I tried to make the session as interactive as possible with Q & A, Open Discussion, etc.

Here are the slides that I used: zip (2.4 mb – Office 2007/pptx).

I grabbed them from our awesome Microsoft Developer Evangelist Zain Naboulsi, who presented VS2008 Debugging, Mobile and Azure back on Jan 30th.

Since he was covering so much and pressed for time, he didn’t get to cover SQL Data Services much. On top of that, it was just two days earlier on Jan 28th that Microsoft actually released the beta for SQL Data Services SDK.

Of course, as I left the meeting, I received the announcement in my mailbox that Microsoft just pushed a new version of Azure SDK:

I’ll be delivering the same slides, but with a LOT more code demonstrations on March 28th, 2009 at the second annual School of Dev event! This year for the first time it is joining forces with the first annual SharePoint Saturday Tulsa event, where I’ll be giving the presentation that I have been more frequently doing for awhile now: Building Powerful WebParts for SharePoint 2007. With all the speakers and topics, you wont want to miss this event! See you there!



Source: ASPAdvice Blog