Join Now!
<%@ Assembly Name="Microsoft.SharePoint"%><%@ Application Language="C#" Inherits="Microsoft.SharePoint.ApplicationRuntime.SPHttpApplication" %>
<SCRIPT language="C#" runat="server">protected void Application_PostAuthenticateRequest(Object sender, EventArgs e){ HttpApplication app=sender as HttpApplication;
if (app.User.Identity.IsAuthenticated) return;
HttpRequest request = app.Request;
if (request.UserAgent != "Microsoft Office Protocol Discovery" && request.UserAgent != "Microsoft Data Access Internet Publishing Provider Protocol Discovery" && request.UserAgent != "MSFrontPage/12.0") return;
HttpResponse response = app.Response;
response.StatusCode = 404;
response.End();}</SCRIPT>
Posted on 1/17/2010 at 8:25 PM by Liam Cleary
Like most of you, you may have looked at the "UserProfileManager" web services and noticed that there is no way to get all the user profiles. I needed this functionality so I decided to create my own web service. So if you need a starter for ten then here we go. Create your web application project so it looks something like this:
Now we need to add the following code:
To make sure that the web service performed better than normal I added some methods that cache the results for a certain time limit. So the core code is this:
We now add the following:
Notice we have started to create the Xml document above. We can now add the XmlElements as needed. This code loops through all of the UserProfiles that exist in the profileManager object and then starts to add XmlElements and attributes as needed.
While doing the code I found that if the profile field had multiple values it would not render them correctly so I had to write some code that would loop through the multiple values and write them out.
Now we have the core XmlDocument created we can then close the document and return it as part of our method.
So now the code is done, we need to add this somewhere. I simply created a new virtual directory in IIS.
I made sure that the directory was using the same Application Pool Account as the rest of the site.
I was then able to run the web service as shown below:
I selected my Xml method then selected the INVOKE option.
Hey Presto, and XmlDocument of my user profiles on my test server.
If I expand one of the users it now lists all the profile fields in the profile as well as their values.
Fantastic, love using Xml to get the data I need. And with some extra caching methods this web service works really well and allows me to get large amounts of data very quickly. I am re-writing this into a WCF service so will blog about it soon. J
Posted on 8/14/2009 at 12:48 PM by Liam Cleary
In one of my last posts I looked at created a HttpHandler that would use query string parameters to retrieve the Xml of a list in SharePoint. The basis for this was to replace the use of the "owssvr.dll" method due to its security requirements. In this post we will enhance it slightly and turn the Xml into an RSS feed.
For this one we will use the same base as the last one but add some extra methods for generating the RSS feed. So to begin with let's create a new file, I have called mine "GetListRSS.ashx". I then opened it up in Visual Studio 2008. Firstly we need to add the following declarations.
Then we need to add the following using statements and then declare our class as type "IHttpHandler".
Now we can start adding the code to create the XML and generate the RSS. Firstly we need to setup the query strings as before that we want to use to get the site, list and view ID's.
So for the RSS generation I can't take the credit as this is using some of the work that Sahil did on his RSS code which you can find here. I have taken some of the core code and re-purposed it to match what I needed. All in all it is using the same except for a few tweaks. The modified code is below:
As you can see it does exactly what is says it will do (thanks Sahil). Now to test it I copied this to the _vti_bin directory on my server and tested with the following URL.
http://www.helloitsliam.com/_vti_bin/GetListRSS.ashx?SiteUrl=http://www.helloitsliam.com&ListID={A462AB0D-84CF-4918-9950-D562530A5377}&ViewID={f7c353e2-e2fa-494c-a2a9-7c6dbb3bddd6}
The ending result is the following:
As you can see with a little code inside a HttpHandler you can create a component that will not only output raw Xml but also RSS. Big thanks to Sahil for the main RSS code.
This sample could be modified to include a flag that would allow you to re-purpose the results as raw XML or as an RSS feed. Using SharePoint data in its raw XML is the easiest and best approach well I think to using it inside your custom components.
Posted on 8/14/2009 at 12:47 PM by Liam Cleary
Posted on 7/15/2009 at 5:23 PM by Bill Rishsew
Posted on 7/11/2009 at 11:50 AM by Bill Rishsew
Posted on 7/11/2009 at 11:25 AM by Bill Rishsew
Recently I was asked if there was a way to retrieve and present XML from a list. This of course is very straight forward but the complication here was that it needed to be available to an anonymous user who would consume the XML stream.
After a little thought I decided that we could use the "owssvr.dll" method. For those that have not used this before it is very simple. You make a call to the following URL:
http://{siteurl}/_vti_bin/owssvr.dll
Pass it a few parameters and then an XML stream is returned. So to test this I used the posts list on my blog with the following URL:
http://www.helloitsliam.com/_vti_bin/owssvr.dll?Cmd=Display&List={A462AB0D-84CF-4918-9950-D562530A5377}&XMLDATA=TRUE
The GUID that you pass is the actual GUID for the list that you wish to retrieve the data from. I tried this and all worked well until I tried it as an anonymous user to the site. When I tried it as a logged in user it came back with a blank page. Very strange I thought, but then I realized that a limitation of this method is lookup fields. When I tried it as an Anonymous user it simply kept prompting me again and again for permissions and then failed with an access denied error.
So this approach for me did not work. If you do want to use it and you are going to consume it internally then it is perfect and renders as you need it too. Below is sample output:
So what do I try next, I thought about building a custom web service but didn't really want to go to all that trouble so I decided to create a custom HttpHandler instead. This seemed a very simple and straight forward way of achieving this. Also it would give the ability to retrieve the XML from a list and the selected View that was created.
So let's create a custom HttpHandler for this. For this you won't even need to use Visual Studio. I use Notepad++ and created a file called "GetListXML.ashx". I then started to add the following code:
As note here make sure that the class element is the same name as the actual class listed below, sounds silly I know but it will never work otherwise. I then created the class as shown below:
Once the class is created we then need to add a "ProcessRequest" method which will run the core code.
The key here is to make sure we grab the current context, so we can then declare some variables that read the "Request" object.
For this to work I needed to pass it a Site URL, List ID and an ID for the selected View. To find these out I used the SharePoint UI or you could use a simple tool like this one:
http://blogs.msdn.com/ronalus/archive/2007/09/08/a-little-guid-picker.aspx
So now we need to add the following code so it will return the required XML.
So now we have the code completed, obviously there is more code here such as a "try {} catch {}" block etc. Now we have created the file, we save it and add it to the "_vti_bin" directory.
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI
Once in there we can then call it with the following syntax:
http://{SiteUrl}/_vti_bin/GetListXML.ashx?SiteURL={ActualSiteUrl}&ListID={ListGuid}&ViewID={ViewGuid}
When I ran this for my blog site I thought I would test it using the list that would not work with the "owssvr.dll" method. The URL I used was:
http://www.helloitsliam.com/_vti_bin/GetListXML.ashx?SiteUrl=http://www.helloitsliam.com&ListID={A462AB0D-84CF-4918-9950-D562530A5377}&ViewID={F10F58D9-716B-46EF-9FEF-E276A2B5EEF4}
This returned the following in the browser:
As you can see this method works really well and seems to work better than using the out of the box RPC Protocols.
Happy coding. J
Posted on 7/1/2009 at 4:56 PM by Liam Cleary
In case you have not seen this already, a hot fix has been released to fix the Service Pack 2 issue of setting your license key to a trial one. Here is the original post from Stefan.
Microsoft has released a fix for the SP2 problem that reverts the license into a Trial version after installing Service Pack 2.
More details can be found in the following KB article:
971620 - When you install the 2007 Microsoft Office servers Service Pack 2, the product expiration date is activated incorrectly
As the link to the fix binaries in the KB is currently broken here are the correct download locations:
Posted on 6/25/2009 at 9:53 AM by Liam Cleary
If like me you have worked on a mix of intranet, extranet and internet you will have no doubt been asked about capturing direct file clicks. So an example would be you wish to know the top PDF document that is being clicked on your public facing site. Out of the box SharePoint does its best with the usage analysis framework but does not capture everything that you may need. In this post I will show you how to use custom code to capture specific file type links and log them to a list. Firstly let's create the list to store the values, to do this I am going to create a content type and then associate this with a custom list.
Now have our new content type albeit a very basic one, we can then create our new list and associate accordingly.
So to make this work we could use some code that resides within the "Global.asax", I like this approach as it means you do not need Visual Studio to make changes and they can be done on the fly, however this is not the best approach. For this we will create a custom "HttpModule" that we will register within the "web.config". So to begin let's create a class library project in Visual Studio and ensure it inherits from the "IHttpModule" class. I am going to name my class "CountDirectLinks.cs" and then create a utility class for any functions etc that I need and call that "CountDirectLinksUtilities.cs".
So firstly ensure that we are inheriting correctly and have the correct namespaces for this to work.
We now need to create the base methods for capturing the relevant events. To do this we will use the following code:
This initialize method attaches to the current context and calls the "AuthenticateRequest" method. This allows us to intercept anything that happens after a user has been authenticated. We could use other methods if needed such as "BeginRequest"; this would capture anything before it was authenticated. In our case we wish to get the clicked links when someone has been authenticated. Our code should look like the following:
Now part of this solution was to allow the Administrator to specify the file types that they wish to capture and log. To do this we will simply create the following "appSettings" within the web.config. We will also add two extra ones for the root site URL and the list name that we are to log to. This could be done differently but I chose this for this example.
The list of file types will simply be a separate list that we will then read into the HttpModule and use accordingly. So firstly let's create our code for inserting the content into our list. We need to create the method and then get the values from the "AppSettings" within the "web.config" using the "ConfigurationManager" namespace.
We then add the following code to get a SPSite and SPWeb object.
Now we can add our code that will create the new list item.
Notice that I am calling a utility method called "GetFileName" this is because when I grab the URL I get something like this:
http://intranet/Dev/Shared%20Documents/myDocument.pdf
I would need to parse this out so I would get just the name of the file instead. Even though this would work I felt it would be better to call a function that would give me access to the metadata fields that were associated with the actual file. This would then allow me to extend the solution further by getting other details about the file rather than just the URL. For this example I get the actual name of the file as shown in the library or list.
This method is a re-hash of the one I used in my Search API posts a while back. The code should be similar to this:
So now we have our method created that will actually insert to our logging table, now let's modify the "AuthenticateRequest" method so it reads the file types and then inserts the log as needed.
As you can see this grabs the current "HttpApplication" which comes from the initialize event, grabs the file types as an array and parses them and inserts the log when needed. Okay so now we have built it, let's built and deploy. In my case it creates a DLL, which I add to the GAC (development box), and then add the following entry to the "HttpModules" section of the "web.config" file.
So test this we can upload some files into a library and then access them. The following screenshots is the process I took:
If we now look in the custom logging list we can now see two entries for the viewed files:
If you remember we are only logging PDF, PNG and DOCX file extension but this could be changed.
As you can see with a little customization we could capture all kinds of content about the current user or visitor accessing the site. In the next post we will extend it to capture more information and events through the system. J
Posted on 6/3/2009 at 6:52 AM by Liam Cleary
Yes that is correct; I did say SharePoint on the iPhone!! Recently I got an iPhone and since then I have been obsessed with it. It is a fantastic tool for work as well as looking sexy!! Since getting it I have been teaching myself how to write programs for it and looking into how to get it to talk to SharePoint. As I have been working on it, I have wondered why no-one had written anything, and then out of the blue I stumbled across the following two links:
http://www.isharephone.com/ (Not tested yet)
http://www.spyk.com/Pages/Default.aspx (Tested and using)
After looking into them I decided to try the iShare for the iPhone. So after I installed it what do we get?
You are able to add multiple accounts; mine is set to my blog site.
Once you set up the connection you are then able to select the browse button and view your structure of the site.
If we now click on the downloads library we can then see the types of the library.
If we now click into the articles category we should now see our documents
Upon clicking on one of the PDF documents it will then load and the render the file as needed.
If we go back to the root and this time select the links list it renders as shown below.
Let's say we want to add a new one, we can press the plus button at the top right. You should then see the content types that are available to select from listed.
I will choose the link option and I am then presented with the fields that I need to complete, one of which is URL. If I press the URL field I am presented with the keyboard as normal and can then type.
Once done I press OK and then my new link is listed within the list.
If I wanted to also see my posts on the blog and make some quick edits I could access the posts library from the root site.
To see one of the posts I simply select the post and it renders in a form view.
I can then select Edit from the menu bar and it will allow me to edit the content of each field.
Now this is great but what about if you don't know what it is you are looking for. You are able to search from the application.
You can then work with the links, files etc as you would normally. All in all this is a great product, ok no it may not render the entire site as I wanted but it renders in it a way that means I can make quick changes updates etc while on the go.
I am using it myself for some of the SharePoint sites at work where I need to be able to view and update things while on the move. I recommend you pop onto the App Store and download a copy of it!!
Posted on 5/15/2009 at 11:18 AM by Liam Cleary
As most of you will no doubt know, SharePoint uses 302 to redirect pages and sites to the default pages. In a good external site you would really want these to be changed to 301 redirects. What are these redirects and what do they do?Permanent 301 Permanent 301 redirects are just as they sound. They are permanent redirects from an old URL to a new one. These redirects tell the search engines that the old location is to be removed from their index and replaced with the new location. Using 301 redirects is the most search engine friendly way to redirect traffic and engines, and far outweighs that of various JavaScript and Meta refresh redirects.Temporary 302Temporary 302 redirects are also as they sound; temporary. Here you are telling the search engines to read and use the content on the new page, but to keep checking the original URL first as it will ultimately be reestablished.
The main issue with 302 headers is that the redirected locations don't get crawled by search engines which don't follow temporarily moved pages. This is not an issue for intranet sites normally but for external sites this is a problem.
There are tons of ways of fixing this, a few are the following:
http://www.thesug.org/Blogs/lsuslinky/archive/2009/04/17/Fixing_the_302_redirect_problem_in_SharePoint_.aspx.aspx
http://vettekerry.wordpress.com/2008/09/09/moss-seo-302-pages-redirect/
http://blog.seo-hardcore.com/caching/sharepoint-2007-301-redirects
http://www.sharepointblogs.com/tmt/archive/2008/01/21/sharepoint-2007-redirect-solved-using-301-instead-of-302-redirects.aspx
To add to the list I decided to simply add some code to the "Global.asax" file. This is only a temporary fix, as the proper way of doing it would be to use an Http Handler. I know there are lots of pros and cons to using the "Global.asax" within a SharePoint environment but for this *quick* fix it worked okay.
Now for my requirement I simply needed to ensure that when someone typed: http://www.sharepointsite.com/Pages/ that it did a redirect using 301 not 302. The redirection from the site URL of http://www.sharepointsite.com, had already been fixed using a Http Handler, however the functionality for the pages redirect was not in this version. So let's look at what it does to begin with. I am using the following URL on my laptop:
When I access this site you can see using Fiddler that a 302 redirect takes place.
Now with the code block below the following happens:
NOTE: The code block is very simple, not the most elegant code but as stated before should really be developed into an Http Handler.
Now I know that this is the ideal approach to resolve this issue so this is just an idea of what can be done to fix this issue without having to write a full module that fixes this. You can take the code you would write for the handler and use that within the "Global.asax" as well if needed.
Posted on 5/15/2009 at 6:29 AM by Liam Cleary
If like me you have worked with quite a few SharePoint installs, probably at some point you will have configured incoming email. It works well and relies on the following:
One thing I had always wondered was how come you could only use a single domain. The configuration below shows what I mean:
The reason for this was what happened if you were in a hosted environment with multiple site collections you could only enable incoming email for one domain when in fact you would want to use multiple. Now this could be achieve by using exchange etc and routing them to the single domain alias that the SMTP Server on MOSS uses.
After some investigation by me and a colleague (Willie) it became evident that the process within MOSS for incoming email did not check the actual domain part. So if your email address is the following:
mylibrary@mosserver.domain.com
The incoming process in MOSS only reads the "mylibrary" part. It is the SMTP Server that is checking the domain. The MOSS part is purely reading the files as they hit the drop folder and then checking which library to send it to. So with this being case I did some further investigation and managed to build the system so I could route the following email addresses to the same library:
0605091@win2k8x64.labs.local
0605091@domain1.com
0605091@domain2.com
So to configure this I did the following:
Firstly I needed to ensure that SMTP Server was installed on the MOSS Server. To begin with my server has six IP address:
192.168.1.130 = Default SMTP Server
192.168.1.131 = Domain 1 SMTP Server (Creating now)
192.168.1.132 = Domain 2 SMTP Server (Creating now)
192.168.1.133 = Not used
192.168.1.134 = Not used
192.168.1.135 = Not used
From the IIS6 Compatibility Internet Services Manager I was able to check the default SMTP server was running on the following IP address over port 25.
We now needed to create a new SMTP Server for each domain that we wish to use. Simply right click and select "New >> SMTP Virtual Server".
We need to select one of the IP Addresses added to the server for each virtual server; in this case we used the following:
The key is next, we need to set the drop folder to the same as the default one that SharePoint is configured to read from:
Next add the domain you need:
Now we needed to repeat the process for each of the domains I was testing. Below is a shot of IIS Manager after they were configured:
To make my life easier I installed the Telnet Client on my Windows 2008 Server and connected to each SMTP Server IP Address and ran normal SMTP Commands to create an email from the same address test@mail.com, and then sent it to the above addresses:
Once the emails were created in the telnet client they were then added to the drop folder.
As you can see with the following screenshots, each email clearly has a different "x-reciever" address which matches our addresses we wish tom test.
After a while you should then see the drop folder empty as the SharePoint Timer job runs and moves the emails. The mails should then appear in the specified library. Notice they all appear irrelevant of the domain being used. The only common thing is the list/library alias of 0605091.
To prove they are the right emails each body of the email was set with a different message saying which domain it came from. If we now open each one you should now see the following:
So as you can see SharePoint does support multiple domains for Incoming emails even if the user interface within Central Administration and the list / library settings do not allow it. In a real world environment you still may use something like Exchange to receive the initial emails and then route to where you need them within the SMTP Server on MOSS. All in all this gives us a lot of flexibility for using incoming email within MOSS 2007. J
Posted on 5/9/2009 at 5:09 AM by Liam Cleary
In the last few posts we have looked at some of the Search API basics. One of the issues I mentioned earlier was that the "PublishingRollupImage" does not show itself in the search results. Using the following XSL code you can see this:
I decided to use the Search Coder tool and see if this would display the "PublishingRollupImage". I ran the same search query as before and the following was returned:
However I noticed that the required field did not return any data again.
As you can see this is obviously an issue with the core search API. So I set about trying to fix this issue and the idea was to use the code we created last time (which is a CAML query) and somehow use it inside the standard Search Results Web Part. So the architectural idea is as follows:
So let's create the web part. Firstly open up Visual Studio and choose to create a web part project. Make sure you inherit from the following:
Based on our design, we only need to override the following method called "ModifyXsltArgumentList":
We need to add a reference to our custom XSLT extension that we have not added yet.
So now we have our web part done lets add the XSLT extension code. This for ease and convenience will be added to our web part as a new class. Not the best approach but for this demonstration should be fine.
The code is more or less the same as the previous post so does not need documenting here. J
I was going to create a new XSLT but thought it may be easier to use one of the ones that exist here:
http://www.codeplex.com/sctxsl
I chose to use the following XSLT: http://sctxsl.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=12070#DownloadId=32021
So now let's tie it all together. We will add our new web part to the search page as shown below and add the XSL we used earlier to return the raw XML:
We need to modify the fields list so it includes the "PublishingRollupImage". To do this we need to modify the "Selected Columns" that are listed within the "Results Query Options".
We also need to modify the XSLT by pasting the one that we downloaded from Codeplex. We also need to modify the following lines:
Notice that we are adding references to the new XSLT Extension and calling it for our item URL. Once this is all put together it renders as shown below:
This now means that I can custom style my results anyway I wish and know the "PublishingRollupImage" will display. And this works because we are using a custom XSLT Extension class. This is a great way of solving the "PublishingRollupImage" problem, it has not been tested with lots of results but should function fairly ok as it is only called if it needs to be called. J
Posted on 5/6/2009 at 12:00 PM by Liam Cleary
In my last post we looked at some basic Search API code using our forms application. As a response to this Daniel from "Zevenseas" he has a tool, if you haven't already got it, go get it from here: http://mosssearchcoder.codeplex.com
This application will allow you to create all the Search Queries and even generates the C# code that you may need. Recommend you go get it!!
In this post I wanted to look at changing the code we wrote last time and turn it into a web part. So let's begin. Create a new Web Part project and call it the following:
The code will be the same for our search etc and also our "PublishingRollupImage" CAML Query. The only change is that instead of passing the URL to perform the search query, we use the following:
The code from this point down is more of less the same.
In the previous post we had a checkbox that enabled the "PublishingRollupImage" check. In the web part I wanted to change this to check if this field had been added to the list of fields and then only run of it was.
The user interface for this is simply a set of labels and boxes that are rendered using the following syntax for each item.
Now we have our web part built it should render as the following (Ignore the layout etc, just showing functionality):
When we run this without the "PublishingRollupImage" field it shows as below:
When we run this with the "PublishingRollupImage" field it shows as below:
As you can see this is now functioning as in the previous post. In the next post we will look at changing this and using the Search Core Results Web Part and using our custom CAML code we created previously. J
Posted on 5/6/2009 at 10:00 AM by Liam Cleary
On a few projects recently there has been a need to use the search API. You may wonder why you would think to use the search API at all considering we have all the aggregation we need with the Content Query Web Part. I hear you and yes I understand however there are occasions when you will need to use this. The CQWP is great but does have a few problems when you reach over the 2000 lists in a site collection limit, even though you can set the limit using the "<Lists />" parameter to unlimited it still tends to fail. A quick way of resolving this is to use the search API, not only is very easy and quick to use, but it also allows for cross site collection searches out of the box.
So in this post I am going to show you the basics of using the search API. So to begin with I am not going to build a web part or control, I am simply going to build a windows application that just returns to rudimentary data from the search we perform.
Firstly I have created a form that looks like this:
The form is fairly straight forward and not sexy in anyway. It has a textbox for the portal URL, a few boxes for the actual search query and then the results. Of course there is a button to run this query also. So let's begin with the code. The first thing to note here is that you need to add the following references:
We then need to connect to the site we want to use. Below is the standard statement I would use, notice this is coming from the textbox field on the form.
Once we have our connection to the site we then combine the various textbox values to create the full SQL Query.
We then need to tell the code to run a "FullTextSQLQuery", notice I have enabled "Stemming", "Trimming of Duplicates" and made sure the results are "RelevantResults".
Now we have our query created and out base settings for the "FullTextSQLQuery" we need to actually execute this and populate the "ResultTable"
After the "ResultTable" is populated a dataset is populated with these values, this just makes it easier for my example here.
Now I am going to create a "StringBuilder" so I can separate the type field values and then format these so my results are dynamic based on the fields type in the query. If I did not do this I would have needed to rely on typing each field that was selected out for the results to work.
Lastly we populate the textbox with the results. So let's see what it looks like:
I am using a basic query as shown above:
"SELECT Title, URL FROM Scope () WHERE FREETEXT(DEFAULTPROPERTIES, 'Administrator') ORDER BY RANK"
The results for this are as follows, excuse the formatting here.
So what if we wanted to run a similar query that returned users "My Sites" instead. Let's modify the query again:
"SELECT Title, URL FROM Scope() WHERE "scope"= 'People' AND FREETEXT(DEFAULTPROPERTIES, 'Administrator') ORDER BY RANK"
The returns just the administrators my site link, if we take off the end part of the query we get the entire "My Site" site links.
"SELECT Title, URL FROM Scope () WHERE "scope"= 'People'"
Now what about if we wanted to get only pages based on a specific content type? The query needs to be modified as shown below:
"SELECT Title, URL FROM Scope() WHERE ContentType = 'Article Page' ORDER BY RANK"
Or you could search for multiple content types with the following syntax:
"SELECT Title, URL FROM Scope() WHERE ContentType = 'Article Page' OR ContentType = 'Page' OR ContentType = 'Welcome Page' ORDER BY RANK"
As you can see with a little playing around you can get any of the fields to show up and then use them in the search. In the next few posts I will expand on how we can use the Search API to produce some powerful results.
One of the only issues that I have found is the issue of certain fields not showing up in the search results. This is a pain and can stop you deciding to use it. Even though the field is indexed and is present in the Shared Service Provider it does not show up in the search results. To show you how you can expand the code slightly I have changed my initial form to include the following:
This check runs some kind during the search process and grabs the relevant "PublishingRollupImage" details. This is basically using a CAML query based on the URL of the item found in the search.
The result is the following:
In the next part we will look at moving this into the SharePoint and changing the output to XML and using XSLT to style it. J
Posted on 5/6/2009 at 9:00 AM by Liam Cleary
So recently I had the opportunity to speak at a SharePoint Conference in Baltimore. As with any session that you give there are generally a load of questions that arise at the end. This session was the same except I was quite surprised as to the amount of people that had not rolled out "My Sites" within their organization. This post is going to be a recap of some of things that were presented and also my thoughts on the whole "My Site" concept.
So what is a "My Site"?
The standard answers could be the following:
I want to add the following:
Often people say that "My Sites" are similar to Facebook, LinkedIn, MySpace or even Bebo site. To some extent this is kind of correct. Some examples could be the following:
For me the "My Site" is slightly more controlled than the standard social networking sites, and is not as flexible as these due to the limited functionality that comes out of the box for social networking. That is not to say it cannot be done or even tweaked tom work in a similar way.
So what are the core features?
A "My Site" is really a customised team site and as such as some of the standard features that you would expect from any SharePoint site. In addition there are some very specific controls and web parts that only function within the "My Site" framework.
Library and List Storage
Colleague Tracker
Memberships
Web Part Usage
Exchange Email Integration (view)
These are just of the some key features that are available within the "My Site". This stills gives you great flexibility when rolling out the sites or modifying your own.
Can "My Sites" be branded?
Yes they can, they are not the easiest to change as they work slightly different to a normal team site. There are some great articles out there about this topic. To summarise the options:
Here are some links for further information about either branding or My Site specific branding:
http://sharepointbergen.blogspot.com/2007/04/customizing-my-site.html
http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-1b-branding-methods-by-scope-and-scenario.aspx
http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-1a-high-level-overview-terminology-and-approach.aspx
http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-introduction.aspx
http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-2-site-system-pages.aspx
http://blogs.msdn.com/bgeoffro/archive/2007/11/12/branding-a-moss-corporate-intranet-portal-part-3-layouts-pages.aspx
http://blogs.msdn.com/sharepoint/archive/2007/03/22/customizing-moss-2007-my-sites-within-the-enterprise.aspx
http://blogs.msdn.com/sridhara/archive/2007/05/19/customizing-mysite-in-moss-2007.aspx
http://www.brandingsharepoint.com/Lists/Posts/Post.aspx?ID=40
How does the "My Site" work?
I suppose the first thing to learn here is what actually happens when you click the "My Site" link,
You then arrive at http://MySiteURL/personal/userid/default.aspx
So now we know how we get the right page what is the "My Site" made up of? Well the site itself as mentioned previously is a team site but slightly modified. The site has two pages that are in effect the presentation of the site; they are "Public.aspx" and "Private.apsx".
The private view is really only for you as the owner, it allows you to add web parts, consume content etc as with any other site. It is only visible to you as the owner.
The public site is where it all happens; this is where you get the chance to present yourself to the business. The key here is that this can be viewed by anyone.
Public documents
Colleague Tracking
In Common with You
Organisation Hierarchy
Contact Information
What is the key to the "My Site"?
The key is "Findability"; the only way they will work is if the content is fresh and relevant. Some base guidelines are:
So if it is that easy to do why have we not deployed them?
There are many reasons why, a few that I hear quite often are:
So last but not least, what are the best practice ways to deploy?
I am not saying that this is the complete list, but over the past few years, blog reading and general ideas the following seems to work:
Also remember the following:
This post is not meant to be the definitive set of rules and guidelines for "My Sites" but hopefully it may encourage those of you out there to roll them out and to use them. As mentioned in the beginning, "My Sites" are all about making a brand for you as a person. Remember this may be a tool that helps your career progress as the business now know who you are.
Posted on 5/4/2009 at 12:00 PM by Liam Cleary
Posted on 3/15/2008 at 8:42 AM by Hervé Stalder
La problématique de traitement du courrier entrant est une préoccupation actuelle ; pour y répondre il existe sur le marché de nombreux systèmes de capture et d’indexation très efficaces (EMC Captiva inputAccel, Kofax Ascent Capture…) Le choix d’une solution de dématérialisation doit s’inscrire dans une démarche d’entreprise et est fonction du niveau d’intégration souhaité au sein de l’infrastructure informatique. L'objectif est d’offrir le plus de potentiel pour de nouveaux projets (traitement des factures fournisseurs par exemple)
Le principe de fonctionnement en est le suivant :
Cette étape correspond à la fin du traitement dans l’outil de capture et d’indexation: Le cycle de vie du document dans la GED commence ici
Cette solution permet parfaitement l’interfaçage avec la plupart des ERP du marché et des solutions d’archivage du marché (donc fonctionne aussi parfaitement avec le Record Center de MOSS)
Posted on 10/17/2007 at 8:08 AM by Hervé Stalder
Ce blog est dédié à la gestion du cycle de vie documentaire en environnement SharePoint 2007, c'est-à-dire des mécanismes d’élaboration de documents jusqu’aux mécanismes d’archivage ou de disposition.
Je pense aborder tous les domaines touchant le cycle de vie des documents, c'est-à-dire :
- Création de documents, capture, génération documentaire
- Edition de documents, authoring, processus collaboratif d’élaboration de documents
- Gestion électronique de documents
- Mise à disposition, mise à jour et nouvelles versions
- Archivage et disposition
Les notions transversales à ces domaines seront abordées, par exemple :
- Workflow et business process
- Sécurité, sécurisation de documents
- Gestion de l’intégrité des documents
- Aspects légaux liés, valeur légale, normes et standards
- Bonnes pratiques d’archivage et de conservation
Enfin, tous ces concepts et domaines seront appliqués et démontrés en environnement SharePoint 2007 (WSS v3 ou MOSS 2007) sur des thèmes aussi variés que :
- La classification automatique de documents
- Le traitement des factures fournisseurs
- Le traitement du courrier entrant
- Les processus d’accueil de nouveaux collaborateurs (New Comer)
- La gestion de la qualité avec MOSS (par ex. application du standard 21 CFR Part 11)
- La compliance sous MOSS 2007
- …
Le décor est planté ; dans les premières contributions j'aborderai la base du traitement des factures fournisseurs.
Bonne lecture,
HES
Posted on 10/15/2007 at 12:12 PM by Hervé Stalder
Posted on 10/9/2007 at 11:17 AM by Hervé Stalder
All Blogs