<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" gd:etag="W/&quot;D0IHRn4-fip7ImA9WxNVFkg.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262</id><updated>2009-10-27T09:58:57.056-05:00</updated><title>Simply a programmer</title><subtitle type="html">A software development blog by Tim Jones</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>29.755578</geo:lat><geo:long>-95.365319</geo:long><logo>http://pages.simplyaprogrammer.com/feedicon16.png</logo><link rel="self" href="http://feeds.feedburner.com/simplyaprogrammer" type="application/atom+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">simplyaprogrammer</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;Ak8CRHozfCp7ImA9WxNVEk8.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-5457318724141486030</id><published>2009-10-22T11:26:00.001-05:00</published><updated>2009-10-22T11:27:45.484-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T11:27:45.484-05:00</app:edited><title>SharePoint 2009 Conference - Session highlights from Rafael</title><content type="html">Rafael is at yet another &lt;a href="http://www.mssharepointconference.com/Pages/default.aspx"&gt;SharePoint conference&lt;/a&gt; without me (again!).  One of these days I'll make time to go to more of these (which means &gt; 0 times). 

He's posted so many session highlights that I decided to link to his &lt;a href="http://blog.rafelo.com/2009_10_01_archive.html"&gt;October archive&lt;/a&gt; page on his blog.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-5457318724141486030?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/simplyaprogrammer?a=nCbfgxB2qVQ:pz2YNlEQyrU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/simplyaprogrammer?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/simplyaprogrammer?a=nCbfgxB2qVQ:pz2YNlEQyrU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/simplyaprogrammer?i=nCbfgxB2qVQ:pz2YNlEQyrU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/simplyaprogrammer?a=nCbfgxB2qVQ:pz2YNlEQyrU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/simplyaprogrammer?i=nCbfgxB2qVQ:pz2YNlEQyrU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/simplyaprogrammer?a=nCbfgxB2qVQ:pz2YNlEQyrU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/simplyaprogrammer?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/simplyaprogrammer?a=nCbfgxB2qVQ:pz2YNlEQyrU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/simplyaprogrammer?i=nCbfgxB2qVQ:pz2YNlEQyrU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/nCbfgxB2qVQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/5457318724141486030/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2009/10/sharepoint-2009-conference-session.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/5457318724141486030?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/5457318724141486030?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2009/10/sharepoint-2009-conference-session.html" title="SharePoint 2009 Conference - Session highlights from Rafael" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;Dk8HRX0yfip7ImA9WxdaGUo.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-4243576803478370915</id><published>2008-08-27T22:14:00.003-05:00</published><updated>2008-08-28T20:53:54.396-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-28T20:53:54.396-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>Using SharePoint for Extranets</title><content type="html">&lt;p&gt;&lt;a title="Using SharePoint for Extranets in Windows IT Pro Magazine" href="http://windowsitpro.com/articles/articleid/99650/Using_SharePoint_for_Extranets.html"&gt;&lt;img style="border-width: 0px; margin: 0px 15px 0px 0px;" alt="Using SharePoint for Extranets in Windows IT Pro magazine" src="http://lh3.ggpht.com/pictures.jones.family/SLYYGzthwcI/AAAAAAAAAF4/iuxQOHYqOGk/Using%20SharePoint%20for%20Extranets%20-%20Sept%202008%20-%20Windows%20IT%20Pro%5B6%5D.jpg?imgmax=800" width="193" align="left" border="0" height="260" /&gt;&lt;/a&gt; My article, &lt;a title="Using SharePoint for Extranets in Windows IT Pro" href="http://windowsitpro.com/articles/articleid/99650/Using_SharePoint_for_Extranets.html"&gt;Using SharePoint for Extranets&lt;/a&gt;, was just published in the September issue of Windows IT Pro magazine.  In my &lt;a title="Importing files into a SharePoint document library using regular expressions and WebDAV" href="http://simplyaprogrammer.com/2008/05/importing-files-into-sharepoint.html"&gt;post&lt;/a&gt; about importing files into SharePoint, I hinted that I had replaced a custom extranet with a WSS 3.0 extranet. This article is a brief summary of what I learned about configuring SharePoint as an extranet platform during that project.
&lt;/p&gt;&lt;p&gt;Only after this experience did I decide that something needed to be written about this subject.  Specifically, I spend quite a bit of time advocating zone address consisentcy (having 2 or more authentication zones use the same site address).  I was a bit disappointed that SharePoint ignored IIS's IP address binding feature, which makes collaboration much easier when multiple zones are used, or when SSL is needed (especially for extranets).
&lt;/p&gt;  &lt;p&gt;It's brief because it had to be.  As you would be able to tell by reading some of my posts, I lean towards using more words than less to get my points across.  When I first submitted the article to them, it was over 4000 words.  I had to delete 1500 words to fulfill the article submission requirements. Of course this almost required a complete rewrite, and it's most likely the reason that the online edition of the article contains an extra sidebar and 2 graphics that wouldn't fit in the printed edition.&lt;/p&gt;  &lt;p&gt;The gracious editorial staff (thanks Gayle!) over at Windows IT Pro agreed to allow the public access to the online edition of the article for about 2 weeks so I can share it with you.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f8602cff-33da-48ad-95bd-96f424f887f4" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Extranet" rel="tag"&gt;Extranet&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-4243576803478370915?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=Sr5N7Egb"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=igMe58Ow"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=igMe58Ow" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=7QyORmgw"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=7QyORmgw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=Gzwfqoxi"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=gEFU0Rwu"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=gEFU0Rwu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/VufkheIm9Ao" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/4243576803478370915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/08/using-sharepoint-for-extranets.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/4243576803478370915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/4243576803478370915?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/08/using-sharepoint-for-extranets.html" title="Using SharePoint for Extranets" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkACQng-fSp7ImA9WxRWEU4.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-3077757271628760727</id><published>2008-08-24T22:36:00.007-05:00</published><updated>2008-10-27T13:06:03.655-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-27T13:06:03.655-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentation" /><title>Integrating LexisNexis InterAction with Portals</title><content type="html">&lt;p align="left"&gt;&lt;a title="Download the white paper Integrating LexisNexis InterAction with Portals" onclick="javascript: pageTracker._trackPageview('/downloads/interactionwithportals');" href="http://pages.simplyaprogrammer.com/IntegratingInterActionWithPortals.pdf"&gt;Printer and reader-friendly version&lt;/a&gt;&lt;br /&gt;    
&lt;a title="Jump to the slide deck" href="#SlideDeck"&gt;Slide deck&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This white paper discusses how to integrate the LexisNexis InterAction CRM into a Web-based portal alongside data from other systems. The reason for this paper’s existence is my presentation at the 2008 International Legal Technology Association (ILTA) conference. I was one of 3 panelists for the session titled “InterAction - A Different Perspective Using Your Firm’s Portal”. &lt;/p&gt;  &lt;p&gt;This paper and my presentation answers the How question, assuming that you already know about the What (InterAction) and the Why (the value gained by contextualizing business entity information in a portal). In order to best answer the How question, I’ve broken down the process into 3 steps: prepare, design and build. Specifically, I’m referring to preparing the integration, designing the presentation and building the solution.&lt;/p&gt;  &lt;h4&gt;Prepare the Integration&lt;/h4&gt;  &lt;p&gt;Before we can discuss how to integrate InterAction into a portal, we need to know some background information. First, we need to know what portals are and what integration is.&lt;/p&gt;  &lt;h5&gt;Portals&lt;/h5&gt;  &lt;p&gt;Originally, portals were simply entryways, such as doors or gates. Recently, information technologists have used the word to indicate a digital entry point for multiple information sources. Portals exist on a variety of platforms, but the ones most popular today are web sites. The popularity of portals has exploded recently because of their ability to present data from diverse sources in a unified, yet customized, way. Instead of requiring the user to access each data source individually, a portal can surface all of them on a single page, allowing a dashboard-type overview. Portals are typically centered on a topic or entity of importance. For example, portals can currently be located that bring together information related to news, sports and fitness. For public portals such as Yahoo or iGoogle, the entity is you. &lt;/p&gt;  &lt;p&gt;As an example, imagine an enterprise portal site within your organization that, instead of displaying information customized to a user, displays information about one of your clients. A client’s documents from your document management system might be displayed alongside their contacts from your contact relationship manager (CRM) and revenue information from your billing system. In order to present a page with all of this information, a portal needs to be intelligent enough to inquire about this client from each system one at time. This information is then gathered and displayed on the screen in its assigned locations. The portal is able to do this only because it knows how to ask each system for the right data. And the reason it knows how to ask is because these systems are related to each other, or integrated in some way. &lt;/p&gt;  &lt;h5&gt;Integration&lt;/h5&gt;  &lt;p&gt;Systems integration could be explained as relationships between systems. Systems can integrate with one another only after they share something in common. This common information is usually in the form of entities, such as people, companies or projects. For example, a billing system contains the client name and its billing contact information. The CRM also contains this information about the client. In order to make these systems talk, a translation needs to be created in order to map one entity to another. This mapping information is usually stored in one of the systems, but it’s possible to also store it externally in an independent system.&lt;/p&gt;  &lt;h6&gt;Unique Identifiers&lt;/h6&gt;  &lt;p&gt;Within each system, data structures are usually in place to easily manage entity data. For example, in a billing system’s database, instead of copying a client’s name into every corner of the system related to a client, a unique identification (ID) number is created for the client and referenced. The use of an ID allows updated information to be shown across the entire system whenever a change is made to an entity’s data. &lt;/p&gt;  &lt;p&gt;Using a unique ID is not merely for convenience or to save disk space, however. Use my name, for example: Tim Jones. My name is very common. Therefore, the chances of finding another person with the name Tim Jones are higher than normal. If a portal were to ask the billing system, “Show me all the invoices for Tim Jones”, it might reply with “Which Tim Jones? I have 3 clients with that name.” In this case, it’s very important that the portal knows which Tim Jones it needs. It not only needs to know my name, but it most likely needs to ask for my information by my ID. Since the portal needs to get the ID from somewhere first, we need to decide where to store the IDs and their corresponding entity mappings.&lt;/p&gt;  &lt;h6&gt;Integrating with InterAction&lt;/h6&gt;  &lt;p&gt;InterAction has been designed with systems integration in mind. Besides single and multi-value user-defined fields (InterAction refers to them as Additional Fields), InterAction includes an EAI (Enterprise Application Integration) component called Application Collaboration (AC). AC abstracts InterAction’s data model to make it easy to load data from other systems. AC can import new information and keep existing entity relationship data clean and current, making it the obvious alternative to manual data entry.&lt;/p&gt;  &lt;p&gt;Given its focus on integration, InterAction makes a compelling case for the storage of entity relationship data for other systems. In addition, InterAction offers several options for portal integration. Sometimes the amount of entity data needed from a specific system is very minimal, in which case it may be ideal to import this information entirely into InterAction. This would simplify the portal by reducing the number of systems that need to be queried and also increase performance of page loading.&lt;/p&gt;  &lt;p&gt;InterAction is the system most likely to be maintained by a team of stewards within a firm. There will be times when integration data issues arise, requiring human intervention. If you’ve chosen to use InterAction for integration, you would already have resources available to keep the integration running smoothly.&lt;/p&gt;  &lt;h4&gt;Design the Presentation&lt;/h4&gt;  &lt;p&gt;To design the presentation of InterAction data in your portal, you’ll first need to choose a data retrieval option. After the data retrieval option is chosen, you’ll need to choose a presentation method.&lt;/p&gt;  &lt;h5&gt;Choose a Retrieval Option&lt;/h5&gt;  &lt;p&gt;InterAction offers an above average amount of options for retrieving data, but since we’re dealing with portals, we’re only interested in those options that are Web-based (server side), or at least Web-friendly. To best design the presentation of InterAction data, we’ll need to know what these options are, then determine which combination of them will best accomplish our needs. InterAction includes 4 different server-side options for data retrieval. They are presented here in chronological order.&lt;/p&gt;  &lt;h6&gt;Database Query&lt;/h6&gt;  &lt;p&gt;The first and oldest retrieval option is to write a query directly against the InterAction database. This option has been available for the life of the product. Developers familiar with SQL will have no problems writing reports and reverse engineering InterAction’s data model. However, the database model is very complicated and might change after an upgrade, breaking existing queries. If you choose this option, also be aware that you are bypassing InterAction's security model. Because of these reasons and the obvious risk of messing something up, InterAction does not recommend it. As of 5.5, InterAction only supports the Microsoft SQL Server database management system.&lt;/p&gt;  &lt;h6&gt;InterAction Web Client&lt;/h6&gt;  &lt;p&gt;The InterAction web client has been available since version 4.x. Significant enhancements were made in version 5.0, including custom search forms. Displaying data directly from the web client should be considered an option since it’s already a server side solution. If the standard views in the web client do not show the needed information, minor customizations can be made. However, InterAction doesn’t recommend this since customizations are typically lost during an upgrade. Customization involves manipulating objects called nuggets, and requires knowledge of HTML and XML.&lt;/p&gt;  &lt;h6&gt;InterAction XML Methods&lt;/h6&gt;  &lt;p&gt;The recommended server-side data retrieval method is to use XML methods hosted on the InterAction application server. XML methods have been available since InterAction 4.x, and function like an Application Programming Interface (API). XML methods not only retrieve data, but also have the capability of updating it as well. XML methods are called by requesting a URL with the method name and its required parameters. The output of the method is XML text. The InterAction web client contains a list of available methods and documentation. &lt;/p&gt;  &lt;p&gt;Extensible Markup Language, or XML, is data that describes itself. Unlike HTML, the markup language used for web sites, XML is not restricted to a predefined set of elements. It was designed to be a universal data format that all systems could understand. Even though XML has been around for 10 years, blogs and other news outlets syndicating information using XML in recent years have caused its popularity to increase rapidly. Even Microsoft has decided to change the Office suite’s native file formats to XML instead of the previous binary formats as of Office 2007. Later on in Appendix A, you can see an example of XML in use by InterAction.&lt;/p&gt;  &lt;h6&gt;SQL Server Reporting Services&lt;/h6&gt;  &lt;p&gt;As of version 5.5, SQL Server Reporting Services (SSRS) is integrated into InterAction’s reporting module. Since SSRS is web-based, this becomes another option to consider. This is by far the most user-friendly server-side method of extracting data from InterAction, and also extremely versatile. SSRS introduces several useful features such as aggregates, grouping, caching and charting. Furthermore, SSRS also supports 3&lt;sup&gt;rd&lt;/sup&gt; party controls to extend functionality, such as more advanced contextual charting. Even though SSRS contains “SQL” in its name, this option only requires knowledge of basic report writing. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;    
&lt;/b&gt;&lt;/p&gt;  &lt;h6&gt;Summary&lt;/h6&gt;  &lt;p&gt;Remember, your needs may require you to use a combination of these options. If the data you need from InterAction is not accessible from an XML method or SQL report, you may be forced to write a database query. &lt;/p&gt;  &lt;p&gt;To make it easier to remember the retrieval options, Figure 1 summarizes them by plotting the implementation difficulty against InterAction's recommendations.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-width: 0px;" alt="InterAction data retrieval methods graph" src="http://lh3.ggpht.com/pictures.jones.family/SLIon89pM3I/AAAAAAAAAFw/a59ZzHwhSzs/IA_Retrieval_Methods_WherePlot5.png?imgmax=800" width="506" border="0" height="480" /&gt; &lt;/p&gt;  &lt;p&gt;Figure 1 InterAction Data Retrieval options by recommendation and difficulty&lt;/p&gt;  &lt;p&gt;&lt;b&gt;    
&lt;/b&gt;&lt;/p&gt;  &lt;h5&gt;Choose a Presentation Method&lt;/h5&gt;  &lt;p&gt;When choosing to display external data from a system into a web page, you usually have a couple options.&lt;/p&gt;  &lt;h6&gt;Custom Programming&lt;/h6&gt;  &lt;p&gt;Since portals are web sites, we need to take the output of a database query or a system’s API and convert it to HTML somehow. Web application frameworks such as ASP.NET exist to make this easier. However, even with the help of ASP.NET, XML is challenging to work with. Because of this, XSLT was created to transform XML into other forms, such as HTML. However, even if you use XSLT it still requires the services of a Web developer familiar with XML and HTML.&lt;/p&gt;  &lt;h6&gt;Screen Scraping&lt;/h6&gt;  &lt;p&gt;If the external data being integrated is already contained on a web site, you can use a method called screen scraping to embed that information into a portal. This method is sometimes used out of necessity, if the system being scraped doesn’t have an easy alternative method of exposing its data. For example, Google’s product search feature scrapes vendor web sites to determine pricing. It does this since a common API doesn’t exist (and most likely won’t exist anytime soon) between them.&lt;/p&gt;  &lt;h5&gt;Microsoft SharePoint&lt;/h5&gt;  &lt;p&gt;Microsoft SharePoint is a popular portal platform in use today by enterprises. If your firm plans on using SharePoint, you can take advantage of its built-in tools. A variety of ways exist within the SharePoint development ecosystem to implement custom programming on web pages. One of the popular choices is to use a component called a Web Part. Multiple Web Parts can be arranged on a single page to create any desired layout. The following list of SharePoint Web Parts could be used for integration purposes.&lt;/p&gt;  &lt;h6&gt;Page Viewer Web Part&lt;/h6&gt;  &lt;p&gt;The Page Viewer Web Part is used for simple screen scraping. Behind the scenes, it simply renders an iframe HTML element. This could be used to show portions of a custom web site, the InterAction Web Client or a SQL report. &lt;/p&gt;  &lt;p&gt;To best display SQL reports, you will want to hide the header and toolbars. In order to do this, you need to access the report from the reportserver path instead of the default reports path that shows the SQL Report Manager web site. The parameters you would use need to be hidden and the values passed in the address of the report. Finally, to hide the toolbar, add "&amp;amp;rc:toolbar=false" to the address of the report as well. The following is an example call to a parameterized SQL report that displays without any headers or toolbars. In this example, MatterNumber and MonthsHistory are hidden parameters.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;http://webserver/ReportServer?/Portal/MatterSummary&amp;amp;rs:Command=Render&amp;amp;rc:toolbar=False&amp;amp;MatterNumber=999999.999999&amp;amp;MonthsHistory=2&lt;/code&gt;&lt;/p&gt;  &lt;h6&gt;Content Editor Web Part&lt;/h6&gt;  &lt;p&gt;The Content Editor Web Part can also be used for screen scraping. It allows adding custom HTML fragments onto the page. If you need more control over the presentation of your iframe, you'd probably use this instead of a Page Viewer.&lt;/p&gt;  &lt;h6&gt;SQL Report Viewer Web Part&lt;/h6&gt;  &lt;p&gt;If you use SQL Reporting Services in SharePoint integrated mode and you've installed the Reporting Services Add-in for SharePoint Technologies, you can use the Report Viewer Web Part to display SQL reports. SharePoint integrated mode is only available for SQL Server 2005 SP2 and either Windows SharePoint Services (WSS) 3.0 or Microsoft Office SharePoint Server (MOSS) 2007. In an integration scenario, you're most likely going to need to pass parameters to the report. However, this Web Part will not allow you to pass parameters to the report and hide the toolbar at the same time. Because of this, you'll most likely be sticking to screen scraping with a Page Viewer.&lt;/p&gt;  &lt;h6&gt;XML Web Part&lt;/h6&gt;  &lt;p&gt;The XML Web Part transforms XML using XSLT. Its data source can be XML entered directly, or hardcoded, into the configuration, or a link to a Web page or file that returns XML. Likewise, the XSLT can also be hardcoded or linked. If you link to an external source for your XML or XSLT, make sure it is available to SharePoint’s application pool identity or by anonymous access. If you've configured SharePoint for Kerberos authentication, make sure the user has access to the path.&lt;/p&gt;  &lt;h6&gt;Data View Web Part&lt;/h6&gt;  &lt;p&gt;The Data View Web Part is only available through FrontPage 2003 (for WSS 2.0) or SharePoint Designer 2007 (for WSS 3.0). Data View supports a variety of data sources, such as database queries, XML, web services and SharePoint lists.&lt;/p&gt;  &lt;h6&gt;Business Data Catalog Web Parts&lt;/h6&gt;  &lt;p&gt;If you use MOSS 2007 Enterprise edition, you can use the Business Data Catalog (BDC) Web Parts to pull information from web services or databases. This would simply be an alternative to the Data View Web Part.&lt;/p&gt;  &lt;h6&gt;Custom Web Part&lt;/h6&gt;  &lt;p&gt;If you are not satisfied with the Web Parts shipped with SharePoint, you can either purchase one from a 3&lt;sup&gt;rd&lt;/sup&gt; party Web Part vendor or create your own. To create your own Web Part, you'll need a programmer familiar with .NET. Alternatively, if you already have Visual Studio you can create a user control using a visual designer. User controls cannot be used in SharePoint out of the box, so you'll need to download and install a free Web Part called SmartPart.&lt;/p&gt;  &lt;h6&gt;Other Custom Solutions&lt;/h6&gt;  &lt;p&gt;Since SharePoint is simply an ASP.NET application, it can accept other custom .NET controls besides Web Parts. It’s much easier to write a custom .NET control than a custom reusable Web Part. SharePoint also contains a capability called Application pages that allows custom server-side .NET coding and higher performance.&lt;/p&gt;  &lt;h4&gt;Build the Solution&lt;/h4&gt;  &lt;p&gt;This section outlines the steps necessary to present the output of an InterAction XML method within a Microsoft SharePoint portal. The data will be displayed by transforming XML into HTML using the XML Web Part.&lt;/p&gt;  &lt;h5&gt;Calling the XML Method&lt;/h5&gt;  &lt;p&gt;There are several ways to use InterAction XML methods depending on your environment and requirements. The following explanation describes one technique of calling XML methods from another web application. In this case, SharePoint is that web application.&lt;/p&gt;  &lt;h6&gt;Bypass default authentication&lt;/h6&gt;  &lt;p&gt;By default, XML web methods authenticate the caller using the same authentication (IIS authentication) as the web client. Unless you are using Kerberos delegation, SharePoint will be calling the XML method on the user's behalf. This breaks the normal single sign-on authentication used by InterAction. One alternative to this configuration is to give SharePoint's service account access to InterAction.&lt;/p&gt;  &lt;p&gt;In order to make XML methods easier to execute in these scenarios, InterAction has created an alternative authentication mechanism on a custom port, port 8100. Accessing an XML method over port 8100 instead of the default port 80 bypasses the default authentication.&lt;/p&gt;  &lt;p&gt;For example,   
   instead of using &lt;code&gt;http://webserver/interaction&lt;/code&gt;,    
   you would use &lt;code&gt;http://webserver:8100/interaction&lt;/code&gt;&lt;/p&gt;  &lt;h6&gt;URL authentication&lt;/h6&gt;  &lt;p&gt;If you choose to use port 8100 for your Web Parts, you will need to use parameters to authenticate. The two parameters needed are accountName and userPassword. InterAction will execute the XML method based on the privileges and security context associated with the user account supplied in the accountName parameter. &lt;/p&gt;  &lt;p&gt;If you would like to avoid hardcoding the password into the URL, you can also establish a trust relationship between InterAction and the portal server. To do this, add the SharePoint server's IP address to the trustedAddresses entry in InterAction.cfg and then restart InterAction services. In this configuration, you only need to provide the accountName parameter to tell InterAction which user context to execute under.&lt;/p&gt;  &lt;p&gt;Note: Trusting SharePoint might give too much power to users with designer privileges. Before trusting SharePoint, consider who has access to Web Parts that could exploit this trust.&lt;/p&gt;  &lt;h6&gt;Example XML Method Call&lt;/h6&gt;  &lt;p&gt;An example call the findContacts XML method is displayed below. This example retrieves the first (using maxResultCount) contact that bob has access to with last name Jones. Since the URL is missing the userPassword parameter, results will only be returned if the IP address making the request is trusted by InterAction.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;http://webserver:8100/interaction/findcontacts?accountname=bob&amp;amp;lastname=jones&amp;amp;maxresultcount=1&lt;/code&gt;&lt;/p&gt;  &lt;h5&gt;Creating the Web Part&lt;/h5&gt;  &lt;p&gt;To insert an XML Web Part, put any SharePoint page in Edit mode then add it from the list of available Web Parts. Insert the path to the InterAction XML method and add the parameters. Then, insert the XSLT into the Web Part. If you need to share this Web Part to multiple pages, you should consider placing the XSLT in a file and linking to it instead of embedding it. After clicking OK, the XSLT will be applied against the XML and the HTML output will be displayed on the screen. &lt;/p&gt;  &lt;p&gt;Appendix A contains an example XML output from the findcontacts method, XSLT to transform it into HTML, and the resulting HTML and screenshot of the output.&lt;/p&gt;  &lt;h4&gt;Conclusion&lt;/h4&gt;  &lt;p&gt;As of 2008, systems integration is still not an easy task. This paper intends to cover just enough material to grasp the majority of the issues involved with integrating InterAction into a portal. If you would prefer to hear this information presented, ILTA will be making an audio recording of my presentation available for download. &lt;/p&gt;  &lt;h3&gt;Appendix A&lt;/h3&gt;  &lt;p&gt;This section contains examples of XML and XSLT for InterAction XML Methods.&lt;/p&gt;  &lt;h4&gt;Sample XML&lt;/h4&gt;  &lt;h5&gt;Request URL for the findContacts method&lt;/h5&gt;  &lt;p&gt;&lt;code&gt;http://webserver:8100/interaction/findcontacts?useraccount=bob&amp;amp;userpassword=123&amp;amp;contactid=1231231234&amp;amp;includeadditionalfields=2/1231;2/1232;2/1233&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;    
