<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8949165425355567540</id><updated>2012-02-06T16:29:23.844-08:00</updated><category term='different branding'/><category term='Expression Box'/><category term='custom themes'/><category term='draft form'/><category term='css'/><category term='Great Plains'/><category term='Validation'/><category term='stylesheet'/><category term='import'/><category term='Rich Text'/><category term='SharePoint'/><category term='Visio'/><category term='MCTS'/><category term='XHTML'/><category term='GP Web Services'/><category term='audience targeting'/><category term='Custom Save'/><category term='branding'/><category term='Exported Diagrams'/><category term='global stylesheet'/><category term='Diagrams'/><category term='Processes'/><category term='InfoPath'/><title type='text'>sharepoint makes me cry...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-5980984522827983564</id><published>2009-08-26T05:53:00.000-07:00</published><updated>2009-08-26T05:54:40.798-07:00</updated><title type='text'>Blog Moved</title><content type='html'>Since i've been finding Wordpress much easier to use along with Windows Live Writer - I'm moving my blog there from now on.&lt;br /&gt;&lt;br /&gt;Same dismal title:&lt;br /&gt;&lt;br /&gt;http://SharePointMakesMeCry.wordpress.com&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cheers!&lt;br /&gt;davros.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-5980984522827983564?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/5980984522827983564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=5980984522827983564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5980984522827983564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5980984522827983564'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2009/08/blog-moved.html' title='Blog Moved'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-8267396846435550126</id><published>2009-07-01T02:19:00.000-07:00</published><updated>2009-08-19T02:52:35.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='draft form'/><category scheme='http://www.blogger.com/atom/ns#' term='Validation'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath'/><category scheme='http://www.blogger.com/atom/ns#' term='Custom Save'/><title type='text'>InfoPath Custom Save Action: Save as Draft and Avoid Validation</title><content type='html'>Recently i’ve been working on a project that has required a user to be able to save a form to SharePoint as they are working on it, a kind of draft. The only way to do this is to allow the user to use the standard ‘Save’ function on the toolbar (in IP client or browser). This offers the user the option to choose a filename – fine if there’s going to be 10 forms in the library, but if there are 000’s then users are going to be overwriting each other’s work.&lt;br /&gt;&lt;br /&gt;First step was to set up a Submit Data Connection to the SharePoint library. This is good because I can generate a unique filename and post the document there. However, since the connection is a ‘Submit’, the form will not allow you to run it until all validation errors are cleared… no good for draft forms.&lt;br /&gt;&lt;br /&gt;Next step was to jump into code behind - clear the validation errors in the collection, then submit the form:&lt;br /&gt;&lt;table style="BORDER: #000000 1px solid; BACKGROUND-color: #CCCCCC" cellspacing="0" cellpadding="0" width="500" &gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="500"&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Errors.DeleteAll();&lt;br /&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Submit();&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This works fine, BUT – if the user wants to save a draft and continue working, all the validation has been basically disabled in the form until it is reloaded. &lt;strong&gt;SO:&lt;/strong&gt; final solution was to manually write the xml file into the forms library. This was actually less hairy than it sounds. It consists of 2 methods in code behind – 1 to process a HTTP PUT command, and one to basically call it. The web request method is pretty generic: &lt;span style="font-family:cou;"&gt;&lt;strong&gt;url:&lt;/strong&gt;&lt;/span&gt; The full URL of the file (&lt;a href="http://sharepoint/forms/myform123.xml"&gt;http://sharepoint/forms/myform123.xml&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:cou;"&gt;&lt;strong&gt;header:&lt;/strong&gt;&lt;/span&gt; The header information in an infopath file (the xml declaration and processing instructions). The method takes the header, selects the form data from the root node (in this case /my:Application), and builds a string before pushing that through the web request.&lt;br /&gt;&lt;br /&gt;&lt;table style="BORDER: #000000 1px solid; BACKGROUND-color: #CCCCCC" cellspacing="0" cellpadding="0" width="500" &gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="500"&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private &lt;/span&gt;System.Net.&lt;span style="color:teal;"&gt;WebRequest &lt;/span&gt;BuildRequest(&lt;span style="color:blue;"&gt;string &lt;/span&gt;url, &lt;span style="color:blue;"&gt;string &lt;/span&gt;header)&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;xmlString = header;&lt;br /&gt;            &lt;br /&gt;           xmlString += MainDataSource.CreateNavigator().SelectSingleNode(&lt;span style="color:maroon;"&gt;"/my:Application"&lt;/span&gt;, NamespaceManager).OuterXml;&lt;br /&gt;&lt;br /&gt;           &lt;span style="color:green;"&gt;//now send the web request to load the document&lt;br /&gt;           &lt;/span&gt;System.Net.&lt;span style="color:teal;"&gt;WebRequest &lt;/span&gt;request = System.Net.&lt;span style="color:teal;"&gt;WebRequest&lt;/span&gt;.Create(url);&lt;br /&gt;&lt;br /&gt;           request.Credentials = System.Net.&lt;span style="color:teal;"&gt;CredentialCache&lt;/span&gt;.DefaultNetworkCredentials;&lt;br /&gt;           request.Method = &lt;span style="color:maroon;"&gt;"PUT"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;           System.Text.&lt;span style="color:teal;"&gt;ASCIIEncoding &lt;/span&gt;enc = &lt;span style="color:blue;"&gt;new &lt;/span&gt;System.Text.&lt;span style="color:teal;"&gt;ASCIIEncoding&lt;/span&gt;();&lt;br /&gt;&lt;br /&gt;           &lt;span style="color:blue;"&gt;byte&lt;/span&gt;[] buffer = enc.GetBytes(xmlString);&lt;br /&gt;&lt;br /&gt;           &lt;span style="color:blue;"&gt;using &lt;/span&gt;(&lt;span style="color:teal;"&gt;Stream &lt;/span&gt;stream = request.GetRequestStream())&lt;br /&gt;           {&lt;br /&gt;               stream.Write(buffer, 0, buffer.Length);&lt;br /&gt;           }&lt;br /&gt;           &lt;span style="color:blue;"&gt;return &lt;/span&gt;request;&lt;br /&gt;       }&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;The following method just sets up the header (copied from a locally saved infopath form), and calls the web request method. Note: for a filename, I am using a field in my form called ‘GUID’, so I just select that from the form and build my url string with it.&lt;table style="BORDER: #000000 1px solid; BACKGROUND-color: #CCCCCC" cellspacing="0" cellpadding="0" width="500" &gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;td valign="top" width="500"&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;public void &lt;/span&gt;SaveAndContinue()&lt;br /&gt;       {&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;guid = MainDataSource.CreateNavigator().SelectSingleNode(&lt;span style="color:maroon;"&gt;"/my:Application/my:Logic/my:GUID"&lt;/span&gt;, NamespaceManager).Value;&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;url = &lt;span style="color:maroon;"&gt;"http://chamois.dev.iwdev.isc-software.local/ChamoisPOC/" &lt;/span&gt;+ guid + &lt;span style="color:maroon;"&gt;".xml"&lt;/span&gt;;&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;relativeUrl = &lt;span style="color:maroon;"&gt;"/ChamoisPOC/" &lt;/span&gt;+ guid + &lt;span style="color:maroon;"&gt;".xml"&lt;/span&gt;;&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;header = &lt;span style="color:maroon;"&gt;@"&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;&lt;br /&gt;                  &amp;lt;?mso-infoPathSolution name='urn:schemas-microsoft-com:office:infopath:MasterSipp:-myXSD-2009-07-21T08-09-49'&lt;br /&gt;               solutionVersion='1.0.0.650' productVersion='12.0.0.0' PIVersion='1.0.0.0'&lt;br /&gt;               href='http://chamois.dev.iwdev.isc-software.local/FormServerTemplates/MasterSipp.xsn'?&amp;gt;&lt;br /&gt;                  &amp;lt;?mso-application progid='InfoPath.Document' versionProgid='InfoPath.Document.2'?&amp;gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;           System.Net.&lt;span style="color:teal;"&gt;WebRequest &lt;/span&gt;request = BuildRequest(url,header);&lt;br /&gt;&lt;br /&gt;           &lt;span style="color:green;"&gt;//request.Credentials = objCredentials;&lt;br /&gt;           &lt;/span&gt;System.Net.&lt;span style="color:teal;"&gt;WebResponse &lt;/span&gt;response = request.GetResponse();&lt;br /&gt;           &lt;span style="color:teal;"&gt;StreamReader &lt;/span&gt;rdr = &lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:teal;"&gt;StreamReader&lt;/span&gt;(response.GetResponseStream());&lt;br /&gt;           &lt;span style="color:blue;"&gt;string &lt;/span&gt;htmlresponse = rdr.ReadToEnd();&lt;br /&gt;           rdr.Close();&lt;br /&gt;           response.Close();&lt;br /&gt;&lt;br /&gt;           &lt;span style="color:green;"&gt;//check item was added&lt;br /&gt;           &lt;/span&gt;&lt;span style="color:blue;"&gt;int &lt;/span&gt;itemID = CheckItemExists(&lt;span style="color:maroon;"&gt;"FileLeafRef"&lt;/span&gt;, guid + &lt;span style="color:maroon;"&gt;".xml"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"Chamois-POC"&lt;/span&gt;);&lt;br /&gt;           &lt;span style="color:blue;"&gt;if &lt;/span&gt;(itemID == -1)&lt;br /&gt;               &lt;span style="color:blue;"&gt;throw new &lt;/span&gt;&lt;span style="color:teal;"&gt;ApplicationException&lt;/span&gt;(&lt;span style="color:maroon;"&gt;"Document has not been loaded. See server response\n" &lt;/span&gt;+ htmlresponse);&lt;br /&gt;       }&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;(In production, you’d also want to call the GetListItems webservice to ensure it was saved correctly)&lt;br /&gt;&lt;br /&gt;So, after being tied up to whichever event you choose (i’m saving in the background as the user fills out the form) this should quietly dump the xml file into a library. For some reason the library doesn’t recognise the xml as being an InfoPath file, so to open the form again you’ll need to send the user to the FormServer.aspx?xmllocation=http://sharepoint/forms/123456.xml page, and it will work fine.&lt;br /&gt;&lt;br /&gt;If you publish the form as administrator approved, and apply the content type to the library you’re saving into, it will automatically populate the promoted properties as it saves. Lucky, eh…&lt;br /&gt;Hopefully this makes sense – I searched for a neater way of doing this for ages, but i’ve found this approach to be the most manageable.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;.davros.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-8267396846435550126?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/8267396846435550126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=8267396846435550126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8267396846435550126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8267396846435550126'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2009/07/infopath-custom-save-action-save-as.html' title='InfoPath Custom Save Action: Save as Draft and Avoid Validation'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-8965379720383515426</id><published>2009-03-25T04:43:00.001-07:00</published><updated>2009-03-31T02:21:31.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Visio'/><category scheme='http://www.blogger.com/atom/ns#' term='Processes'/><category scheme='http://www.blogger.com/atom/ns#' term='Diagrams'/><category scheme='http://www.blogger.com/atom/ns#' term='Exported Diagrams'/><title type='text'>Visio Diagrams in SharePoint</title><content type='html'>&lt;div&gt;I've recently been working on a project for a customer who wanted to base their system around Visio process diagrams. We found a neat way of using standard Visio and SharePoint functionality to make this work for them - allowing them to build a system based on interactive diagrams.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;System Structure:&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The system is based on one process diagram per site. Of course you could use multiple ones per site - but this approach was simpler to manage. Since the processes could relate to multiple departments, and were to categorised in various ways, we decided to opt for creating them all at the same level, directly under a site directory.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Multiple higher level processes could relate to a single sub-process, so this flat structure allowed greater flexibility - and processes were to be connected by manual hyperlinks in the diagrams.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Step 1: Create a SharePoint site.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Note: For our client, I created a custom site definition for them to use. This was to enable me to set the default layout of the home page, as well as activate the publishing feature so they could create publishing pages alongside the processes.&lt;/div&gt;&lt;br /&gt;&lt;p&gt;My site just contained a document library, and a large page viewer on the home page:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 257px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317093512711613970" border="0" alt="" src="http://2.bp.blogspot.com/_L7ZIPY1zx_w/ScocYO61rhI/AAAAAAAAAB0/UFKFm8JB6vM/s400/sl1.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Step 2: Upload any supporting documents to the document library.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;If your diagram refers to supporting documents, the library in the process site is a good place to store them.&lt;br /&gt;&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 329px; DISPLAY: block; HEIGHT: 116px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317108807980382082" border="0" alt="" src="http://4.bp.blogspot.com/_L7ZIPY1zx_w/ScoqSiPFd4I/AAAAAAAAACk/vBMJUMKrel0/s400/sl2.png" /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Step 3: Link your Visio diagram to your supporting documents&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Copying the URL's of the documents you've uploaded, you can create hyplerlinks from your Visio objects to them - meaning when a user click on the object, the supporting document will open up:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Copy the URL of the doc:&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 123px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317108285940455522" border="0" alt="" src="http://1.bp.blogspot.com/_L7ZIPY1zx_w/Scop0JfEWGI/AAAAAAAAACE/ZE4fnR2gm8o/s400/sl3.png" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Create hyperlink in Visio. To connect 2 process sites together - you can just create hyperlinks here to another process site.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 339px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317108286275798194" border="0" alt="" src="http://2.bp.blogspot.com/_L7ZIPY1zx_w/Scop0KvBRLI/AAAAAAAAACM/Xoe2WKYboUk/s400/sl4.png" /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Step 4: Export our Diagram from Visio&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In Visio, go File -&gt; save as web page&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Select a location for the exported files (there will be about 30 of them)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Click 'Publish'. This will allow you to select the features you want to use on your diagram. A highly useful one is 'Pan and Zoom', which helps to cater for larger diagrams.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Make sure you have unticked the box which says "organise into folders". You want to export all the files into a single folder, to help uploading to SharePoint.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Step 5: Upload and display in SharePoint&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Create another document library in your process site, and upload the exported files:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 226px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317108297235511970" border="0" alt="" src="http://1.bp.blogspot.com/_L7ZIPY1zx_w/Scop0zkBOqI/AAAAAAAAACU/umxOgD-BzGw/s400/sl5.png" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Next - copy the URL of the main exported htm file (at the top - named after the process)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 334px; DISPLAY: block; HEIGHT: 285px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5317108298941428690" border="0" alt="" src="http://3.bp.blogspot.com/_L7ZIPY1zx_w/Scop056vc9I/AAAAAAAAACc/Xcl7RRrnKy4/s400/sl6.png" /&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Now, just plug that URL into a page viewer on your home page. PRESTO - you should have a SharePoint site dedicated to serving an interactive Visio diagram.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_L7ZIPY1zx_w/SdHgb9h5q1I/AAAAAAAAAC0/utGantdLLR8/s1600-h/sl7.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 304px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5319279405879110482" border="0" alt="" src="http://4.bp.blogspot.com/_L7ZIPY1zx_w/SdHgb9h5q1I/AAAAAAAAAC0/utGantdLLR8/s400/sl7.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;This can be a really neat way of consolidating your process diagrams using SharePoint.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;strong&gt;&lt;span style="font-size:85%;color:#003333;"&gt;.davros.&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-8965379720383515426?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/8965379720383515426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=8965379720383515426' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8965379720383515426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8965379720383515426'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2009/03/visio-diagrams-in-sharepoint.html' title='Visio Diagrams in SharePoint'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_L7ZIPY1zx_w/ScocYO61rhI/AAAAAAAAAB0/UFKFm8JB6vM/s72-c/sl1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-956812272633550682</id><published>2009-02-24T09:37:00.000-08:00</published><updated>2009-02-24T09:37:00.978-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='different branding'/><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='custom themes'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>User-Centric Themes: SharePoint Branding: Part 2</title><content type='html'>&lt;strong&gt;&lt;span style="font-size:180%;"&gt;Loading Different Themes Per User&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In my last post I talked about audience targeted branding - using a Content Query Web Part to pull in different CSS sheets depending on which audience the user was in.&lt;br /&gt;&lt;br /&gt;That works nicely, and being able to use audiences to gather users together is handy - but it doesn't allow you to brand the application pages and form pages. For that you need to use a theme - and you can't change the theme per user, it's set once per site.&lt;br /&gt;&lt;br /&gt;SO - I've come up with a neat trick to allow us to use a theme, but display a different CSS sheet to different sets of users.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;General Concepts&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;Essentially, we're going to use the same method as seen before - creating a custom theme on the server which references a single stylesheet deployed elsewhere (so when the theme is applied, it only links to the existing style sheet so changes to the 1 style sheet are applied globally). I have blogged this before: (&lt;a href="http://sharepointmakesmecry.blogspot.com/2008/11/creating-global-theme-using-single-css.html"&gt;http://sharepointmakesmecry.blogspot.com/2008/11/creating-global-theme-using-single-css.html&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Now we're going to extend this idea to include multiple global style sheets - and load individual ones depending on the user logged in. This can be hugely powerful and will allow for entirely different user experiences from user to user.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Steps &lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;1. &lt;strong&gt;Create our CSS files&lt;/strong&gt;. You are best to start by copying the CSS from an existing SP theme, like Simple, and then making your changes from there. We will create a number of CSS files:&lt;br /&gt;  a) A 'Common' one - This will be used to define any styles that are shared between all users.&lt;br /&gt;  b) 'Group 1 Style' - Bare CSS, and only re-defines the individual styles for group 1.&lt;br /&gt;  c) 'Group 2 Style' - Re-defines the style for group 2.&lt;br /&gt;  d) 'Group...N style' - One CSS per individual group.&lt;br /&gt;&lt;br /&gt;2. &lt;strong&gt;Upload all the CSS sheets to a common document library&lt;/strong&gt;. This should be a Document Library somewhere in the system which is accessible by all users. Make the library readable by all.&lt;br /&gt;&lt;br /&gt;3. &lt;strong&gt;Create SharePoint groups&lt;/strong&gt; in the same site to divide the users.&lt;br /&gt;&lt;br /&gt;4. &lt;strong&gt;Individually permission the CSS sheets&lt;/strong&gt; off to SharePoint groups, so only members of 'Group 1' can read Group1.css, and so on.&lt;br /&gt;&lt;br /&gt;5. &lt;strong&gt;Create our theme CSS file&lt;/strong&gt; to be deployed on the server. All this file will do is list all the CSS files in the document library, and import them all at runtime:&lt;br /&gt;&lt;br /&gt;eg.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@import:url('/doclibrary/common.css');&lt;br /&gt;@import:url('/doclibrary/group1.css');&lt;br /&gt;@import:url('/doclibrary/group2.css');&lt;br /&gt;.....&lt;br /&gt;@import:url('/doclibrary/groupN.css');&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. &lt;strong&gt;Deploy and apply the theme&lt;/strong&gt;. Now when you log in all the theme files will be referenced, but most of them will be denied - leaving only the ones you have permission to read. So as you log in as users from the different SharePoint groups then you should see different CSS files loaded.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hopefully you can see how powerful this could be!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#003333;"&gt;.davros.&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-956812272633550682?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/956812272633550682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=956812272633550682' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/956812272633550682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/956812272633550682'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2009/02/user-centric-themes-sharepoint-branding.html' title='User-Centric Themes: SharePoint Branding: Part 2'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-5572022476871549457</id><published>2009-01-27T20:00:00.000-08:00</published><updated>2009-01-27T20:00:00.670-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='different branding'/><category scheme='http://www.blogger.com/atom/ns#' term='stylesheet'/><category scheme='http://www.blogger.com/atom/ns#' term='branding'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='audience targeting'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>SharePoint: Audience Targeted Branding</title><content type='html'>&lt;p&gt;A while ago I had an interesting requirement: to brand a SharePoint system in such a way that different users logging in to the same sites are served with different branding experiences. I have finally gotten around to blogging the trick I used...&lt;/p&gt;&lt;p&gt;[Note: This article assumes you are already competant with the theory of branding SharePoint. If not I suggest you look at Heather Solomon's blog - she's a branding guru]&lt;/p&gt;&lt;p&gt;The customer was fortunately using MOSS, so I settled on the idea of Audience Targeted Branding.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Audiences&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Audiences in MOSS are built by collecting together groups of users based on their Profile Properties. This may be based on location / company / domain / department ....? Content in lists and libraries can then be 'targeted' to these users - so the same page can be seen by 2 different users and each will see content relevant to them.&lt;/p&gt;&lt;p&gt;Great - but how do we extend this to include their branding experience?&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Branding&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The Branding I am referring to is performed using CSS. Since the master page is set once per site - this cannot be changed for each user - (you'd need to start looking into variations for that). &lt;/p&gt;&lt;p&gt;The basic idea is to load a different Style Sheet to the browser for each audience. This is actually easier than it sounds.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Example&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Say I want the users logging in from 1 location to see all the links in red, and other users to see all the links in green. I am using a MOSS site with the publishing feature activated. I follow this process:&lt;/p&gt;&lt;p&gt;1. Build the 2 audiences (in shared service admin), based on the location property in the user profile.&lt;/p&gt;&lt;p&gt;2. Create a general.css stylesheet that will the default one for the site. This will hold the majority of the CSS, including any branding that is shared by the users (ie. All Titles are Bold for everyone). Apply this CSS as the 'Alternate CSS' in the Master Page settings in the MOSS site.&lt;/p&gt;&lt;p&gt;3. Create a location1.css - the CSS file to be loaded on top of the default one when a user from location 1 logs in. In our example this will have the single command to turn hyplerlinks red.&lt;/p&gt;&lt;p&gt;4. Create a location2.css - same principle as step 3.&lt;/p&gt;&lt;p&gt;5. Create a custom list, and call it StyleSheets. Enable Audience targeting for the list. We will enter 2 items - each one being an HTML element importing the appropriate style sheet.&lt;/p&gt;&lt;p&gt;eg: &lt;/p&gt;&lt;p&gt;&amp;lt;link rel='stylesheet' type='text/css' href='/Style Library/location1.css'&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;link rel='stylesheet' type='text/css' href='/Style Library/location2.css'&amp;gt;&lt;/p&gt;&lt;p&gt;6. Target each item to the appropriate audience.&lt;/p&gt;&lt;p&gt;7. Now, open the page layout of the site in SPD. Insert a Content Query Web Part (not in a zone), and select to display the StyleSheet list, and tick 'Apply Audience Filtering' under the query options. Save and view the page.&lt;/p&gt;&lt;p&gt;8. Now - when you log in as the 2 different users, you should see a different list item being displayed by the CQWP. All that's left is to force those list items to be rendered as html in the page, rather than being displayed as text.&lt;/p&gt;&lt;p&gt;9. Open ItemStyle.xsl under the Style Library/XSL Style Sheets. &lt;/p&gt;&lt;p&gt;10. Paste the following template at the end just before the element.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;div style="BORDER-BOTTOM: #006600 1px solid; BORDER-LEFT: #006600 1px solid; BORDER-TOP: #006600 1px solid; BORDER-RIGHT: #006600 1px solid"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&amp;lt;xsl:template name="HTMLInsert" match="Row[@Style='HTMLInsert']" mode="itemstyle"&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="SafeLinkUrl"&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="OuterTemplate.GetSafeLink"&amp;gt;&lt;br /&gt;&amp;lt;xsl:with-param name="UrlColumnName" select="'LinkUrl'"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="SafeImageUrl"&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="OuterTemplate.GetSafeStaticUrl"&amp;gt;&lt;br /&gt;&amp;lt;xsl:with-param name="UrlColumnName" select="'ImageUrl'"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="DisplayTitle"&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="OuterTemplate.GetTitle"&amp;gt;&lt;br /&gt;&amp;lt;xsl:with-param name="Title" select="@Title"/&amp;gt;&lt;br /&gt;&amp;lt;xsl:with-param name="UrlColumnName" select="'LinkUrl'"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&amp;lt;xsl:variable name="LinkTarget"&amp;gt;&lt;br /&gt;&amp;lt;xsl:if test="@OpenInNewWindow = 'True'" &amp;gt;_blank&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;&amp;lt;/xsl:variable&amp;gt;&lt;br /&gt;&amp;lt;xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;xsl:value-of select="$DisplayTitle" disable-output-escaping="yes"/&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;Save as a major version, and open the web part properties of the CQWP again. &lt;p&gt;&lt;/p&gt;&lt;p&gt;11. Go down to 'Presentation' and select 'HTMLInsert' as the template to use.&lt;/p&gt;&lt;p&gt;PRESTO.&lt;/p&gt;&lt;p&gt;Now the html elements in our targeted list should be inserted into the page at runtime as valid HTML - so the browser will actually call a different style sheet for each user.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Further Application&lt;/p&gt;&lt;p&gt;Using this method combined with content targeting, as well as image targeting (through the CQWP) can allow us to generate very different user experiences for each user.&lt;/p&gt;&lt;p&gt;Hope you can have fun with this!&lt;/p&gt;&lt;p&gt;&lt;span style="color:#336666;"&gt;&lt;strong&gt;.davros.&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?xml:namespace prefix = xsl /&gt;&lt;xsl:with-param name="UrlColumnName" select="'LinkUrl'"&gt;&lt;xsl:with-param name="UrlColumnName" select="'ImageUrl'"&gt;&lt;xsl:with-param name="Title" select="@Title"&gt;&lt;xsl:with-param name="UrlColumnName" select="'LinkUrl'"&gt;&lt;xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"&gt;&lt;xsl:value-of select="$DisplayTitle" escaping="yes"&gt;&lt;/xsl:value-of&gt;&lt;/xsl:call-template&gt;&lt;/xsl:with-param&gt;&lt;/xsl:with-param&gt;&lt;/xsl:with-param&gt;&lt;/xsl:with-param&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-5572022476871549457?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/5572022476871549457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=5572022476871549457' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5572022476871549457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5572022476871549457'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2009/01/sharepoint-audience-targeted-branding.html' title='SharePoint: Audience Targeted Branding'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-8693626458722487226</id><published>2008-12-30T03:26:00.000-08:00</published><updated>2008-12-30T03:43:54.555-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Expression Box'/><category scheme='http://www.blogger.com/atom/ns#' term='Rich Text'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath'/><title type='text'>InfoPath Rich Text Display in Form: Expression Box</title><content type='html'>&lt;span style="font-size:85%;"&gt;Recently I faced an issue whereby a customer needed to pull rich text (XHTML) from a database, and have that displayed in the form (read-only) - through a web service.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;For whatever reason, I couldn't use the Rich Text Box control within InfoPath to display the data. Normally I would just use an expression box to display read-only data on the form, as it renders and resizes appropriately and looks seamless. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;However - the expression box was just rendering the XHTML source code ("&lt;span style="color:#006600;"&gt;&amp;lt;div class="'....'"&amp;gt;asfsdgf&amp;lt;/div&lt;/span&gt;&amp;gt;....."). So - to force the expression box to render the source code 'properly', we have to open the view xsl source file, and modify the tag that renders the data. This is easier than it sounds:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;1. Bind an expression box to your Rich text data source element&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;2. File -&gt; Save as Source Files&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;3. Open the appropriate view.xsl file in notepad&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;4. Find your expression box in the markup. This will look like &lt;span style="color:#006600;"&gt;&amp;lt;xsl:value-of select="MyElement" /&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;5. Add the following parameter to the xsl:value of tag: &lt;span style="color:#006600;"&gt;disable-output-escaping="yes"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;So the updated tag will read: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#006600;"&gt;&amp;lt;xsl:value-of select="MyElement" disable-output-escaping="yes" /&amp;gt; &lt;/span&gt;(where "MyElement" is your data source element). &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;6. Save, close, open the manifest file up in InfoPath and presto - your Rich Text XHTML is rendered as HTML in the form rather than as plain text.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;This bugged me for a while - so hopefully it might save some of you some time!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;davros.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-8693626458722487226?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/8693626458722487226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=8693626458722487226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8693626458722487226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8693626458722487226'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2008/12/infopath-rich-text-display-in-form.html' title='InfoPath Rich Text Display in Form: Expression Box'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-5791876730437920019</id><published>2008-12-04T04:49:00.001-08:00</published><updated>2008-12-04T05:31:53.382-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Great Plains'/><category scheme='http://www.blogger.com/atom/ns#' term='GP Web Services'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath'/><title type='text'>InfoPath and Great Plains Web Services: Update Customer Address Sample</title><content type='html'>&lt;span xmlns=""&gt;&lt;span style="font-size:85%;"&gt;This week I was asked to explore some the new web services available out the box with GP 10.0. It seems there are services to do pretty much anything you want with GP (Programmers Guide: &lt;/span&gt;&lt;a href="https://mbs.microsoft.com/downloads/customer/WSProgrammersGuide.pdf"&gt;&lt;span style="font-size:85%;"&gt;https://mbs.microsoft.com/downloads/customer/WSProgrammersGuide.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;). I thought I'd use some to create an InfoPath form to update customer details in GP. I had a dig around on the web, but didn't find any examples of InfoPath being used with these services, which seemed strange…&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;…until I found that alas – they are not InfoPath 'friendly'. Because of the way these services work it becomes necessary to create a middle tier web service ourselves, &lt;em&gt;between the form and the GP web services&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[This posting is not a run-down of the web services in GP (see the above programmers guide for that). Instead it should serve as a starting point to show how we can use InfoPath to interact with GP data.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1 align="left"&gt;&lt;span style="font-size:100%;"&gt;Creating Our Web Service&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span style="font-size:85%;color:#000000;"&gt;Create a new Web Service project in Visual Studio &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span style="font-size:85%;color:#000000;"&gt;Add a Web Reference to the Dynamics GP Web Service. (Usually under /DynamicsGPWebServices/DynamicsGPService.asmx) &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_L7ZIPY1zx_w/STfXb5B16_I/AAAAAAAAAA0/o3gop7j7mE8/s1600-h/addwr.gif"&gt;&lt;img style="WIDTH: 200px; HEIGHT: 213px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5275922362652814322" border="0" alt="" src="http://2.bp.blogspot.com/_L7ZIPY1zx_w/STfXb5B16_I/AAAAAAAAAA0/o3gop7j7mE8/s320/addwr.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span style="font-size:85%;color:#000000;"&gt;Now create our required Get and Set Web Methods (see code sample below) &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span style="color:#000000;"&gt;&lt;strong&gt;Get Customer List: &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="BORDER-BOTTOM: #0070c0 1pt solid; BORDER-LEFT: #0070c0 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: #0070c0 1pt solid; BORDER-RIGHT: #0070c0 1pt solid"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;[&lt;span style="color:#2b91af;"&gt;WebMethod&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerSummary&lt;/span&gt;[] GetCustomerList()&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CustomerSummary&lt;/span&gt;[] custList;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CompanyKey&lt;/span&gt; companyKey;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt; context = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;LikeRestrictionOfString&lt;/span&gt; classIdRestriction;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CustomerCriteria&lt;/span&gt; customerCriteria;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#339933;"&gt;// Set up the Web Service&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;net.blackandblue.server01.&lt;span style="color:#2b91af;"&gt;DynamicsGP&lt;/span&gt; GPServ = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicsGP&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;GPServ.UseDefaultCredentials = &lt;span style="color:blue;"&gt;true&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;companyKey = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CompanyKey&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;companyKey.Id = (-1);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;br /&gt;context.OrganizationKey = (&lt;span style="color:#2b91af;"&gt;OrganizationKey&lt;/span&gt;)companyKey;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;context.CultureName = &lt;span style="color:#a31515;"&gt;"en-US"&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;classIdRestriction = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;LikeRestrictionOfString&lt;/span&gt;&lt;span style="color:#000000;"&gt;(&lt;/span&gt;);&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;classIdRestriction.EqualValue = &lt;span style="color:#a31515;"&gt;"USA-ILMO-T1"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;br /&gt;customerCriteria = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerCriteria&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;customerCriteria.ClassId = classIdRestriction; &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;color:#339933;"&gt;// Get a list of customers matching the above restrictions&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custList = GPServ.GetCustomerList(customerCriteria, context);&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; custList;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;p align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;} &lt;/p&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="PADDING-LEFT: 7px; PADDING-RIGHT: 7px" colspan="2"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://2.bp.blogspot.com/_L7ZIPY1zx_w/STfXcAdcLVI/AAAAAAAAABE/cPmHXsPe_l4/s1600-h/ds2.gif"&gt;&lt;img style="WIDTH: 212px; HEIGHT: 320px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5275922364647615826" border="0" alt="" src="http://2.bp.blogspot.com/_L7ZIPY1zx_w/STfXcAdcLVI/AAAAAAAAABE/cPmHXsPe_l4/s320/ds2.gif" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-LEFT: 7px; PADDING-RIGHT: 7px"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Despite this method returning a custom array of customers, this renders through the web service as XML, and InfoPath is quite happy to pick up the fields. Below is the data set seen after connecting to my new web method in InfoPath (left).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;This data populates a drop down list box in InfoPath. After selecting a customer and address, I want the user to be able to update the address and submit back to my web service – which in turn formats the data and calls the GP Web Service.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The method shown below either adds a new customer address, or updates an existing one:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;span style="font-size:85%;"&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="BORDER-BOTTOM: #0070c0 1pt solid; BORDER-LEFT: #0070c0 1pt solid; PADDING-LEFT: 7px; PADDING-RIGHT: 7px; BORDER-TOP: #0070c0 1pt solid; BORDER-RIGHT: #0070c0 1pt solid"&gt;&lt;p style="TEXT-ALIGN: left" align="left"&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;[&lt;span style="color:#2b91af;"&gt;WebMethod&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;bool&lt;/span&gt; UpdateAddress(&lt;span style="color:blue;"&gt;string&lt;/span&gt; custID, &lt;span style="color:blue;"&gt;string&lt;/span&gt; addressID, &lt;span style="color:blue;"&gt;string&lt;/span&gt; line1, &lt;span style="color:blue;"&gt;string&lt;/span&gt; line2, &lt;span style="color:blue;"&gt;string&lt;/span&gt; line3, &lt;span style="color:blue;"&gt;string&lt;/span&gt; city, &lt;span style="color:blue;"&gt;string&lt;/span&gt; county, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; postcode, &lt;span style="color:blue;"&gt;string&lt;/span&gt; contactPerson, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone1Val, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone1CCode, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone1Ext, &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;string&lt;/span&gt; phone2Val, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone2CCode, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone2Ext, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone3Val, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone3CCode, &lt;span style="color:blue;"&gt;string&lt;/span&gt; phone3Ext, &lt;span style="color:blue;"&gt;string&lt;/span&gt; AddUpdate)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CompanyKey&lt;/span&gt; companyKey;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt; context = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Context&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CustomerKey&lt;/span&gt; customerKey;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;color:green;"&gt;&lt;br /&gt;// Set up Web Service&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;net.blackandblue.server01.&lt;span style="color:#2b91af;"&gt;DynamicsGP&lt;/span&gt; GPServ = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DynamicsGP&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;GPServ.Credentials = myCred;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;GPServ.UseDefaultCredentials = true;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;br /&gt;companyKey = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CompanyKey&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;companyKey.Id = (-1);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;&lt;br /&gt;context.OrganizationKey = (&lt;span style="color:#2b91af;"&gt;OrganizationKey&lt;/span&gt;)companyKey;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;context.CultureName = &lt;span style="color:#a31515;"&gt;"en-US"&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:green;"&gt;// Assign Unique Keys - to define customer and address to update&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;customerKey = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerKey&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;customerKey.Id = custID;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;CustomerAddressKey&lt;/span&gt; custAdressKey = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerAddressKey&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAdressKey.Id = addressID;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;color:green;"&gt;&lt;span style="color:#000000;"&gt;&lt;br /&gt;&lt;/span&gt;// Set customer address fields&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;span style="color:#008000;"&gt;&lt;/span&gt;CustomerAddress&lt;/span&gt; custAddress = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CustomerAddress&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Key = custAdressKey;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Key.CustomerKey = customerKey;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Line1 = line1;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Line2 = line2;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Line3 = line3;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.City = city;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.State = county;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.PostalCode = postcode;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.ContactPerson = contactPerson;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt; phone1 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone1.CountryCode = phone1CCode;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone1.Value = phone1Val;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone1.Extension = phone1Ext;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Phone1 = phone1;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt; phone2 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone2.CountryCode = phone2CCode;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone2.Value = phone2Val;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone2.Extension = phone2Ext;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Phone2 = phone2;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt; phone3 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;PhoneNumber&lt;/span&gt;();&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone3.CountryCode = phone3CCode;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone3.Value = phone3Val;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;phone3.Extension = phone3Ext;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;custAddress.Phone3 = phone3;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;Policy&lt;/span&gt; customerPolicy = GPServ.GetPolicyByOperation(&lt;span style="color:#a31515;"&gt;"UpdateCustomerAddress"&lt;/span&gt;,context);&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;color:#339933;"&gt;&lt;br /&gt;// Choose whether to update an existing address, or create a new one&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;try&lt;/span&gt;{ &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(AddUpdate == &lt;span style="color:#a31515;"&gt;"Update"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;GPServ.UpdateCustomerAddress(custAddress, context, customerPolicy);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (AddUpdate == &lt;span style="color:#a31515;"&gt;"Add"&lt;/span&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;GPServ.CreateCustomerAddress(custAddress, context, customerPolicy);&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;} &lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;catch&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Exception&lt;/span&gt; e)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;{&lt;br /&gt;&lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;font-size:85%;"&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:Courier New;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;&lt;table style="BORDER-COLLAPSE: collapse" border="0"&gt;&lt;colgroup&gt;&lt;span style="font-size:85%;"&gt;&lt;colgroup&gt;&lt;colgroup&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 426px"&gt;&lt;/span&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr&gt;&lt;td style="PADDING-LEFT: 7px; PADDING-RIGHT: 7px"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://4.bp.blogspot.com/_L7ZIPY1zx_w/STfXcAfeFKI/AAAAAAAAAA8/c7F9IZb3iZc/s1600-h/ds1.gif"&gt;&lt;img style="WIDTH: 213px; HEIGHT: 320px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5275922364656129186" border="0" alt="" src="http://4.bp.blogspot.com/_L7ZIPY1zx_w/STfXcAfeFKI/AAAAAAAAAA8/c7F9IZb3iZc/s320/ds1.gif" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style="PADDING-LEFT: 7px; PADDING-RIGHT: 7px"&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Now all that needs to be done is to hook up my Add / Update method to my InfoPath form. I chose to add it as a query web service – as it returns a Boolean result that I can check in the form to show success or failure.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;And Presto – An InfoPath 2007 form getting and updating data in GP 10. Of course, there is no reason now why we can't publish the form to InfoPath Forms Services.&lt;br /&gt;&lt;/span&gt;&lt;h1 align="left"&gt;&lt;span style="font-size:85%;"&gt;Conclusions&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-size:85%;"&gt;As for business use – this method can be highly useful, as we can allow other non-GP staff to interact with the system. With further customization, it could suit the following scenarios:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Expenses Form?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span style="font-size:85%;"&gt;Stock Item Creation? &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="left"&gt;&lt;span style="font-size:85%;"&gt;Customer Management? &lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span style="font-size:85%;"&gt;And of course, as we are using InfoPath if we hook into SharePoint too we can create approval processes for these forms to be approved before they are submitted to GP.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Web Service Programmers Guide (pdf): &lt;/span&gt;&lt;a href="https://mbs.microsoft.com/downloads/customer/WSProgrammersGuide.pdf"&gt;&lt;span style="font-size:85%;"&gt;https://mbs.microsoft.com/downloads/customer/WSProgrammersGuide.pdf&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Dynamics Web Service SDK (with sample windows app): &lt;/span&gt;&lt;a href="https://mbs.microsoft.com/downloads/customer/DynamicsGPWebServicesSDKv9.msi"&gt;&lt;span style="font-size:85%;"&gt;https://mbs.microsoft.com/downloads/customer/DynamicsGPWebServicesSDKv9.msi&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;span style="font-size:85%;"&gt;Cheers all:-&lt;br /&gt;&lt;span style="color:#1f497d;"&gt;&lt;strong&gt;davros&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-5791876730437920019?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/5791876730437920019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=5791876730437920019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5791876730437920019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/5791876730437920019'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2008/12/infopath-and-great-plains-web-services.html' title='InfoPath and Great Plains Web Services: Update Customer Address Sample'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_L7ZIPY1zx_w/STfXb5B16_I/AAAAAAAAAA0/o3gop7j7mE8/s72-c/addwr.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-8938751954863978314</id><published>2008-11-11T08:45:00.000-08:00</published><updated>2008-11-11T08:45:20.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='global stylesheet'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><category scheme='http://www.blogger.com/atom/ns#' term='custom themes'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Creating a Global Theme using a single CSS stylesheet</title><content type='html'>&lt;span xmlns=""&gt; &lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Lately I've been working on a lot of SharePoint branding – for MOSS and WSS. For a consistent user experience, we need to brand the application pages too (/_layouts/…), so we create a custom theme. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;There are many other articles about creating custom themes: &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Create a custom theme for WSS v3 or MOSS 2007 (&lt;/span&gt;&lt;a href="http://weblogs.asp.net/danlewis/archive/2008/06/12/create-a-custom-theme-for-wss-3-0-or-moss-2007.aspx"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;http://weblogs.asp.net/danlewis/archive/2008/06/12/create-a-custom-theme-for-wss-3-0-or-moss-2007.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;(MSDN) How To: Customise Themes (&lt;/span&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa979310.aspx"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;http://msdn.microsoft.com/en-us/library/aa979310.aspx&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;) &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;One of the pain points with developing your own theme comes when it has been rolled out across many sites, and then a snag is spotted, or something needs to be changed. The theme has to be updated, and re-applied everywhere it was used (since applying a theme in a site takes a copy of the CSS and supporting files and stores it in each site). Imagine having to do that across 50+ sites – it is certainly something that can make you cry. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;To get around this, and allow us to make global changes post-deployment, I use the following method. &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Copy an existing theme, and make the necessary changes to the files to make it your own and customise the CSS (the above articles cover this) – and there is a theme generator out on the web: (&lt;/span&gt;&lt;a href="http://hermansberghem.googlepages.com/themegenerator.htm"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;http://hermansberghem.googlepages.com/themegenerator.htm&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Somewhere in the root of your SharePoint system, create a blank CSS page – "MyTheme.css".&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Cut the CSS from your new theme on the server, and paste it into MyTheme.css.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Go back to your CSS sheet on the server, remove all the text from it, and enter only the following line:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="color:#333333;"&gt;&lt;strong&gt;@import:url('/MyTheme.css');&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Save + Reset IIS &lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Presto – now, all your custom theme does is look at a single parent style sheet in the root of your SharePoint system. This means that even after it's been deployed across many sites, we can make a change to the parent style sheet and see it reflected everywhere. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Hope this helps…davros.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-8938751954863978314?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/8938751954863978314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=8938751954863978314' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8938751954863978314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/8938751954863978314'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2008/11/creating-global-theme-using-single-css.html' title='Creating a Global Theme using a single CSS stylesheet'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8949165425355567540.post-3333043167585618062</id><published>2008-11-11T08:19:00.000-08:00</published><updated>2008-11-11T08:30:39.686-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MCTS'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='InfoPath'/><title type='text'>SharePoint makes me cry...</title><content type='html'>&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Hello all - &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;I'm David (davros), and I work as a SharePoint + InfoPath consultant @ ISC Software Solutions (MS Gold Partner - &lt;/span&gt;&lt;a href="http://www.isc-software.com/"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;http://www.isc-software.com/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Recently I have come across a few things in SharePoint that have damn well near reduced me to tears. So, after finding work arounds and drying my eyes - I thought I would try and share them here, perhaps to help others avoid some of the pain.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have been mainly working in the following areas of late:&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;SharePoint branding + customisation&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;InfoPath - custom task pane / dynamic form creation / etc&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;InfoPath Forms Services&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;I have recently completed the two MCTS exams for configuring SharePoint.&lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;a href="http://3.bp.blogspot.com/_L7ZIPY1zx_w/SRmyKp-hEpI/AAAAAAAAAAM/ZNYSc2Ld6Og/s1600-h/MCTS(rgb)_530_529_507.png"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;img style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid; WIDTH: 320px; HEIGHT: 70px; BORDER-TOP: #000000 1px solid; CURSOR: hand; BORDER-RIGHT: #000000 1px solid" id="BLOGGER_PHOTO_ID_5267437135323009682" border="0" alt="" src="http://3.bp.blogspot.com/_L7ZIPY1zx_w/SRmyKp-hEpI/AAAAAAAAAAM/ZNYSc2Ld6Og/s320/MCTS(rgb)_530_529_507.png" /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;Anyway - hopefully some of my thoughts will be of use to someone....&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt; &lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;.davros.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:georgia;font-size:85%;color:#333333;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8949165425355567540-3333043167585618062?l=sharepointmakesmecry.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sharepointmakesmecry.blogspot.com/feeds/3333043167585618062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8949165425355567540&amp;postID=3333043167585618062' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/3333043167585618062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8949165425355567540/posts/default/3333043167585618062'/><link rel='alternate' type='text/html' href='http://sharepointmakesmecry.blogspot.com/2008/11/sharepoint-makes-me-cry.html' title='SharePoint makes me cry...'/><author><name>.davros.</name><uri>http://www.blogger.com/profile/12112864932794684994</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='30' src='http://2.bp.blogspot.com/_L7ZIPY1zx_w/SRmzoibwfnI/AAAAAAAAAAY/S9f9BJwg2hc/S220/me2.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_L7ZIPY1zx_w/SRmyKp-hEpI/AAAAAAAAAAM/ZNYSc2Ld6Og/s72-c/MCTS(rgb)_530_529_507.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
