 |
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
 |
|
|
|
|
|
U2U Blog Center > Patrick Tisseghem's Blog [MVP SharePoint]
|
| The Happy SharePoint Traveller |
26/06/2008Last week was the first edition of the Norwegian Developer Conference, a great initiative by Microsoft and ProgramUtvikling. As some of you probably know, Norway is one of my favorite countries to travel to and I always enjoy the people (and the beer) there. However, slavery still exists I think in Norway because I was the only speaker in the SharePoint track resulting in the delivery of 6 sessions in a row. Needed a lot of drinks after that! Anyway, I have zipped up all of the presentations and they are available for download here. Have fun with them. 25/06/2008The good thing about dedicated workshops like the Search Workshops we have done last week in Brussels and Copenhagen, is that after the course, you end up with a lot of questions that were answered and that should somehow end up in blog postings, articles or whatever. Finding the time to do this is of course always a problem. But I'll do my best, certainly if it adds to the material covered in our latest book:  | Inside the Index and Search Engines: Microsoft® Office SharePoint® Server 2007 by Patrick Tisseghem, Lars Fastrup
Read more about this book... | One of the interesting questions was regarding the indexing and the searching for documents created in a specific language. I'll cover a bit here in this first posting and continue with that later this week. How does the crawler detect the language of the content of the document? First of all, the detection of the language is dependent on the IFilter that is used to index the content of the document. There is a full explanation of the internals of IFilters and also a guide how to build your own one in chapter 9 of the book. The built-in IFilter that is part of the MOSS indexing architecture is capable of looking at an Office document and collect plenty of information. This information gathering is actually the task of one of the internal plug-ins named the Metadata Extraction plug-in. It relies on an internal language detection algorithm (developed by Microsoft Research) to find out about the language of the content. When it was able to retrieve the language (represented by a number), it stores this information in a hidden managed property called DetectedLanguage. How do I search for a document in a specific language? Let's have a look first at the out-of-the-box experience. I have for example here a document library storing different documents each authored in a language. I configured a content source that indexed all of this data. The advanced search page allows us to filter on the language very easily using the language picker. By default there are a couple of options but if you open the tool pane and configure the XML that is set as the value for the Properties property of the AdvancedSearchBox Web Part, you are able to offer more choices. In the XML you find a list of LangDef elements each one representing one language and the number for it. Note that it is not very clear how Microsoft got to these numbers (they do not match for example the LCID numbers). 1: <LangDefs> 2: <LangDef DisplayName="Arabic" LangID="1"/> 3: <LangDef DisplayName="Bengali" LangID="69"/> 4: <LangDef DisplayName="Bulgarian" LangID="2"/> 5: <LangDef DisplayName="Catalan" LangID="3"/> 6: <LangDef DisplayName="Chinese" LangID="4"/> 7: <LangDef DisplayName="Croatian/Serbian" LangID="26"/> 8: <LangDef DisplayName="Czech" LangID="5"/> 9: <LangDef DisplayName="Danish" LangID="6"/> 10: <LangDef DisplayName="Dutch" LangID="19"/> 11: <LangDef DisplayName="Finnish" LangID="11"/> 12: <LangDef DisplayName="French" LangID="12"/> 13: <LangDef DisplayName="German" LangID="7"/> 14: <LangDef DisplayName="Greek" LangID="8"/>
The language picker will show all the languages that are defined within the Languages element:
1: <Languages> 2: <Language LangRef="12"/> 3: <Language LangRef="7"/> 4: <Language LangRef="17"/> 5: <Language LangRef="10"/> 6: <Language LangRef="19"/> 7: <Language LangRef="25"/> 8: <Language LangRef="22"/> 9: </Languages>
A query using the language picker will result in the inclusion of the match on the DetectedLanguage managed property as shown here:
The Advanced Search Page is not the only place where you can use this managed property. You can also immediately type it in in the search box where you formulate your keyword syntax query. You just have to find out the number of the language (see the above XML).
In a next posting I'll show you how you can customize the search experience using the language information. 10/06/2008This week I am teaching in one of the Channel Islands called Jersey for a company called Contract5. The moment I flagged my MSN account with the info, I got questions like: Where is Jersey? SharePoint there? Well, it is a British Crown dependency just off the coast of Normandy (France). So rather small, only about 90.000 habitants but SharePoint is big here since the island houses a lot of financial institutes with a very attractive tax rate. And it is now on my list of places I'd like to visit once with the girls.  Jersey has a rich history (read more on Wikipidea) and lots of nice places to visit. I am staying at the brand new Radisson near the small marina bay in St. Helier (the capital) and just opposite of the Elizabeth Castle. 6/06/2008Recently I did a webcast on the different steps that are required to prepare your SharePoint Development Server for hosting Silverlight 2 applications in the SharePoint sites. I also went through these steps yesterday during my session here. It is targetting beta 1 and beta 2 will be available later today so you might have to tweak the steps a bit. I'll try to get an update on that done in the next coming weeks. The webcast is available on http://www.codeplex.com/SL4SP/Release/ProjectReleases.aspx?ReleaseId=14118. 5/06/2008Assume that you are a company that has plenty of data locked up in SQL Server databases, Oracle database, or line-of-business (LOB) systems such as SAP, Siebel or Microsoft CRM, and there is the need to make all of that data searchable. What is a good choice? BDC or the newest technology in the search space called custom federated search connectors? I was asking myself this question during a session of Michal Gideoni I attended yesterday. Michal did a great job explaining in one hour your options (from a dev perspective) with federated search and the extensibility of them. Here are some interesting bullet points I wrote down: - Federated search is at this moment only available if you install MSS (Microsoft Search Server) 2008 or MSSX (Microsoft Search Server Express) 2008. It seems there will be a 'rollup' hotfix end of June/early July that will make federated search also available in the MOSS 2007 search centers. You might want to subscribe to the search blog on http://blogs.msdn.com/enterprisesearch to follow-up on this one.
- She demonstrated the use of patterns in the federated location definition using a nifty little tool called Expresso. Download a trial here. I like the mashup demo btw.
- Microsoft released protocol handlers for Documentum and FileNet. Read more here.
- Plenty of search-related tools, wrappers and docs are available in the Search Community Toolkit available on CodePlex.
- The Web Parts that support the federated search are not sealed, so you can inherit from them and make them do what you want them to do. This is good news, I actually ignored this because all of the other search Web Parts are all sealed (still like to get an explanation on the why for that one).
So in all, a good session. Picked up nice new ideas for new demos. But back to the title of the posting: to BDC or to Custom FSC? I foresee a great future for custom federated search connectors and it is so easy to build them. Basically a custom federated search connector is a layer (typically an ASPX page) sitting in front of the business data store accepting a query in the form of a template (e.g. http://litware:6500/searchindatabase.aspx?q=contoso). The query will be processed and translated internally in the ASPX and an RSS feed will be returned as output. This output is then picked up by the federated search Web Part and displayed to the user. If the requirements are quite simple: no worries about ranking the results, well-defined queries (such as look for this in our customer database), no heavy requirements regarding security or caching, this technique of building custom connectors could be quite interesting instead of the heavy infrastructure and configurations you have to do for making that same data searchable via the Business Data Catalog. Of course, once the BDC is configured, you can do so much more with that data, but if it is only for searching... have a look at federated search. Learn more also here on www.microsoft.com\enterprisesearch . I plan to come up with some additional material on this when I have the time. 3/06/2008In two weeks, I'll deliver my first two MOSS 2007 Search workshops. One in Belgium on 16th & 17th of June and one in Copenhagen on the 19th and 20th. Really looking forward to it to spend 2 days entirely on this topic. You'll get plenty of topics and some hands-on labs to work through. Seats are still available. Read the full agenda over here. 2/06/2008Tomorrow I'll leave for my annual trip to TechEd US again in Orlando. Looking forward to spend time with my buddies Ted and Fitz, and the rest of the gang in the US. Fitz recently joined Nintex and we'll have to catch up on that. From what I read on his blog, Nintex is not all about workflows. This week they'll RTM an interesting reporting layer for SharePoint. Read more here. Anyway, I am presenting my session first thing Thursday morning. Title is 'Light Up Your SharePoint Web Site with Microsoft Silverlight and AJAX' and I'll highlight techniques for working with Web 2.0 technologies in the SharePoint space. Focus will be on hosting the Silverlight applications, your options to transfer data back and forth, consuming Web Services and WCF services, databinding and more. I'll show also different techniques for the deployment of the Silverlight XAP file. A XAP file is basically a ZIP file containing the Silverlight solution components such as the compiled XAML and code-behind, an application manifest and possibly one or more assemblies delivering Silverlight controls. There are to me three possible places where you can make the XAP file available and the final choice depends more or less on your scope. - Drop the XAP in the ClientBin of your IIS Web Application. This is the most popular approach and also the technique we have used for the BluePrint samples. If you deploy in this location, it means that the Silverlight application can be picked up by any SharePoint code that runs in the site collections and sites hosted on the IIS Web Application. One of the disadvantages with this approach is that it is not directly possible to have the copying of the XAP in the ClientBin operation as part of the manifest of your SharePoint solution delivering the containers for the application (e.g. a Web Part). That is why for the BluePrint, we modified the SharePoint Solution Installer so that this extra step was taking care for.
- Drop the XAP in the 12 Folder. If the Silverlight application needs to be scoped wider, you have for example a custom field type (which is by default a global deployed SharePoint solution), it is good to deploy in a sub folder of the 12\Template\Layouts or in the 12\Template\ControlTemplates folder. The 12\ISAPI is also a candidate. Deploying here means that you can include all of the deployment steps in your SharePoint Solution.
- Drop the XAP in a Document Library. This is very often now my preferred choice of place to drop the XAP. You can create one central document library within your site collection (or if you want a more narrow scope, for your site) where to drop the XAP files. Just like with the previous 12 folder location, you can include this deployment also nicely in your Feature that for example makes available the Web Part hosting the Silverlight application.
Say for example that you create a Web Part with the Visual Studio Extensions for WSS 3.0. You can add the XAP file as part of the Feature folder in your Solution Explorer. A Module and a File element in the element manifest file (lines 9-11) can take care of the provisioning of the XAP during the activation of the Feature in an existing document library (e.g. named XAPS). 1: <Elements Id="c1f27c3d-0fab-46dc-b04d-a070b2713bbd" xmlns="http://schemas.microsoft.com/sharepoint/" > 2: 3: <Module Name="WebParts" List="113" Url="_catalogs/wp"> 4: <File Path="HelloDevDays.webpart" Url="HelloDevDays.webpart" Type="GhostableInLibrary" > 5: <Property Name="Group" Value="DevDays Web Parts"></Property> 6: </File> 7: </Module> 8: 9: <Module Name="XAP" Url="XAPS"> 10: <File Path="HelloDevDays.xap" Url="HelloDevDays.xap" Type="GhostableInLibrary" /> 11: </Module> 12: 13: </Elements>
In the Web Part where you create the Silverlight control, you then can point (line 6) to the XAP file using the following code:
1: protected override void CreateChildControls() 2: { 3: base.CreateChildControls(); 4: 5: Silverlight ctrl = new Silverlight(); 6: ctrl.Source = SPContext.Current.Site.RootWeb.Url + "/XAPS/HelloDevDays.xap"; 7: ctrl.ID = "HelloDevDays"; 8: ctrl.Width = new Unit(400); 9: ctrl.Height = new Unit(300); 10: ctrl.Version = "2.0"; 11: 12: this.Controls.Add(ctrl); 13: 14: }
As said, a nice and clean way to include all of the Silverlight files in your SharePoint Solution so that no more additional steps need to be taken after the deployment of the Web Part.
It is also very easy to upgrade the XAP files this way. But don't forget to clear your browser cache when you do this. Download the Internet Explorer Developer Toolbar to help you with that. 30/05/2008Very often when working with a team of developers you build not one but multiple .NET assemblies containing Web Parts that are deployed in the private application folder (BIN) of the IIS Web Application. Deploying in the BIN folder results in the assemblies depending on the trust level configured by the administrators in the web.config that is in place for the IIS Web Application. Setting this trust level to FULL will solve all of the possible security problems for the deployed assemblies but this is not directly a good choice in a production environment. In most cases, the trust level is set to WSS_Minimal and best practice for a developer is to include in the manifest.xml, which is part of the SharePoint Solution (the .WSP), a blob of CAML asking the administrator to grant the required permissions for the proper working of the Web Part. Daniel Larson has a good overview of the steps that are required. Here is a sample of a possible custom CAS entry in the manifest.xml where the Web Part requests access to the SharePoint object model and the permission to communicate with a Web Service. 1: <CodeAccessSecurity> 2: <PolicyItem> 3: <PermissionSet class="NamedPermissionSet" version="1" 4: Description="My webpart's permission set"> 5: <IPermission class="AspNetHostingPermission" version="1" 6: Level="Minimal"/> 7: <IPermission class="SecurityPermission" version="1" 8: Flags="Execution" /> 9: <IPermission version="1" Unrestricted="True" 10: class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=12.0.0.0, 11: Culture=neutral, PublicKeyToken=71e9bce111e9429c" /> 12: <IPermission class="System.Net.WebPermission, System, Version=2.0.0.0, Culture=neutral, 13: PublicKeyToken=b77a5c561934e089" Unrestricted="True" 14: version="1"> 15: <ConnectAccess> 16: <URI uri="$OriginHost$"/> 17: <URI uri="http://springfield:95/webservices/.*"/> 18: </ConnectAccess> 19: </IPermission> 20: </PermissionSet> 21: <Assemblies> 22: <Assembly Name="WeatherwebPart" Version="1.0.0.0" PublicKeyBlob="0x002400000480000094000 23: 00006020000002400005253413100040000010001000DAF8ED8D945CD2ABB2EE7953A6039B791A725F11B4588AC6D70B3E06 24: 48F955E9ED4C3C43CB044B8B0E8A6FF4D4FFBE9E3B9297D45F688A7264534E12414E17539305207EC961DA94DF294E7722CC 25: D9BDBFC95A896E996F57156705D281EC39280BD604E87724556AF5807D146963F19F5B43DB69E1F22695463153A553260D2" /> 26: </Assemblies> 27: </PolicyItem> 28: </CodeAccessSecurity>
Note that the Assembly element is set to the full details of the Web Part assembly. You can also have only the name of the assembly defined here (not including the full key). When the solution is deployed in the farm, the targeted IIS Web Application web.config will have the trust level set to a custom config file with the content of the WSS_Minimal.config (assuming that was the level before the deployment) and the contents you see above.
At U2U we are currently creating new Features for administrators working with SharePoint solutions. For example, we have a page like this that shows the full details of the solution in the SharePoint 3.0 Central Administration, showing also the custom CAS policy that is requested in the WSP. (More on this new project later)
Assume now that there is the request to create 20 more solutions like this and these assemblies also need specific permissions. It is not such a good idea to come up for each of them with their own CAS policies like shown above. If you sign them all with the same SNK file, you have enough with one configuration containing all of the permissions for all of the individual assemblies that are required. You could push this out in the farm with a solution dedicated to this with only the custom permission settings. The Assembly element then should only contain the PublicKeyBlob, not anymore a Name and a Version attribute.
1: <Assemblies> 2: <Assembly PublicKeyBlob="0x002400000480000094000 3: 00006020000002400005253413100040000010001000DAF8ED8D945CD2ABB2EE7953A6039B791A725F11B4588AC6D70B3E06 4: 48F955E9ED4C3C43CB044B8B0E8A6FF4D4FFBE9E3B9297D45F688A7264534E12414E17539305207EC961DA94DF294E7722CC 5: D9BDBFC95A896E996F57156705D281EC39280BD604E87724556AF5807D146963F19F5B43DB69E1F22695463153A553260D2" /> 6: </Assemblies>
This is yet another reason to enforce the use of only a few SNK files in your SharePoint development projects and not allow SNK files to be created directly by the developers for each assembly they are signing. 29/05/2008Yes, I know, it has been a while since I opened up Live Writer and updated my blog. But I'll do my best to work on it again on a regular basis. This week I am in Stavanger, a nice little place in Norway, with a lovely harbor and it is also this year's cultural capital of Europe. The training for this week is an on-site at Bouvet, one of the services companies in Norway that focuses very heavily on SharePoint. Yesterday, I had my Silverlight/SharePoint talk and they showed me a very cool extension they added to the BluePrint ColleagueViewer Web Part. Really like there approach to pick it up, learn from it and add new stuff to it. Here is a small screencast showing the extension. Basically they have a document library in SharePoint with all of the CVs of their consultants and employees. That one is indexed and a search is executed programmatically in the WCF service that is running in the background for this sample. All of the results together with profile information is then picked up by the Silverlight application. I am interested in other work that has been done with the samples. All the samples will be soon into the BluePrint S+S format. Right, back to work now. 23/03/2008Friday evening, the Inside Index and Search Engines: MOSS 2007 MSPress book was handed off for print. This means that it will be in the shops very soon - April 2th is the official date. Many thanks to the MSPress team who again did a marvelous job. And while you are searching for more books. Andrew Connell also finished his work on the forthcoming Web Content Management book. I reviewed chapters of it and it is excellent material. Go and pre-order it!
| Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsb | 255 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsx | 256 | | Snapshot in Excel | /_layouts/images/ewr134.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&Snapshot=1 | 0x0 | 0x1 | FileType | xlsb | 256 |
|
|
|
|
|
| Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XsnLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | FileType | xsn | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.2 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.3 | 255 | | Edit in Browser | /_layouts/images/icxddoc.gif | /Blogs/Patrick/_layouts/formserver.aspx?XmlLocation={ItemUrl}&OpenIn=Browser | 0x0 | 0x1 | ProgId | InfoPath.Document.4 | 255 | | View in Web Browser | /_layouts/images/ichtmxls.gif | /Blogs/Patrick/_layouts/xlviewer.aspx?listguid={ListId}&itemid={ItemId}&DefaultItemOpen=1 | 0x0 | 0x1 | FileType | xlsx | |
| | | | | |