&lt;/b&gt;&lt;/p&gt;  &lt;h5&gt;XML results&lt;/h5&gt;  &lt;div    style="border: 1px dashed black; background: white none repeat scroll 0% 50%; padding-left: 20px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-bottom: 15px; padding-bottom: 20px;font-family:lucida console;font-size:9pt;color:black;"&gt;   &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;standalone&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;yes&lt;/span&gt;"&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;methodResponse&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;methodname&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;findcontacts&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;methodname&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;requestId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;73203&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;requestId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;errorCode&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;errorCode&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;errorText&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;processingTime&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;00:00:03.234&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;processingTime&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;results&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultCode&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;0&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultCode&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultText&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultCount&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultCount&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;totalResultCount&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;totalResultCount&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;result&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactClass&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;IAL&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactClass&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231234&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;IAContactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231234&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;IAContactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactState&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;4&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactState&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactStateSortOrder&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;3&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactStateSortOrder&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactStateToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;My Contact and Firm Contact&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactStateToolTip&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;person&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;contactType&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;displayName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Jones, Tim&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;displayName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;department&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Information Technology&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;department&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;office&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Houston&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;office&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;changeDate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;2007-05-02 09:37:49.547&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;changeDate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;inMyFolder&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;inMyFolder&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;isPrivate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;false&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;isPrivate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;sourceFolderId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;12884901886&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;sourceFolderId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;salutation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Mr.&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;salutation&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;firstName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Tim&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;firstName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;lastName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Jones&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;lastName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;commonName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Tim&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;commonName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;fullName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Tim Jones&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;fullName&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;jobTitle&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Web Developer&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;jobTitle&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ape&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;electronicAddress&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;E-mail&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;typeId&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;relationship&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;Business&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;relationshipId&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;electronicAddressId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231234&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;electronicAddressId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Office&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;description&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;formattedElectronicAddress&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;tim.jones@company.com&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;formattedElectronicAddress&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;isGlobal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;true&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;isGlobal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;owningContactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231234&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;owningContactId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;electronicAddress&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ape&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalFields&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231231&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Building Floor&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;23&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231233&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Map URL&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;http://officemaps/HOU23.aspx?Mylbl=lbl23123&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;        &lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;1231231232&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;definitionId&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;EmpPicture&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;http://portal/photos/timjones.jpg&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalField&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;additionalFields&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;result&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;results&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultBytes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;3657&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;resultBytes&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;methodResponse&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h6&gt;&lt;/h6&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h4&gt;Sample XSLT for the findContacts method&lt;/h4&gt;

&lt;div    style="border: 1px dashed black; background: white none repeat scroll 0% 50%; padding-left: 20px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-bottom: 15px; padding-bottom: 20px;font-family:lucida console;font-size:9pt;color:black;"&gt;
 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;encoding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;UTF-8&lt;/span&gt;"&lt;span style="color:blue;"&gt; ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;version&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;'&lt;span style="color:blue;"&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;'&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;match&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:choose&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:when&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;test&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/methodResponse/results/resultCount != '1'&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;strong&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Couldn't find this contact ID in InterAction&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;strong&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:when&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:apply-templates&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/methodResponse/results/result&lt;/span&gt;"&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:otherwise&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:choose&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;match&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/methodResponse/results/result&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;cellpadding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;cellspacing&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;           &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;border: 1px solid gray; background-color:#EEEEEE&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;valign&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;top&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;rowspan&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;img&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;border:1px solid gray;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;src&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;additionalFields/additionalField[3]/value&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;img&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;valign&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;top&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;font-size:2.0em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;fullName&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;font-size:1.2em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;jobTitle&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;department&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;office&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt; Office&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;            Floor:&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;_blank&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;text-decoration:underline&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;href&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;additionalFields/additionalField[2]/value&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;              &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;additionalFields/additionalField[1]/value&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:if&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;test&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;string-length(assistantName) &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;amp;gt;&lt;/span&gt;&lt;span style="color:blue;"&gt; 0&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;font-size:1.2em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;              &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;Assistant &lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;assistantName&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:if&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;vertical-align:bottom;text-align:right;font-size:1em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;text-decoration:none&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;href&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;              mailto:&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:value-of&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &lt;/span&gt;&lt;span style="color:red;"&gt;select&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;ape/electronicAddress[@type='E-mail' and @relationship='Business']/formattedElectronicAddress&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:attribute&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;img&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;align&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;absmiddle&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/_layouts/images/EML16.gif&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt; Send email&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;          &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;      &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:template&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt; &lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h4&gt;Output&lt;/h4&gt;

&lt;h5&gt;Screenshot&lt;/h5&gt;

&lt;p&gt; &lt;img style="border-width: 0px;" alt="Output Screenshot" src="http://lh4.ggpht.com/pictures.jones.family/SLIoqV1AOfI/AAAAAAAAAF0/yPsNPiRicKg/SampleOutputHTML5.png?imgmax=800" width="372" border="0" height="273" /&gt; &lt;/p&gt;

&lt;h5&gt;HTML&lt;/h5&gt;

&lt;div    style="border: 1px dashed black; background: white none repeat scroll 0% 50%; padding-left: 20px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-bottom: 15px; padding-bottom: 20px;font-family:lucida console;font-size:9pt;color:black;"&gt;
 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;cellpadding&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;cellspacing&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;4&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;border: 1px solid gray;background-color: #EEEEEE&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;valign&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;top&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;rowspan&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;2&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;img&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;border: 1px solid gray;&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;                &lt;/span&gt;&lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://portal/photos/timjones.jpg&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;valign&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;top&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;font-size: 2.0em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Tim Jones&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;font-size: 1.2em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Web Developer&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Information Technology&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Houston Office&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;br&lt;/span&gt;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Floor: &lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;target&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;_blank&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;text-decoration: underline&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;                &lt;/span&gt;&lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;http://officemaps/HOU23.aspx?Mylbl=lbl23123&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;23&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;vertical-align: bottom; text-align: right; font-size: 1em;&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;text-decoration: none&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;mailto:tim.jones@company.com&lt;/span&gt;"&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;img&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;align&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;absmiddle&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;border&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;0&lt;/span&gt;"&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;"&lt;span style="color:blue;"&gt;/_layouts/images/EML16.gif&lt;/span&gt;"&lt;span style="color:blue;"&gt; /&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;                Send email &lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;td&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;    &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;tr&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

 &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;table&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt; &lt;/h3&gt;

&lt;h3&gt;&lt;a name="SlideDeck"&gt;Slide Deck&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Below are the slides from my presentation.  As soon as the audio mp3 is made available I'll upgrade this to a slidecast.&lt;/p&gt;

&lt;div id="__ss_566398" style="width: 425px; text-align: left;"&gt;&lt;a title="Integrating LexisNexis InterAction with Portals" style="margin: 12px 0px 3px; display: block; font-family: helvetica,arial,sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; text-decoration: underline;" href="http://www.slideshare.net/simplyaprogrammer/integrating-lexisnexis-interaction-with-portals-presentation?src=embed"&gt;Integrating LexisNexis InterAction with Portals&lt;/a&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=ia-and-portals-tim-jones-1219505932160671-8&amp;amp;stripped_title=integrating-lexisnexis-interaction-with-portals-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;

 &lt;div style="font-size: 11px; padding-top: 2px; font-family: tahoma,arial; height: 26px;"&gt;View SlideShare &lt;a title="View Integrating LexisNexis InterAction with Portals on SlideShare" style="text-decoration: underline;" href="http://www.slideshare.net/simplyaprogrammer/integrating-lexisnexis-interaction-with-portals-presentation?src=embed"&gt;presentation&lt;/a&gt; or &lt;a style="text-decoration: underline;" href="http://www.slideshare.net/upload?src=embed"&gt;Upload&lt;/a&gt; your own. (tags: &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/2008"&gt;2008&lt;/a&gt; &lt;a style="text-decoration: underline;" href="http://slideshare.net/tag/ilta"&gt;ilta&lt;/a&gt;)&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f83285ea-f13c-4a2f-8188-42ee98173a08" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/LexisNexis%20InterAction" rel="tag"&gt;LexisNexis InterAction&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Portal" rel="tag"&gt;Portal&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Systems%20Integration" rel="tag"&gt;Systems Integration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%20Development" rel="tag"&gt;Web Development&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XSLT" rel="tag"&gt;XSLT&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ILTA" rel="tag"&gt;ILTA&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-3077757271628760727?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=4VagNXnm"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=naUdMbQh"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=naUdMbQh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=o88jr3I0"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=o88jr3I0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=dG04i0Ci"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=JNpVfNmX"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=JNpVfNmX" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/K9srlHnb_OQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/3077757271628760727/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/08/integrating-lexisnexis-interaction-with.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/3077757271628760727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/3077757271628760727?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/08/integrating-lexisnexis-interaction-with.html" title="Integrating LexisNexis InterAction with Portals" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;Dk4ASX0-fip7ImA9WxdbFUQ.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-8368084147026421816</id><published>2008-08-12T21:22:00.005-05:00</published><updated>2008-08-12T21:35:48.356-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-12T21:35:48.356-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Presentation" /><title>The presentation of technical content</title><content type="html">&lt;p&gt;My right brain is sore, but I'm told that means it's working. &lt;/p&gt;  &lt;p&gt;If you are called upon to present technical content, and aren't sure of the best way to go about doing it, this lengthy blog post will hopefully save you hours of research and inspiration-searching. If you'd prefer to skip all the background information, feel free to jump to the &lt;a title="Top 3 things I learned about presentations" href="#top3"&gt;top 3 things I learned&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;My history with technical presentations&lt;/h4&gt;  &lt;p&gt;&lt;a title="Beyond Bullet Points on Amazon" href="http://www.amazon.com/Beyond-Bullet-Points-PowerPoint%C2%AE-Presentations/dp/0735623872/simplyaprogra-20"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51BZ5z5AQfL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg" align="right" width="200" height="200" /&gt;&lt;/a&gt;I've sat through many software development-related presentations over the years, and have even given a handful to small audiences. However, I've never given a presentation at anything like a conference before. That's about to change in a couple weeks however, when I'll be &lt;a title="InterAction - A Different Perspective Using Your Firm's Portal" href="http://conference.iltanet.org/PersonifyEbusiness/Default.aspx?tabid=157&amp;amp;productid=85"&gt;speaking&lt;/a&gt; about portals, systems integration and web development at the 2008 &lt;a title="International Legal Technology Association" href="http://www.iltanet.org/"&gt;ILTA&lt;/a&gt; &lt;a title="ILTA educational conference" href="http://conference.iltanet.org/"&gt;conference&lt;/a&gt;.  In preparation, I decided to throw out what little knowledge I had about how to create a good presentation and started researching the topic. &lt;/p&gt;  &lt;p&gt;I was at the 2005 Microsoft &lt;a title="Patterns and Practices Summit" href="http://www.pnpsummit.com/"&gt;Patterns and Practices Summit&lt;/a&gt; and saw &lt;a title="Harry Pierson's blog" href="http://devhawk.net/"&gt;Harry Pierson's&lt;/a&gt; architecture presentation.  His presentation seemed a lot simpler than all the others since it lacked a page full of bullet points. During the presentation he mentioned that he was trying out a new presentation approach he had recently read about in &lt;a title="Cliff Atkinson's web site" href="http://www.beyondbulletpoints.com/"&gt;Cliff Atkinson's&lt;/a&gt; book &lt;a title="Beyond Bullet Points on Amazon.com" href="http://www.amazon.com/Beyond-Bullet-Points-PowerPoint%C2%AE-Presentations/dp/0735623872/simplyaprogra-20"&gt;Beyond Bullet Points&lt;/a&gt; (BBP).  I didn't run out and buy the book back then, but I did get an idea about the concept from the free material available through Cliff's &lt;a title="Microsoft on-demand webcasts presented by Cliff Atkinson" href="http://msevents.microsoft.com/cui/SearchDisplay.aspx?culture=en-US#culture=en-US;eventType=3;sortKey=;sortOrder=;pageEvent=false;hdnInitialCount=;searchcontrol=yes;kwdAny=%22cliff%20atkinson%22"&gt;Webcasts&lt;/a&gt; and &lt;a title="Free resources on Beyond Bullet Points web site" href="http://www.beyondbulletpoints.com/public/department15.cfm"&gt;sample chapters&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Researching for the presentation&lt;/h4&gt;  &lt;h5&gt;Collecting information&lt;/h5&gt;  &lt;p&gt;&lt;a title="Garr Reynold's book Presentation Zen" href="http://www.amazon.com/Presentation-Zen-Simple-Design-Delivery/dp/0321525655/simplyaprogra-20"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/41iLssLPHCL._SL500_AA240_.jpg" align="right" width="200" height="200" /&gt;&lt;/a&gt;I started my research for presentations by looking up BBP to see what Cliff's been up to the last couple years.  Since he recently published an updated edition of BBP for  PowerPoint 2007, I decided it was a good time to buy. I created a new web feed folder for presentations in &lt;a title="Snarfer, a free web feed reader" href="http://www.snarfware.com/"&gt;Snarfer&lt;/a&gt; and added his &lt;a title="Cliff Atkinson's blog" href="http://www.beyondbulletpoints.com/blog/"&gt;blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Next, I let Google guide me to the most popular presentation blogs, which immediately lead me to &lt;a title="Garr Reynolds's web site" href="http://www.garrreynolds.com/"&gt;Garr Reynolds's&lt;/a&gt; blog &lt;a title="Garr Reynold's Presentation Zen blog" href="http://www.presentationzen.com/"&gt;Presentation Zen&lt;/a&gt;. I discovered that Garr recently wrote a &lt;a title="Garr Reynolds's book Presentation Zen" href="http://www.amazon.com/Presentation-Zen-Simple-Design-Delivery/dp/0321525655/simplyaprogra-20"&gt;book&lt;/a&gt; about presentations, also titled Presentation Zen (PZ), so I added it to the cart. If you'd like a quick overview of his points, watch the &lt;a title="Garr Reynold's presentation to Google about presentations" href="http://www.youtube.com/watch?v=DZ2vtQCESpk"&gt;video of the metapresentation&lt;/a&gt; he made to Google employees. His &lt;a title="No excuse for tedium: Advice on giving technical presentations" href="http://www.presentationzen.com/presentationzen/2006/03/no_excuse_for_t.html"&gt;post&lt;/a&gt; on technical presentations was very relevant to my needs, as well as a link he provided to an awesome &lt;a title="Scientifically Speaking - Tips for Preparing and Delivering Scientific Talks and Using Visual Aids" href="http://tos.org/resources/publications/sci_speaking.html"&gt;booklet&lt;/a&gt; (partially funded by our federal tax dollars) on the subject by the Oceanography Society.&lt;/p&gt;  &lt;p&gt;From these first two sources, I found references to &lt;a title="Nancy Duarte's web site" href="http://www.duartedesign.com/"&gt;Nancy Duarte's&lt;/a&gt; presentation work and &lt;a title="Slideology blog" href="http://slideology.com/"&gt;her blog&lt;/a&gt;. Her team was the one that helped out Al Gore with An Inconvenient Truth. Nancy did a &lt;a title="VizThink webinar: Creating Powerful Presentations with Nancy Duarte" href="http://www.vizthink.com/blog/2008/06/18/webinar-creating-powerful-presentations-with-nancy-duarte/"&gt;webinar&lt;/a&gt; on how to create powerful presentations for &lt;a title="VizThink web site" href="http://www.vizthink.com/"&gt;VizThink&lt;/a&gt;, a new visual thinking community that love thinking visually and creating &lt;a title="Mind map information from Wikipedia" href="http://en.wikipedia.org/wiki/Mind_map"&gt;mind maps&lt;/a&gt;. Nancy also recently finished working on her book, &lt;a title="slide:ology: The Art and Science of Creating Great Presentations by Nancy Duarte" href="http://www.amazon.com/gp/product/0596522347/simplayaprogra-20"&gt;slide:ology&lt;/a&gt;, but it wasn't published until this month, so I couldn't get it in time.&lt;/p&gt;  &lt;p&gt;&lt;a title="The Back of the Napkin: Solving Problems and Selling Ideas with Pictures - On Amazon" href="http://www.amazon.com/Back-Napkin-Solving-Problems-Pictures/dp/1591841992/simplyaprogra-20"&gt;&lt;img alt="The Back of the Napkin: Solving Problems and Selling Ideas with Pictures" src="http://ecx.images-amazon.com/images/I/61phkedVEwL._SL500_BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_.jpg" align="left" width="200" height="200" /&gt;&lt;/a&gt;Around the time I was doing my primary research in July, Dan Roam's book, &lt;a title="The Back of the Napkin: Solving Problems and Selling Ideas with Pictures - On Amazon" href="http://www.amazon.com/Back-Napkin-Solving-Problems-Pictures/dp/1591841992/simplyaprogra-20"&gt;The Back of the Napkin&lt;/a&gt; (BOTN), was still fresh off of the press. It created quite a buzz in the presentation circles, so I thought it was worth looking into. Almost everyone has something good to say about it, and the cover just looks cool. It wasn't a book on presentations specifically, but it was right up my alley in terms of relevance. Considering my topics, so I was intrigued about the possibility of being able to communicate my topics using simple pictures. &lt;/p&gt;  &lt;p&gt;Garr's book begins with a presentation-style forward (a one-page series of slides) by &lt;a title="Guy Kawasaki's blog" href="http://blog.guykawasaki.com/"&gt;Guy Kawasaki&lt;/a&gt;. Guy is a former Apple fellow and considered to have this whole speaking-presenting thing down by his peers. Guy's &lt;a title="Alltop, a collection of portals containing the most popular content on a given subject" href="http://alltop.com/"&gt;Alltop.com&lt;/a&gt; site was featured in his blog (of course you'd expect some self-promotion) as a service that makes it easy to find top blogs or sites on a subject.  Browsing Alltop lead me to their speaking aggregate page, &lt;a title="Alltop's speaking aggregate page" href="http://speaking.alltop.com/"&gt;speaking.alltop.com&lt;/a&gt;.  This has Nancy's, Garr's and Cliff's blog all on the page, which is a good sign so far.  In addition to these, it has a bunch of others as well, which should point you to just about any other niche related to presenting/speaking that you'd need. &lt;/p&gt;  &lt;h5&gt;Processing information&lt;/h5&gt;  &lt;p&gt;Instead of providing yet another detailed book review, I'll just provide a simple chronology with oversimplified summaries. Overall, I don't regret purchasing any of these books. This may or may not have something to do with me being a book junkie. I would actually like to buy an additional 3 already. However, I think you'll agree with me on these.&lt;/p&gt;  &lt;h6&gt;The Back of the Napkin&lt;/h6&gt;  &lt;p&gt;I started by reading BOTN, which seemed to be more approachable because of the front cover, and also more of a prerequisite to books specifically about presentations.  The main idea of BOTN is that pictures are the best for communicating and therefore the best for solving problems. Dan's argument is that everyone is still just as creative as they were during childhood and can still draw whether or not they admit to it. One of the coolest things I took away from this book was how the Visual Thinking Codex on page 141 brought it all together, and how you can "tune" your images based on your audience. BOTN inspired me to create a graph with a custom coordinate system to summarize a topic.  This diagram made its way into my presentation which I'll be posting here in a couple weeks when the conference starts.&lt;/p&gt;  &lt;h6&gt;Presentation Zen&lt;/h6&gt;  &lt;p&gt;I read PZ next. The main idea of PZ is that slides should be as simple as possible and include stunning visuals. In agreement with the sources I'd read previously, Garr urges you to plan presentations away from the computer "in analog". Garr uses the term &lt;a title="Garr's blog post on the slideument" href="http://www.presentationzen.com/presentationzen/2006/04/slideuments_and.html"&gt;slideument&lt;/a&gt; to mock presentations that are also intended to present the amount of information in a document. He encourages us to create handouts or documents to free our presentations of unnecessary details (advice that I followed for the conference). PZ is full of examples of slides that promote simplicity and clarity over noise and information overload, which makes it the best resource for slide layouts and design ideas.&lt;/p&gt;  &lt;h6&gt;Beyond Bullet Points&lt;/h6&gt;  &lt;p&gt;I had read a couple of sample chapters of BBP before I received all my books, so I saved this book for last. Cliff makes a fantastic case for abandoning the way that PowerPoint and other slideware encourages you to use templates and bullet points to present information. He spends a good amount of time discussing the scientific research on how the brain receives, processes and stores information in the context of multimedia presentations. Specifically, the brain prefers images over text, and reading while listening is more challenging than most of the alternatives. Including the section on research was great, as it makes the issue at hand more objective than just some experts' opinions (However, I have yet to find anyone who holds a counter position). Cliff also advises to plan in analog away from the computer, and even goes further by providing template worksheets to fill out for help designing the flow of the presentation.&lt;/p&gt;  &lt;h6&gt;Book reading summary&lt;/h6&gt;  &lt;p&gt;Every resource I've come across stresses simplicity in terms of slide design. However, Cliff's approach is by far the most rigid I've seen. His advice, based on his research of course, is to never stray away from the same layout on a slide, to always use the same font and size in the same place, to always use complete sentences in active voice, and more of these types of recommendations. I loved BBP because it finally helped me pull the entire structure of my presentation together.  It is very good at forcing you to whittle down your message to the core.  However, one I arrived at my core, I sided with recommendations from others regarding slide design (such as PZ's recommendation of asymmetry). However, I did implement some of Cliff's suggestions, such as the first 5 slides overview and using motif  (I chose a pyramid) for main topic slides. Overall, BBP is the best resource for the PDLC (presentation development life cycle).&lt;/p&gt;  &lt;h5&gt;Searching for inspiration&lt;/h5&gt;  &lt;h6&gt;Looking for metaphors&lt;/h6&gt;  &lt;p&gt;You would think that everything I've mentioned so far would inspire me with more than enough ideas, but since this was my first attempt at using visuals to present information, I struggled with finding just that right picture to show. What image best describes portals or systems integration? Even though I settled on some images, I still have no idea. For me this was the most difficult thing about the entire process (remember my complaint about my right brain being sore?). I was prepared to pay for stock photos, but I still had a hard time finding ones I liked.  Most likely the problem was me, not the stock photo sites (such as &lt;a href="http://www.istockphoto.com/index.php"&gt;iStockPhoto&lt;/a&gt;). I actually ended up finding quite a bit of free photos from &lt;a title="Stock.XCHNG, a free stock photo web site" href="http://www.sxc.hu/"&gt;Stock.XCHNG&lt;/a&gt;, but not without a considerable time investment. You can waste hours looking for photos, which is why it's so important that you plan your slides and pick your image ideas before you start browsing photos (I didn't quite do it right, so consider yourself warned).&lt;/p&gt;  &lt;h6&gt;Watching presentations&lt;/h6&gt;  &lt;p&gt;A common recommendation I read was to watch videos of great presentations for examples. Garr's blog and book recommended watching presentations from the &lt;a title="Technology, Education, Design (TED) conference" href="http://www.ted.com/index.php/"&gt;TED conference&lt;/a&gt;, which were awesome. I was also referred to Steve Jobs's keynotes as well.  This really helps by providing examples of delivery and how to engage the audience. Also, for additional inspiration for slide design and entire presentations, check out the most popular presentations posted to &lt;a href="http://www.slideshare.net/"&gt;SlideShare&lt;/a&gt;. However, keep in mind that SlideShare presentations tend to be designed to provide information without a speaker, so they're more story-like and usually include more words.&lt;/p&gt; &lt;a name="top3"&gt;&amp;nbsp;&lt;/a&gt;&lt;h4&gt;Top 3 things I learned about presentations&lt;/h4&gt;&lt;h5&gt;Presentations are a specific type of communication medium&lt;/h5&gt;&lt;p&gt;Presentations are intended to be presented, not printed or read. Presentations should not be able to communicate independently from the presenter explaining and elaborating the contents of the slides. If the target medium is something that needs to be read, a document, not a presentation, is the most appropriate delivery medium. Creating a presentation is a lot more like storyboarding a movie script than it is like writing a document. Avoid the slideument!&lt;/p&gt;&lt;h5&gt;Presentations are old, but slideware is new&lt;/h5&gt;&lt;p&gt;Presentations have been made for years before PowerPoint came along. Have you ever stopped and considered how you might present without presentation software?  Stay away from PowerPoint as long as you can.  Do all of your storyboarding on paper, post-its or white boards.  It takes far too long to sketch ideas within PowerPoint unless you have a Tablet PC and insist on using a computer.&lt;/p&gt;&lt;h5&gt;Bullet points are bad&lt;/h5&gt;&lt;p&gt;Have you ever questioned if bullet points displayed on a screen are the best way of transferring knowledge to the audience? If top educational researchers and experts such as &lt;a title="The Cognitive Load of PowerPoint: Q&amp;amp;A with Richard E. Mayer by Cliff Atkinson" href="http://www.sociablemedia.com/articles_mayer.htm"&gt;Dr. Richard Meyer&lt;/a&gt;, &lt;a title="John Sweller featured in an article discussing cognitive load theory" href="http://www.unsw.edu.au/news/pad/articles/2007/mar/Cognitive_load_theory.html"&gt;John Sweller&lt;/a&gt;, the father of the cognitive load theory, and &lt;a title="Edward Tufte's essay The Cognitive Style of PowerPoint" href="http://www.edwardtufte.com/tufte/books_pp"&gt;Edward Tufte&lt;/a&gt; all advise against this approach would you be willing to hear their arguments? Our brains cannot digest and retain the amount of information on a slide with bullet points.  They prefer pictures over text, actually.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cf9a72d6-6ee4-4b61-ad7d-356338a5832e" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/PowerPoint" rel="tag"&gt;PowerPoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Presentation" rel="tag"&gt;Presentation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/bullet%20points" rel="tag"&gt;bullet points&lt;/a&gt;,&lt;a href="http://technorati.com/tags/presenting" rel="tag"&gt;presenting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/speaking" rel="tag"&gt;speaking&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-8368084147026421816?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=CTgXyMyo"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=coPUU1wx"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=coPUU1wx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=qazRV3NW"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=qazRV3NW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=BWK01Swj"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=bsYAoppz"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=bsYAoppz" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/NaayCF6RgJM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/8368084147026421816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/08/presentation-of-technical-content.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8368084147026421816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8368084147026421816?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/08/presentation-of-technical-content.html" title="The presentation of technical content" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CU8HSX44eip7ImA9WxRWE0o.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-9216369649961148763</id><published>2008-08-07T23:02:00.003-05:00</published><updated>2008-10-30T08:37:18.032-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-30T08:37:18.032-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="BlackBerry" /><title>ASP.NET Enterprise Single Sign-On with BlackBerry Smartphones</title><content type="html">&lt;p&gt;&lt;img style="margin: 0px;" alt="Example web site hierarchy used for SSO in the article" src="http://lh3.ggpht.com/pictures.jones.family/SJvFVA5_qZI/AAAAAAAAAFs/2bmY95w-Fao/MSL%20-%20Web%20Site%20Hierarchy%20-%20For%20Blog%5B9%5D.png?imgmax=800" width="240" align="right" height="225" /&gt; My article about &lt;a title="ASP.NET Enterprise Single Sign-On with BlackBerry Smartphones on BlackBerry Developer Journal" href="http://na.blackberry.com/eng/devjournals/resources/journals/aug_2008/singlesignon.jsp"&gt;single sign-on (SSO) using ASP.NET and BlackBerry devices&lt;/a&gt; was just published in the &lt;a title="August edition of the BlackBerry Developer Journal" href="http://na.blackberry.com/eng/devjournals/resources/journals/aug_2008/"&gt;BlackBerry Developer Journal&lt;/a&gt;. If you're like me and prefer to read from paper instead of liquid crystals, there's a &lt;a title="PDF of the BlackBerry Developer Journal, Volume 5, Issue 1" onclick="javascript: pageTracker._trackPageview('/downloads/blackberrydevjournal');" href="http://pages.simplyaprogrammer.com/BlackBerryDeveloperJournal-0501.pdf"&gt;printable version&lt;/a&gt;, too. However, you're going to need to use the web version for copying code samples or to download the sample code in the &lt;a title="Sample Visual Studio solution for BlackBerry SSO" href="http://na.blackberry.com/eng/devjournals/resources/journals/aug_2008/MobileSiteLibrary.zip"&gt;Visual Studio solution&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I was able to work a lot of concepts into the article, the following being a small sample of the variety.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Cookie authentication&lt;/li&gt;    &lt;li&gt;Kerberos &lt;a title="MSDN article discussing the Kerberos extension Service-for-User-to-Self" href="http://msdn.microsoft.com/en-us/magazine/cc188757.aspx"&gt;S4U2Self&lt;/a&gt; implementation&lt;/li&gt;    &lt;li&gt;Custom .NET configuration section&lt;/li&gt;    &lt;li&gt;Application of the &lt;a title="Page Controler software architecture pattern" href="http://msdn.microsoft.com/en-us/library/ms978764.aspx"&gt;Page Controller&lt;/a&gt; and &lt;a title="Intercepting Filter software architecture pattern" href="http://msdn.microsoft.com/en-us/library/ms978727.aspx"&gt;Intercepting Filter&lt;/a&gt; (and why it's so cool for IIS 7) architecture patterns&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;One of the cool takeaways included in the sample code is a method in C# that simulates ASP.NET's Active Directory authorization check.&lt;/p&gt;  &lt;p&gt;Writing is so much more time consuming than I originally imagined. It was definitely a learning process. I now have much more of an appreciation for those that set out to write an entire book. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:27b0ce8f-605f-4271-a5c5-745185e12a44" style="margin: 0px; padding: 0px; display: inline; float: none;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/BlackBerry" rel="tag"&gt;BlackBerry&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SSO" rel="tag"&gt;SSO&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/authentication" rel="tag"&gt;authentication&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cookie" rel="tag"&gt;cookie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/enterprise" rel="tag"&gt;enterprise&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/pattern" rel="tag"&gt;pattern&lt;/a&gt;,&lt;a href="http://technorati.com/tags/page%20controller" rel="tag"&gt;page controller&lt;/a&gt;,&lt;a href="http://technorati.com/tags/intercepting%20filter" rel="tag"&gt;intercepting filter&lt;/a&gt;,&lt;a href="http://technorati.com/tags/S4U2Self" rel="tag"&gt;S4U2Self&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-9216369649961148763?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=jZBJrtqe"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=3My6vO3F"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=3My6vO3F" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=2vMByKoT"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=2vMByKoT" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=reD6BUO0"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=C0VVmvxu"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=C0VVmvxu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/-H4WgqvyTqE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/9216369649961148763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/08/aspnet-enterprise-single-sign-on-with.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/9216369649961148763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/9216369649961148763?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/08/aspnet-enterprise-single-sign-on-with.html" title="ASP.NET Enterprise Single Sign-On with BlackBerry Smartphones" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;CUAASXw9fSp7ImA9WxdVF0U.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-7049556630142583435</id><published>2008-07-22T12:30:00.002-05:00</published><updated>2008-07-22T22:29:08.265-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-22T22:29:08.265-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>Extracting assemblies from the Global Assembly Cache in Windows Explorer</title><content type="html">&lt;p&gt;Here's a quick tip I accidentally discovered about extracting assemblies from .NET's &lt;a href="http://msdn.microsoft.com/en-us/library/yf1d93sz.aspx"&gt;Global Assembly Cache&lt;/a&gt; (GAC).&amp;#160; In the past, when I wanted to extract .NET assemblies from the GAC, I was accustomed to opening a command window and executing copy commands.&amp;#160; It's tedious, but it works. This is necessary because of &lt;a title="shfusion documentation" href="http://msdn.microsoft.com/en-us/library/34149zk3.aspx"&gt;shfusion&lt;/a&gt; (shfusion.dll), a Windows Explorer extension that controls the interaction of the the &lt;nobr&gt;%windir%\assembly&lt;/nobr&gt; folder and prevents extraction of its assemblies. You can add assemblies into the GAC from Windows Explorer, but you can't extract them. &lt;/p&gt;  &lt;p&gt;I've had to call Microsoft support in the past for one issue or another, and on one call I watched them unregister shfusion.dll (regsvr32 /u shfushion.dll) in order to extract multiple assemblies out of the GAC. However, I remember trying this on another machine one time and it didn't quite work.&lt;/p&gt;  &lt;p&gt;I recently experienced the joy of needing to extract a handful of assemblies out of the GAC to manually reinstall an application. After using the command console a couple times, I thought I'd try to open one of the paths from the run box and to my amazement it worked.&amp;#160; It opened the GAC in Windows Explorer and bypassed shfusion. I've confirmed this works on XP, Vista and Server 2003. &lt;/p&gt;  &lt;h5&gt;Finally, the tip&lt;/h5&gt;  &lt;p&gt;Open the run command box (or quick search box in Vista)&amp;#160; and enter the following.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;%windir%\assembly\gac&lt;/code&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b690a1c2-4bac-45df-aff7-22013c0fca06" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Global%20assembly%20cache" rel="tag"&gt;Global assembly cache&lt;/a&gt;,&lt;a href="http://technorati.com/tags/GAC" rel="tag"&gt;GAC&lt;/a&gt;,&lt;a href="http://technorati.com/tags/assembly" rel="tag"&gt;assembly&lt;/a&gt;,&lt;a href="http://technorati.com/tags/shfusion" rel="tag"&gt;shfusion&lt;/a&gt;,&lt;a href="http://technorati.com/tags/windows%20explorer" rel="tag"&gt;windows explorer&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-7049556630142583435?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=0OatAE08"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=e1u8nDCY"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=e1u8nDCY" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=9EprZNbh"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=9EprZNbh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=tYPdQGo3"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=iKTFL1S4"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=iKTFL1S4" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/WvYe5-Q7YKw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/7049556630142583435/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/07/extracting-assemblies-from-global.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7049556630142583435?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7049556630142583435?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/07/extracting-assemblies-from-global.html" title="Extracting assemblies from the Global Assembly Cache in Windows Explorer" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry gd:etag="W/&quot;D0IMQ3s5eCp7ImA9WxdXFk8.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-5230788656077359024</id><published>2008-06-26T23:48:00.002-05:00</published><updated>2008-06-27T22:59:42.520-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-27T22:59:42.520-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><title>Parsing dates for web feeds in .NET</title><content type="html">&lt;p&gt;During the initial development of &lt;a title="FeedFly - Open source Windows Mobile feed reader" href="http://www.codeplex.com/feedfly"&gt;FeedFly&lt;/a&gt; last year, I was exposed to the evils of date parsing for web feeds.&amp;#160; While working on &lt;a title="FeedFly 0.2.1" href="http://www.codeplex.com/feedfly/Release/ProjectReleases.aspx?ReleaseId=14359"&gt;release 0.2.1&lt;/a&gt;, I revisited this issue when fixing a date parsing bug. Before I forget all of this, it helps to write it down.&lt;/p&gt;  &lt;h4&gt;Feed formats and dates&lt;/h4&gt;  &lt;p&gt;If you decide to start syndicating a web feed these days, you're basically limited to the two most popular feed formats: RSS or Atom.&amp;#160; &lt;a title="RSS on Wikipedia" href="http://en.wikipedia.org/wiki/RSS_(file_format)"&gt;RSS&lt;/a&gt; seems to have the upper hand right now in terms of popularity, but some believe &lt;a title="Atom on Wikipedia" href="http://en.wikipedia.org/wiki/Atom_(standard)"&gt;Atom&lt;/a&gt; will eventually take over because it's being pushed as an official standard. For the purposes of a web feed, both of these formats need to be able to store and transmit dates and times.&amp;#160; Each format has it's own date and time format, however.&amp;#160; &lt;/p&gt;  &lt;h5&gt;RSS&lt;/h5&gt;  &lt;p&gt;RSS feeds are supposed to use the date format outlined in section 5 of &lt;a title="RFC822: Standard for ARPA Internet Text Messages" href="http://www.w3.org/Protocols/rfc822/#z28"&gt;RFC 822&lt;/a&gt; (published in 1982). Here are some example RFC 822 dates:&lt;/p&gt;  &lt;pre&gt;&lt;code&gt;Wed, 28 May 08 07:00:00 EDT
Thu, 10 Apr 08 02:30:00 UT
Tue, 10 Jun 08 05:15:00 -0600
Thu, 17 Apr 08 22:45:00 GMT&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In 1989, &lt;a title="RFC 1123 - Requirements for Internet Hosts -- Application and Support" href="http://www.ietf.org/rfc/rfc1123.txt"&gt;RFC 1123&lt;/a&gt; was created to update the RFC 822 format to use 4-digit years (section 5.2.14). Also included was a recommendation that all dates should be limited to GMT (universal time) or include a numerical offset. So, for RFC 1123's purposes, only the last date in the above list &lt;em&gt;should&lt;/em&gt; be used. But it's supposed to be backwards compatible. Don't take my word for it, though:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;There is a strong trend towards the use of numeric timezone indicators, and implementations SHOULD use numeric timezones instead of timezone names. However, all implementations MUST accept either notation. If timezone names are used, they MUST be exactly as defined in RFC-822.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I interpret this to mean that while RFC 1123 strongly encourages you to use numerical offsets or GMT, you could ignore the recommendation and still be in compliance. Because of this, the following dates should be considered to be in both RFC 822 and RFC 1123 format. However, only the bottom 2 are recommended by RFC 1123.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Wed, 28 May 2008 07:00:00 EDT
Thu, 10 Apr 2008 02:30:00 UT
Tue, 10 Jun 2008 05:15:00 -0600
Thu, 17 Apr 2008 22:45:00 GMT&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Researching the &lt;a title="History of RSS web feed format" href="http://cyber.law.harvard.edu/rss/rssVersionHistory.html"&gt;history of RSS&lt;/a&gt; lead to some dark places on the web. This format was evidently born out of a lot of heated &amp;quot;collaboration&amp;quot;. All versions of RSS history (controversial or not) I could dig up stated it began in 1997. The reason I looked up the history was to figure out why it's flavor of RFC 822 did not follow the recommendations in RFC 1123, or make any references to it.&amp;#160; Well, I didn't find an answer for that, and it's even more perplexing given that the HTTP specification was &lt;a title="HTTP 1.0 specification - RFC 1945" href="http://www.ietf.org/rfc/rfc1945.txt"&gt;recommending&lt;/a&gt; RFC 1123 exclusively as early as 1996. Here's a revealing excerpt:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123&lt;/p&gt;

  &lt;p&gt;... [this date format] is preferred as an Internet standard and represents a fixed-length subset of that defined by RFC 1123 [6] (an update to RFC 822 [7]).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Why am I spending so much precious time on this?&amp;#160; .NET only parses RFC 822 dates according to RFC 1123's recommendations, that's why. They (the .NET team) are in safe territory here (I guess) since they can simply point to HTTP's exclusive use of RFC 1123, but more on this later.&lt;/p&gt;

&lt;h5&gt;Atom&lt;/h5&gt;

&lt;p&gt;The Atom format &lt;a title="Date constructs in Atom format" href="http://atompub.org/rfc4287.html#date.constructs"&gt;specifies&lt;/a&gt; that its dates must conform to &lt;a title="RFC 3389: Date and Time on the Internet: Timestamps" href="http://www.ietf.org/rfc/rfc3339.txt"&gt;RFC 3389&lt;/a&gt;, which defines a simple profile of the &lt;a title="Summary of ISO 8601 on Wikipedia" href="http://en.wikipedia.org/wiki/ISO_8601"&gt;ISO 8601&lt;/a&gt; date format. Just looking at the number of the RFC indicates it's more recent. Proposed in 2002, RFC 3389 is 20 years younger than RFC 822, so you'd expect it to include some &amp;quot;lessons learned&amp;quot; from previous date formats.&lt;/p&gt;

&lt;p&gt;Here is an example date in&amp;#160; in RFC 3389: &lt;code&gt;1985-04-12T23:20:50.52Z&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The benefit of this date format is that it's more efficient to parse from a computer's perspective.&amp;#160; It does this at the cost of being less user friendly, since we now don't know what day of the week it is or what time zone offset it was created in. Of course, modern software frameworks&amp;#160; like .NET or Java can easily produce most of this user friendly information for you after calling upon their rich date and time libraries.&lt;/p&gt;

&lt;h4&gt;Date parsing in .NET&lt;/h4&gt;

&lt;p&gt;For parsing date time strings .NET offers us &lt;a href="http://msdn.microsoft.com/en-us/library/system.datetime.parse.aspx"&gt;DateTime.Parse&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.datetime.parseexact.aspx"&gt;DateTime.ParseExact&lt;/a&gt;. Both can parse a list of&amp;#160; &lt;a title=".NET Standard Date and Time Format Strings" href="http://msdn.microsoft.com/en-us/library/az4se3k1.aspx"&gt;standard date and time formats&lt;/a&gt; included in the framework. ParseExact can also parse custom date and time formats.&lt;/p&gt;

&lt;h5&gt;Parsing RSS dates&lt;/h5&gt;

&lt;p&gt;For RSS-type dates, .NET includes the standard date format string &amp;quot;r&amp;quot; for RFC 1123. When used in combination with &lt;a href="http://msdn.microsoft.com/en-us/library/zdtaw1bw.aspx"&gt;DateTime.ToString&lt;/a&gt;, &amp;quot;r&amp;quot; will always produce a universal date with a &amp;quot;GMT&amp;quot; suffix.&amp;#160; However, for parsing purposes, .NET will parse a numerical offset without complaint. However, as hinted to above, .NET will throw an exception if it encounters a time zone name as specified in RFC 822.&amp;#160; &lt;/p&gt;

&lt;p&gt;What do you think about this?&amp;#160; Should the &lt;a title=".NET base class library team" href="http://msdn.microsoft.com/en-us/netframework/aa569604.aspx"&gt;BCL team&lt;/a&gt; be forced to abide by RFC 1123's command that it &amp;quot;MUST accept either notation&amp;quot;? I think so. RFC 822 is certainly not going to change which time zones it contains, so hard-coding this into DateTime somewhere couldn't hurt.&amp;#160; It was certainly easy enough for me to build a &lt;a href="http://msdn.microsoft.com/en-us/library/system.collections.specialized.listdictionary.aspx"&gt;ListDictionary&lt;/a&gt; solution as a workaround. &lt;/p&gt;

&lt;p&gt;Furthermore, given the fact that Java is about to release an updated API for date parsing (&lt;a title="JSR 310 Date and Time API" href="https://jsr-310.dev.java.net/"&gt;JSR 310&lt;/a&gt;) that will most likely parse these time zone names, .NET's going to have to catch up (hint). Now, I don't know this for a fact regarding JSR 310, but from what I could find from searching, they're considering a lot of ideas from the popular &lt;a title="joda-time: date and time enhancements for Java" href="http://joda-time.sourceforge.net/api-release/org/joda/time/format/DateTimeFormat.html"&gt;joda-time library&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;Parsing Atom dates&lt;/h5&gt;

&lt;p&gt;After all that mess with RFC 822, Atom's use of RFC 3389 is refreshing from a parsing perspective. .NET includes the &amp;quot;o&amp;quot; format for parsing what appears to be RFC 3389 dates.&amp;#160; However, MSDN says this format is for ISO 8601. Given the huge variety of date formats in ISO 8601 (the W3C &lt;a href="http://www.w3.org/TR/NOTE-datetime"&gt;commented briefly&lt;/a&gt; about this), I'd prefer the documentation to be a bit more specific about what it will and will not parse. But hey, it parses just fine, so I'll take it.&lt;/p&gt;

&lt;h4&gt;I prefer Atom&lt;/h4&gt;

&lt;p&gt;I have no idea what preference the small slice of the development community that writes .NET feed reader software has in terms of feed formats.&amp;#160; But I'm sure they appreciate Atom when it comes time to parse dates. I don't know if it's a freedom thing or a popularity thing, but I see much more abuse of date formats in RSS feeds than I do in Atom feeds.&amp;#160; For example, &lt;a href="http://feeds.autoblog.com/weblogsinc/autoblog"&gt;AutoBlog's RSS feed&lt;/a&gt; uses RFC 3389 dates in its pubDate element. That's a no-no, but I still parse it.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:3a4de7cb-83bf-4b7d-aed7-4a1f6be48495" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/date%20time" rel="tag"&gt;date time&lt;/a&gt;,&lt;a href="http://technorati.com/tags/parsing" rel="tag"&gt;parsing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Atom" rel="tag"&gt;Atom&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RSS" rel="tag"&gt;RSS&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-5230788656077359024?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=kSsCHngf"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=UfvA0MrS"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=UfvA0MrS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=XUKptdq8"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=XUKptdq8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=3UBsY9pa"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=ne6Eljll"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=ne6Eljll" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/knG-qTdW0wk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/5230788656077359024/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/06/parsing-dates-for-web-feeds-in-net.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/5230788656077359024?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/5230788656077359024?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/06/parsing-dates-for-web-feeds-in-net.html" title="Parsing dates for web feeds in .NET" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CUQHRHg4eCp7ImA9WxdREU8.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-7744676607963849934</id><published>2008-05-29T22:39:00.001-05:00</published><updated>2008-05-29T23:55:35.630-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-29T23:55:35.630-05:00</app:edited><title>Icon formats for Windows Mobile</title><content type="html">&lt;p&gt;About 6 months ago, I created a custom icon for my Windows Mobile application, &lt;a title="FeedFly - Open source Windows Mobile feed reader" href="http://www.codeplex.com/feedly"&gt;FeedFly&lt;/a&gt;.  I think I used one of those "We'll make your icon for free from an image! It's totally FREE!!!" web sites.  I chased that down with a trial edition of an icon editor (it might have been Microangelo) to make a couple modifications.&lt;/p&gt;  &lt;p&gt;My icon turned out great, or at least I thought it did until I deployed it to my device.  The transparent background wasn't transparent.  It was either white (as shown on the start menu graphic below) or this weird smoky gray color (shown on HTC's Home Today Screen plug-in next to the fixed one). I tried opening the icon in several different applications (Visual Studio, &lt;a title="Infranview - freeware image viewer" href="http://www.irfanview.net/"&gt;Infranview&lt;/a&gt;, and even old MS Paint). Each one told me I actually had a transparent background (in more or less words).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/pictures.jones.family/SD92-nRSLeI/AAAAAAAAAD4/TXItnb0dAF0/FeedFly-SmallIconComparison%5B5%5D.jpg?imgmax=800"&gt;&lt;img style="border: 0px none ; margin: 0px 20px 0px 10px;" alt="FeedFly-SmallIconComparison" src="http://lh5.ggpht.com/pictures.jones.family/SD92-3RSLfI/AAAAAAAAAEA/9kcU3rFZdSc/FeedFly-SmallIconComparison_thumb%5B3%5D.jpg?imgmax=800" border="0" height="320" width="240" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/pictures.jones.family/SD92_HRSLgI/AAAAAAAAAEI/quCo8qyYIkU/FeedFly-LargeIconComparison%5B9%5D.jpg?imgmax=800"&gt;&lt;img style="border: 0px none ; margin: 0px;" alt="FeedFly-LargeIconComparison" src="http://lh3.ggpht.com/pictures.jones.family/SD92_XRSLhI/AAAAAAAAAEQ/YenEhLKOjG8/FeedFly-LargeIconComparison_thumb%5B7%5D.jpg?imgmax=800" border="0" height="320" width="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Since I'm working on a &lt;a title="FeedFly 0.2" href="http://www.codeplex.com/feedfly/Release/ProjectReleases.aspx?ReleaseId=13825"&gt;new release&lt;/a&gt; for FeedFly, I thought I'd once again look for a solution to my icon transparency woes. A couple days ago, I stumbled upon &lt;a title="IcoFX freeware icon editor" href="http://icofx.ro/"&gt;IcoFX&lt;/a&gt; and installed it to see if it could be of any help. Well, it was. &lt;/p&gt;  &lt;p&gt;It turns out that the handy web site I used to generate the icon provided me with a 32 bit color icon along with the &lt;a title="Alpha transparency discussed on Wikipedia" href="http://en.wikipedia.org/wiki/Alpha_transparency"&gt;alpha transparency&lt;/a&gt; included within the original image. Using IcoFX, I converted my icon to 256 color (8 bit) and removed the alpha transparency.  After deploying to my device, it is shown correctly now. &lt;/p&gt;  &lt;p&gt;On a related note, let me start by saying I realize that the target audience for a tool such as an icon editor is a small slice of the general user population. However, for an operating system that uses icons so extensively, I still can't believe an icon editor is not included in Windows. I'm on a budget, and I can't justify purchasing something like Photoshop just to edit an icon. I'm nowhere near an artist, so I definitely won't make icon editing a habit (I get pretty frustrated as it is), but I do end up fiddling with an icon once every other year it seems (mostly &lt;a title="favicon topic on Wikipedia" href="http://en.wikipedia.org/wiki/Favicon"&gt;favicons&lt;/a&gt; lately).&lt;/p&gt;  &lt;p&gt;Finally, this post isn't meant to imply that all the high bit counts won't work for icons (read &lt;a title="Windows Mobile team's blog post on color support" href="http://blogs.msdn.com/windowsmobile/archive/2005/09/07/462187.aspx"&gt;this&lt;/a&gt; for more information), but to hopefully help you avoid some frustration trying to track this issue down.  Just make sure your icon is not 32 bit with alpha.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:41e2b4fc-2128-4f59-a874-e315107801b0" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Windows%20Mobile" rel="tag"&gt;Windows Mobile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Icon" rel="tag"&gt;Icon&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-7744676607963849934?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=lK1TsTjH"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=yolY7d6O"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=yolY7d6O" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=T6LeYRTg"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=T6LeYRTg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=Itmdjtrs"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=MpBSRIDp"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=MpBSRIDp" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/M7bm6ar4LU8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/7744676607963849934/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/05/icon-formats-for-windows-mobile.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7744676607963849934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7744676607963849934?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/05/icon-formats-for-windows-mobile.html" title="Icon formats for Windows Mobile" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry gd:etag="W/&quot;C0UCQ385eyp7ImA9WxRaE0g.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-7813192851480443819</id><published>2008-05-26T14:48:00.006-05:00</published><updated>2008-12-15T08:27:42.123-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-15T08:27:42.123-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><title>Importing files into a SharePoint document library using regular expressions and WebDAV</title><content type="html">&lt;p&gt;I just finished writing a utility to export a folder hierarchy of files from my existing custom extranet to a SharePoint document library.  The custom extranet was database-driven and allowed the user to name a file or folder whatever he or she wished up to a maximum of 500 characters. When I wrote this extranet 6 years ago in classic ASP, I'd just &lt;a title="HTMLEncode method documentation on MSDN" href="http://msdn.microsoft.com/en-us/library/w3te6wfz.aspx"&gt;HTML encode&lt;/a&gt; whatever name the user wished and store it in the database.  Whenever a folder or file was retrieved, it was always by using the ever-so-not-user-friendly URL parameter "id=". &lt;/p&gt;  &lt;p&gt;I already knew I would need to remove restricted characters from my folder and files names that SharePoint does not allow. Furthermore, SharePoint's document libraries actually display the full folder path in the URL, which means I'll need to be concerned about the total path length. &lt;/p&gt;  &lt;p&gt;My migration plan was to build a physical folder hierarchy for staging the files, then use &lt;a title="Web-based Distributed Authoring and Versioning" href="http://en.wikipedia.org/wiki/WebDAV"&gt;WebDAV&lt;/a&gt; (SharePoint's explorer view for document libraries) for importing the hierarchy into SharePoint within Windows.  This method will allow me to keep the utility focused on a simpler task than actually importing the files into SharePoint and make sure I don't have to worry about server timeouts. &lt;/p&gt;  &lt;h4&gt;Naming restrictions&lt;/h4&gt;  &lt;p&gt;SharePoint has &lt;a title="Information about the characters that you cannot use in sites, folders, and files in SharePoint Portal Server 2003 or in SharePoint Server 2007" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;905231"&gt;naming restrictions&lt;/a&gt; for sites, groups, folders and files. Since I'm only interested in folders and files, only the following restrictions will be considered.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Invalid characters:&lt;strong&gt;&lt;code&gt; \ / : * ? " ' &amp;lt; &amp;gt; | # { } % ~ &amp;amp; &lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;    &lt;li&gt;You cannot use the period character consecutively in the middle the name &lt;/li&gt;    &lt;li&gt;You cannot use the period character as the first or the last character &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Someone already familiar with this topic will notice that I added the apostrophe to the official restricted character list.  During my own testing, SharePoint complained when I uploaded a file with an apostrophe, so I added it to the list.&lt;/p&gt;  &lt;h4&gt;Length restrictions&lt;/h4&gt;  &lt;p&gt;Besides naming restrictions, SharePoint also has the following length restrictions (from &lt;a href="http://support.microsoft.com/kb/894630"&gt;KB 894630&lt;/a&gt;).&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A file or a folder name cannot be longer than 128 characters. &lt;/li&gt;    &lt;li&gt;The total URL length cannot be longer than 260 characters. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;128 character limit for folders and files&lt;/h5&gt;  &lt;p&gt;Regarding the 128 character limit, you can't use SharePoint's UI to get to this limit.  The text box's maxlength property is set to 123 for both folders and files.  I don't have any inside sources, but my guess is that the SharePoint team did this to make sure the total file name would not exceed 128 characters if the extension was 4 characters (as is the case with Office 2007 file formats like docx and xlsx).  The odd thing is that the folder text box is limited to 123 characters as well.  However, if you put the document library into Explorer view, you can rename a folder to allow the full 128 characters.  I bet there's some reuse going on between the data entry screens for the file and the folder in this case (also something a programmer on the SharePoint team might want to do).&lt;/p&gt;  &lt;h5&gt;260 character limit for URLs&lt;/h5&gt;  &lt;p&gt;I've done some WebDAV importing to this particular SharePoint farm in the past, and I'm pretty sure I ran into paths close to the 260 character limit, so I investigated this.  I found several instances where the total URL exceeded 260 characters.  &lt;/p&gt;  &lt;p&gt;KB 894630 mentioned above also says:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;To determine the length of a URL, .... convert the string in the URL to Universal Character Set (UCS) Transformation Format 16 (UTF-16) format, and then count the number of 16-bit characters in the string.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;However, it should probably say something like "decode the URL first, then count the characters" to make it easier to understand. I created a folder hierarchy to test out the 260 character limit. Following is a URL (notice the %20 space codes) to a test file copied from the address bar of the browser. When the URL is encoded, it contains 346 characters.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;http://intranet.xyzco.com/sites/Testing/Documents/A%20longer%20than%20
usual%20folder%20name%20for%20testing/Subfolder%201%20also%20has%20
a%20long%20name/3rd%20level%20subfolder%20about%20related%20
documents/4th%20level%20subfolder%20about%20more%20specific%20
documents/5th%20level%20subfolders%20are%20possible%20in%20this%20
hierarchy/1234567.txt&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The decoded URL is:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;http://intranet.xyzco.com/sites/Testing/Documents/A longer than usual folder name for testing/Subfolder 1 also has a long name/3rd level subfolder about related documents/4th level subfolder about more specific documents/5th level subfolders are possible in this hierarchy/1234567.txt &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Counting the characters in the URL gave me 284.  To get closer to 260, I subtracted the 25 characters for the web application:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;284 – 25 (Length of http://intranet.abcco.com) = 259 characters&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I didn't get a perfect 260, but it's close enough for me to believe that the web application host header name is not included in the limit. This is just a guess on my part, though.&lt;/p&gt;  &lt;h5&gt;Why the 260 character limit?&lt;/h5&gt;  &lt;p&gt;A 260 character limit on the URL is interesting, considering both Windows and most internet browsers support paths much longer.  It's not merely a coincidence that 260 also just so happens to be the value of the infamous &lt;a title="KB 177665 discussing MAX_PATH" href="http://support.microsoft.com/kb/177665"&gt;MAX_PATH constant&lt;/a&gt; from the Windows API.  .NET uses MAX_PATH because .NET relies on the Windows API behind the scenes.  There are API workarounds, as &lt;a title="Long Paths in .NET, Part 1 of 3 by Kim Hamilton" href="http://blogs.msdn.com/bclteam/archive/2007/02/13/long-paths-in-net-part-1-of-3-kim-hamilton.aspx"&gt;discussed&lt;/a&gt; on the BCL team blog, but I think it's safe to assume that this limit is imposed on SharePoint by .NET in some way.&lt;/p&gt;  &lt;h4&gt;Removing invalid characters and patterns using a regular expression&lt;/h4&gt;  &lt;p&gt;The String object's Replace method doesn't contain an overload for replacing an array of strings, so I looked into using a regular expression to clean folder and file names. &lt;/p&gt;  &lt;p&gt;Regular expressions have their own special characters that must be escaped if used for searching:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt; &lt;strong&gt;&lt;code&gt;[ \ ^ $ . | ? * + ( ) &lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Out of these, the following are also SharePoint's invalid characters:  &lt;strong&gt;&lt;code&gt;* ? | \ &lt;/code&gt;&lt;/strong&gt;These are the characters that will need to be escaped in our regular expression.&lt;/p&gt;  &lt;p&gt;After a bit of fiddling, I came up with the following 4 expressions:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;&lt;code&gt;[\*\?\|\\/:"'&amp;lt;&amp;gt;#{}%~&amp;amp;]&lt;/code&gt;&lt;/strong&gt; for removing invalid characters &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;code&gt;\.{2,}&lt;/code&gt;&lt;/strong&gt; for replacement of consecutive periods &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;code&gt;^[\. ]|[\. ]$&lt;/code&gt;&lt;/strong&gt; for removing spaces and periods from the beginning and end of a folder or file name &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;&lt;code&gt;" {2,}"&lt;/code&gt;&lt;/strong&gt; for replacement of consecutive spaces (enclosed by quotation marks so you can see the space) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I added a couple of rules to these expressions because of my migration strategy. Since I'm using WebDAV and building a physical folder hierarchy in Windows, I also need to be concerned about any &lt;a title="MSDN: Naming a file" href="http://msdn.microsoft.com/en-us/library/aa365247.aspx"&gt;additional restrictions&lt;/a&gt; imposed by the OS (a folder or file name can't end with a space).  Also, I'm replacing consecutive spaces with a single space.&lt;/p&gt;  &lt;p&gt;All expressions are used by Regex.Replace(). Expressions 1 and 3 are replaced by String.Empty. 2 and 4 are replaced by a period and a space, respectively. In regards to the order of the replacements, it's important that the invalid character replacement is applied first. Combining these expressions and replacing at once might create a problem after invalid characters are replaced.  For example, the name %.afile.txt would become .afile.txt if done all at once, violating the rule that a period cannot be the first character.&lt;/p&gt;  &lt;p&gt;After all replacements have been made, it's still possible to have one of the rules violated. For example, a folder named "Folder one . and . " (ends with space, period, space) would still be invalid after 1 pass of expression 3.  It would still be invalid after a 2nd pass.  Because of this, the beginning and end rule should be used in a loop until no matches are found. This doesn't help performance, but I was willing to compromise since my largest extranet (9000 files and hundreds of folders) was processed within a minute. Plus, I know the minute I post this someone's going to read it and say, "What was he thinking?  It's so much faster to do it this way...".&lt;/p&gt;  &lt;h4&gt;Fixing length restrictions&lt;/h4&gt;  &lt;p&gt;To make sure you include as many characters from the original folder or file name as possible, the naming restrictions should be enforced before the length restrictions.&lt;/p&gt;  &lt;p&gt;To know how long a file name can be, it's important to know how close we are to the maximum allowed path length. Since I'm using a physical file hierarchy to stage the files, I can simply check the current folder's path length. Instead of going into too much detail about this, take a look at the maxLength integer in the following code listing. maxLength is what I used to determine how long a folder or file could be given the current path length.&lt;/p&gt;  &lt;h4&gt;An example method in C#&lt;/h4&gt;  &lt;p&gt;Following is the method I ended up with, along with some global variable initializations. You'll notice I added the tab character to the invalid characters list.  During an export, I found a file name with embedded tab characters, so it was added to the list as well.&lt;/p&gt;  &lt;div    style="border: 1px dashed black; background: white none repeat scroll 0% 50%; padding-left: 20px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-bottom: 15px;font-family:lucida console;font-size:9pt;color:black;"&gt;   &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;
private&lt;/span&gt; &lt;span style="color:blue;"&gt;const&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; MAXFOLDERLENGTH = 128, MAXFILELENGTH = 123;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;int&lt;/span&gt; MAXURLLENGTH = 259;

&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt; invalidCharsRegex =&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt;(&lt;span style="color:maroon;"&gt;@"[\*\?\|\\\t/:""'&amp;lt;&amp;gt;#{}%~&amp;amp;]"&lt;/span&gt;, &lt;span style="color:teal;"&gt;RegexOptions&lt;/span&gt;.Compiled);

&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt; invalidRulesRegex = &lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt;(&lt;span style="color:maroon;"&gt;@"\.{2,}"&lt;/span&gt;, &lt;span style="color:teal;"&gt;RegexOptions&lt;/span&gt;.Compiled);

&lt;/pre&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt; startEndRegex = &lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt;(&lt;span style="color:maroon;"&gt;@"^[\. ]|[\. ]$"&lt;/span&gt;, &lt;span style="color:teal;"&gt;RegexOptions&lt;/span&gt;.Compiled);

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt; extraSpacesRegex = &lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;Regex&lt;/span&gt;(&lt;span style="color:maroon;"&gt;" {2,}"&lt;/span&gt;, &lt;span style="color:teal;"&gt;RegexOptions&lt;/span&gt;.Compiled);

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; Returns a folder or file name that &lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; conforms to SharePoint's naming restrictions&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name="original"&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; The original file or folder name.  &lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; For files, this should be the file name without the extension. &lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name="currentPathLength"&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; The current folder's path length&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;param name="maxItemLength"&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; The maximum allowed number of characters for this file or folder.&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; For a file, it will be MAXFILELENGTH.&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; For a folder, it will be MAXFOLDERLENGTH.&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:gray;"&gt;///&lt;/span&gt;&lt;span style="color:green;"&gt; &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; GetSharePointFriendlyName(&lt;span style="color:blue;"&gt;string&lt;/span&gt; original&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    , &lt;span style="color:blue;"&gt;int&lt;/span&gt; currentPathLength, &lt;span style="color:blue;"&gt;int&lt;/span&gt; maxItemLength)&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;{&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// remove invalid characters and some initial replacements&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;string&lt;/span&gt; friendlyName = extraSpacesRegex.Replace(&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        invalidRulesRegex.Replace(&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;            invalidCharsRegex.Replace(&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;                original, &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Empty).Trim()&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;            , &lt;span style="color:maroon;"&gt;"."&lt;/span&gt;)&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        , &lt;span style="color:maroon;"&gt;" "&lt;/span&gt;);

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// assign maximum item length&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;int&lt;/span&gt; maxLength = (currentPathLength + maxItemLength &amp;gt; MAXURLLENGTH)&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        ? MAXURLLENGTH - currentPathLength&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        : maxItemLength;

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt; (maxLength &amp;lt;= 0)&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        &lt;span style="color:blue;"&gt;throw&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:teal;"&gt;ApplicationException&lt;/span&gt;(&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;            &lt;span style="color:maroon;"&gt;"Current path is too long for importing into SharePoint"&lt;/span&gt;);

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// return truncated name if length exceeds maximum          &lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt; (friendlyName.Length &amp;gt; maxLength)&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        friendlyName = friendlyName.Substring(0, maxLength - 1).Trim();

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:green;"&gt;// finally, check beginning and end for periods and spaces&lt;/span&gt;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;while&lt;/span&gt; (startEndRegex.IsMatch(friendlyName))&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;        friendlyName = startEndRegex.Replace(&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;            friendlyName, &lt;span style="color:teal;"&gt;String&lt;/span&gt;.Empty);

&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;    &lt;span style="color:blue;"&gt;return&lt;/span&gt; friendlyName;&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;A typical call to this method would look similar to the following. In this listing, parent is a DirectoryInfo object pointing to the current folder.&lt;/p&gt;

&lt;div style="background: white none repeat scroll 0% 50%; padding-left: 20px; font-size: 9pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: lucida console;"&gt;
&lt;pre style="margin: 0px;"&gt;fileName = GetSharePointFriendlyName(fileName&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    , parent.FullName.Length + 1, MAXFILELENGTH);&lt;/pre&gt;
&lt;pre style="margin: 0px;"&gt;folderName = GetSharePointFriendlyName(folderName&lt;/pre&gt;  &lt;pre style="margin: 0px;"&gt;    , parent.FullName.Length + 1, MAXFOLDERLENGTH);&lt;/pre&gt;
&lt;/div&gt;&lt;h4&gt;Testing the import to SharePoint using empty files&lt;/h4&gt;&lt;p&gt;The best test would be to actually upload the files via WebDAV to a staging environment.  However, if you receive an error message because of name restrictions or path length during the process, it's difficult to pick back up where the error occurred. &lt;/p&gt;&lt;p&gt;To quickly preview an upload, I modified my export utility to create empty files instead of building the folder hierarchy with the actual files. You can use these for a mock import in WebDAV even though SharePoint's UI will not allow you upload an empty file. The following line was used to create the files.
&lt;/p&gt;&lt;div    style="background: white none repeat scroll 0% 50%; padding-left: 20px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-bottom: 20px;font-family:lucida console;font-size:9pt;color:black;"&gt;&lt;pre style="margin: 0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:teal;"&gt;StreamWriter&lt;/span&gt; sw = &lt;span style="color:teal;"&gt;File&lt;/span&gt;.CreateText(fileName.ToString())) { };&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The using statement makes sure the StreamWriter is closed after the file is created. I learned this the hard way when the OS threw an exception about a file being locked.&lt;/p&gt;&lt;p&gt;Another benefit of using empty files is to preview the migration for your users. They can browse the document library and offer their approval. Since we've had to remove some characters and possibly truncate names, this could be very important to the success of the migration.  &lt;/p&gt;&lt;h4&gt;Export Utility&lt;/h4&gt;&lt;p&gt;Just to offer some eye candy for this post, I ended up with something that looked like this:&lt;/p&gt;&lt;p&gt;&lt;img style="border: 0px none ;" alt="Export utility screenshot" src="http://lh6.ggpht.com/pictures.jones.family/SDsT-uC4WmI/AAAAAAAAADw/-qKJwEWWAwo/image%5B5%5D.png?imgmax=800" border="0" height="331" width="541" /&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:c7faba72-ed3b-4a27-933a-4825b4f55923" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Regular%20Expressions" rel="tag"&gt;Regular Expressions&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-7813192851480443819?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=M4F2hWNI"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=GTzTBdcT"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=GTzTBdcT" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=Dxdoa3Fd"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=Dxdoa3Fd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=MqwOMfF2"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=dnCKHCPi"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=dnCKHCPi" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/UFwaXAcAqbo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/7813192851480443819/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/05/importing-files-into-sharepoint.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7813192851480443819?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/7813192851480443819?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/05/importing-files-into-sharepoint.html" title="Importing files into a SharePoint document library using regular expressions and WebDAV" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry gd:etag="W/&quot;D0QASXc8eSp7ImA9WxJUEk4.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-1113100445454560466</id><published>2008-05-21T21:22:00.003-05:00</published><updated>2009-07-10T09:15:48.971-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-10T09:15:48.971-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SharePoint" /><category scheme="http://www.blogger.com/atom/ns#" term="Active Directory" /><title>Creating a batch of Active Directory accounts for SharePoint with the help of Excel</title><content type="html">&lt;p&gt;I recently deployed an extranet using SharePoint and Active Directory (AD). At my company, when a new extranet is requested, the request is typically accompanied with a list of new user accounts that should be created as well. Sometimes this list can contain over 20 accounts.&lt;/p&gt;  &lt;p&gt;Using the Active Directory Users and Computers applet is not my favorite interface for creating accounts, and especially not for a large batch of them.  I found myself having to edit an account 3 times to get it to appear the way I wanted in AD and in SharePoint.  I looked into my scripting options, and ran across &lt;a title="dsadd user command documentation from TechNet" href="http://technet2.microsoft.com/windowsserver2008/en/library/9e274947-2dec-4448-a822-8dd2f688fcec1033.mspx?mfr=true"&gt;dsadd&lt;/a&gt;.  This command has everything I need in order to create AD accounts in one step.  However, it's very tedious to have to type the command given the customization I wanted and to remember the syntax rules.&lt;/p&gt;  &lt;h4&gt;Using Excel to create dsadd commands&lt;/h4&gt;  &lt;p&gt;To make this process easier, I created an Excel &lt;a title="Download the dsadd command generator spreadsheet" onclick="javascript: pageTracker._trackPageview('/downloads/dsadd-Command-Generator');" href="http://pages.simplyaprogrammer.com/dsadd-Command-Generator.xls"&gt;spreadsheet&lt;/a&gt; to generate the dsadd command based on a collection of cells. I've used Excel several times in the past to generate batches of commands or SQL statements. Even if you don't need a dsadd command, this spreadsheet is a useful reference for building other batches of commands.&lt;/p&gt;  &lt;p&gt;&lt;a title="Download the dsadd command generator spreadsheet" onclick="javascript: pageTracker._trackPageview('/downloads/dsadd-Command-Generator');" href="http://pages.simplyaprogrammer.com/dsadd-Command-Generator.xls"&gt;&lt;img style="border-width: 0px;" alt="Screenshot of dsadd spreadsheet - Click to download" src="http://lh3.ggpht.com/_z57pLzpI_zU/SldMhsideaI/AAAAAAAAAJM/WMVcqx9RFDM/s400/dsadd-spreadsheet-screenshot.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After downloading the spreadsheet, you'll need to fill in the data for your company's Active Directory and the OU you'll be creating the accounts in.  You'll then probably want to extend the cell formulas beyond the single row that's included.  After you've filled in everything, copy the cells in the script column and paste it into a text editor like Notepad.  Save it as a cmd file, and you can double click it to execute all the scripts. &lt;/p&gt;  &lt;p&gt;You can add or remove more columns to accommodate the other dsadd parameters.  Regarding additional information fields, I was only interested in company and department.&lt;/p&gt;  &lt;p&gt;Tip: If you'd like to save the results of the commands, add an append &lt;a title="TechNet: Using command redirection operators" href="http://technet.microsoft.com/en-us/library/bb490982.aspx"&gt;redirection operator&lt;/a&gt; to the call to the script file from a console screen.  This would be helpful to find out what went wrong if some of your commands failed. &lt;/p&gt;  &lt;p&gt;For example,&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;createaccounts.cmd &amp;gt;&amp;gt; c:\dsadd.log 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;will send all the commands and any errors to the dsadd.log file instead of the console.  It's important to remember to add &lt;code&gt;2&amp;gt;&amp;amp;1&lt;/code&gt; at the end, since dsadd sends errors to stderr, not stdout.&lt;/p&gt;  &lt;h4&gt;Adding a batch of user accounts to a SharePoint site collection&lt;/h4&gt;  &lt;p&gt;After the accounts have been added to AD, you can reuse the spreadsheet to add multiple accounts to SharePoint. Following are the steps I've used to translate a column of user account names into a semicolon-delimited list for the add user screen in SharePoint.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Copy the column of cells that have the account name (Domain\username) and Paste Special into Word to avoid it creating a table. You only want unformatted text. &lt;/li&gt;    &lt;li&gt;Replace each line feed character (type ^p into the find box) with a semicolon. &lt;/li&gt;    &lt;li&gt;Copy and paste into the SharePoint add user screen. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:bbc7b895-8150-49de-8a14-90bd18f309e1" style="margin: 0px; padding: 0px; display: inline;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint" rel="tag"&gt;SharePoint&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Excel" rel="tag"&gt;Excel&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Active%20Directory" rel="tag"&gt;Active Directory&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-1113100445454560466?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=ymBtfgWF"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=7Rc606SJ"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=7Rc606SJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=z4AtLkkb"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=z4AtLkkb" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=jcsAoHQC"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=c5qsXzQ6"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=c5qsXzQ6" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/8X7p6Vbt63w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/1113100445454560466/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/05/creating-batch-of-active-directory.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/1113100445454560466?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/1113100445454560466?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/05/creating-batch-of-active-directory.html" title="Creating a batch of Active Directory accounts for SharePoint with the help of Excel" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_z57pLzpI_zU/SldMhsideaI/AAAAAAAAAJM/WMVcqx9RFDM/s72-c/dsadd-spreadsheet-screenshot.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry><entry gd:etag="W/&quot;A04CRHwycCp7ImA9WxdTF08.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-8882772456806701607</id><published>2008-05-11T16:04:00.001-05:00</published><updated>2008-05-13T20:52:45.298-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-13T20:52:45.298-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET Compact Framework" /><title>A Windows Mobile feed reader: FeedFly</title><content type="html">&lt;p&gt;&lt;a title="FeedFly - Open source Windows Mobile feed reader hosted on CodePlex" href="http://www.codeplex.com/feedfly" target="_blank"&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="56" alt="FeedFly logo - Windows Mobile feed reader" src="http://lh5.ggpht.com/tjneweyes/SCdfUg2ng6I/AAAAAAAAACM/tAwYXStVzQw/Logo_Gray%5B8%5D.jpg?imgmax=800" width="240" align="left" border="0" /&gt;&lt;/a&gt; Yesterday I published my first open source project, &lt;a title="FeedFly - Open source Windows Mobile feed reader hosted on CodePlex" href="http://www.codeplex.com/feedfly"&gt;FeedFly&lt;/a&gt;. FeedFly was the focus of my senior project course last semester. This class is required to graduate with a bachelor in Computer Science at &lt;a title="University of Houston, Clear Lake - School of Science and Computer Engineering" href="http://prtl.uhcl.edu/portal/page/portal/HOMEPAGE/TAB_PROGRAMS?OSS=/PGM/OVERVIEW/SCE" target="_blank"&gt;my university&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;We were given the choice to write any kind of software application, but it had to get enough votes in order to form a team. I was lucky since my idea got a couple votes. About 300 man hours later, we gave our final presentation and I nervously gave a demo. Besides ActiveSync messing with my device, the demo was fine. I had to leave it on, since I was relying on it for my data connection. The room we were presenting in was like a steel box with no windows.&lt;/p&gt;&lt;p&gt;Including myself, we were a team of 3 programmers. I attempted to manage the timeline of the project using a modified version of &lt;a title="Scrum software development methodology - As presented by Mountain Goat Software" href="http://www.mountaingoatsoftware.com/scrum" target="_blank"&gt;Scrum&lt;/a&gt;. It was as effective as it could be given we couldn't do daily stand-ups. Plus, it made the Gannt chart something very easy to look at: &lt;/p&gt;&lt;p&gt;&lt;img style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height="199" alt="Project Plan Schedule" src="http://lh3.ggpht.com/tjneweyes/SCdfVA2ng7I/AAAAAAAAACU/U7RwXkFLvhc/Project%20Plan%20Schedule%20-%20Small%5B5%5D.jpg?imgmax=800" width="640" border="0" /&gt; &lt;/p&gt;&lt;p&gt;This chart shows our 1 week architecture sprint at the beginning, 3 2-week development sprints, and a 1-week documentation and presentation sprint. However, generating the schedule wasn't easy. I had to enter our weird college work hours and account for our school holidays for Microsoft Project to get the end date just right.&lt;/p&gt;&lt;p&gt;I'm very happy with how FeedFly turned out. If I wasn't, it wouldn't have been published as an open source project. I learned a lot about the .NET Compact Framework during development, and I think the project serves as a good example application that implements some best practices. If you're a compact framework developer, I'd love to get your feedback about it.&lt;/p&gt;&lt;p&gt;Oh, and I got an A on the project by the way.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1cd34ec8-7fd7-43b9-b888-af876ccc2ba0" style="PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/.NET%20Compact%20Framework" rel="tag"&gt;.NET Compact Framework&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Windows%20Mobile" rel="tag"&gt;Windows Mobile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Feed%20reader" rel="tag"&gt;Feed reader&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Feed" rel="tag"&gt;Feed&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RSS" rel="tag"&gt;RSS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Atom" rel="tag"&gt;Atom&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-8882772456806701607?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=Botrb3p6"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=fBhOexKK"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=fBhOexKK" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=cOpo5VdR"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=cOpo5VdR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=IjUrmjc9"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=hfWSKQn7"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=hfWSKQn7" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/djtAYUoFBh8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/8882772456806701607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/05/windows-mobile-feed-reader-feedfly.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8882772456806701607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8882772456806701607?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/05/windows-mobile-feed-reader-feedfly.html" title="A Windows Mobile feed reader: FeedFly" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry><entry gd:etag="W/&quot;CkMMSXg-fyp7ImA9WxdTFUk.&quot;"><id>tag:blogger.com,1999:blog-5755313800906142262.post-8950301395261866046</id><published>2008-05-02T09:48:00.000-05:00</published><updated>2008-05-11T16:14:48.657-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-11T16:14:48.657-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Blogging" /><title>RSS can't catch up to email yet</title><content type="html">&lt;p&gt;When I first learned about &lt;a href="http://www.w3schools.com/xml/default.asp"&gt;XML&lt;/a&gt;, I thought it sounded like a great idea. I had a hard time coming up with an excuse to use it in my earlier programming days (would have involved a rewrite, or couldn't cost-justify the implementation of that cool, new self-describing configuration system), but .NET changed all of that (for me, being a Microsoft-experienced dev) and now XML is extremely easy to work with. Even Microsoft is using it in Office 2007 for all their new file formats. For example, did you know you could rename a docx file to zip then unpack and inspect it? What you'll see is a folder hierarchy of XML files, which could be edited in Notepad if you're so inclined. If you eat XML for breakfast, you don't even need Office to create Office documents. I think we would all agree that XML has definitely arrived and is here to stay. &lt;/p&gt;
&lt;p&gt;I mention RSS in the title because this particular XML &lt;a href="http://en.wikipedia.org/wiki/Web_feed"&gt;web feed&lt;/a&gt; standard has become so popular it has become synonymous with "web feed" itself. The following video pretty much sums up the goals of using web feeds instead of the typical models of gathering your information from the internet.&lt;/p&gt;
&lt;p&gt;&lt;embed src="http://www.youtube.com/v/0klgLsSxGsU&amp;amp;hl=" width="425" height="355" type="application/x-shockwave-flash" wmode="transparent" color2="0x999999" rel="0&amp;amp;color1="&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;In short, web feeds are a perfect application of the theory of XML. It makes personal blogs just as "subscribe-able" as our magazines and radio shows available at any time via podcasts. I should probably spend an entire post praising podcasts since I'm always listening to them now. Ever since my phone became my mp3 player, my car stereo hasn't been turned on (I have one of those after-market ones that plays mp3 disks, too. It always reads "Standby"). I fear this introduction was a bit lengthy, but I'm trying make everyone in my audience happy (and may it never change). &lt;/p&gt;
&lt;p&gt;Why the negative title about RSS? My point is that even though web feeds are more popular now than ever before, the barrier of entry is still too high to participate in all of its glory. I'm sure you know plenty of non-technical computer users out there. Are they subscribing to feeds? Probably not. Last semester, I graduated with my Computer Science bachelor's degree (finally - it took me 7 years with my day job). My senior project was a Windows Mobile feed reader named FeedFly (In process of creating an open source project for this - stay tuned). During our final presentation, in a room full of technical experts and industry advisors, we asked how many of them actually subscribed to blogs (indicating they regularly use a feed reader). I would say the response was less than 10 percent, and I was one of those with a raised hand. &lt;/p&gt;
&lt;p&gt;I created a training session on blogging for my company 3 years ago. I was able to convince one of the teams to replace their email newsletter with a blog, and boy did it take off. It's still on the &lt;a href="http://www.google.com/search?q=energy+legal"&gt;first page&lt;/a&gt; of a Google search without having to pay any &lt;a href="http://en.wikipedia.org/wiki/Search_engine_optimization"&gt;SEO&lt;/a&gt; "specialist" vendors (I don't like most of these - another post). In this training, I predicted that web feeds would take off once Internet Explorer 7 and Outlook 2007 started shipping with built-in feed readers. I was wrong. Once I used the Outlook 2007 RSS client, I understand why. It's nowhere near as integrated as it needs to be in order to get everyone to use it. Plus, it's not easy to work with once you have a lot of subscriptions. If you're curious what reader I use, it's &lt;a href="http://www.snarfware.com/"&gt;Snarfer&lt;/a&gt; with the &lt;a href="http://www.bloglines.com/"&gt;Bloglines&lt;/a&gt; synchronization feature. Oh, and &lt;a href="http://www.dopplerradio.net/"&gt;Doppler&lt;/a&gt; for the podcasts. &lt;/p&gt;
&lt;p&gt;What's the solution for the lack of adoption so far? The best solution would be to purchase your own domain name for hosting your blog, so you have the freedom of moving it to different hosts. Then, offer an &lt;b&gt;email subscription&lt;/b&gt; feature for those that don't use readers. I'm sure future versions of feed readers will be much more user-friendly, and I'm still convinced it will take off. &lt;a href="http://www.feedburner.com/"&gt;FeedBurner&lt;/a&gt; is one of several free services that offers email distribution. With email distribution, your subscribers will receive an email with your new posts to the feed. Now, you won't become frustrated when people get tired of opening their feed readers you set up for them so they can check if your blog has a new post.&lt;/p&gt;
&lt;p&gt;Even though FeedBurner is quite useful for email, I see it's primary purpose as an abstraction of a feed, so the feed source can be changed independent of all subscriptions. If you didn't have this abstraction layer set up and you moved your feed to a new hosting platform, you'd have to post a request on your old feed informing your subscribers to change their subscription to the new feed address. I've seen these posts several times in the feeds I've subscribed to over the years.&lt;/p&gt;
&lt;p&gt;Let's be honest. If you don't have more than a couple of feeds subscribed, it's not worth setting up a blog reader at all. The simple action of opening a reader is step 1. Step 1 could have been to just visit the web site instead. If you have 2 feeds subscribed, you save yourself a whole step. That's a lot of software installation or configuration just to save a step. Maybe web feeds will never take off because of this. They only offer a significant advantage to someone that is spending too much time looking around for updated information.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5755313800906142262-8950301395261866046?l=simplyaprogrammer.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=pLIxAibk"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=GcG6vOYa"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=GcG6vOYa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=bbtwXbRD"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=bbtwXbRD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=ai02DyAq"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/simplyaprogrammer?a=LWRF5paN"&gt;&lt;img src="http://feeds.feedburner.com/~f/simplyaprogrammer?i=LWRF5paN" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/simplyaprogrammer/~4/aFizM25bKKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://simplyaprogrammer.com/feeds/8950301395261866046/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://simplyaprogrammer.com/2008/05/rss-cant-catch-up-to-email-yet.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8950301395261866046?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5755313800906142262/posts/default/8950301395261866046?v=2" /><link rel="alternate" type="text/html" href="http://simplyaprogrammer.com/2008/05/rss-cant-catch-up-to-email-yet.html" title="RSS can't catch up to email yet" /><author><name>Tim Jones</name><uri>http://www.blogger.com/profile/04669425604711302507</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="16305903319261422806" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></entry></feed>
