Home - Blogs
 

‭(Hidden)‬ Admin Links

Welcome to RapidMind Solutions Inc. > Blogs
Blogging, simple yet profound.
How to create a SharePoint portal programmatically using "PortalProvisioningProvider"

Intro:

SharePoint is a great product to use, if you know how to leverage it properly. Thousands of companies out there that use SharePoint sadly miss out on some of the great quirks that SharePoint has to offer. One of my favourite ones is the ability to generate an entire portal structure on the fly. Not only does this save you time in the painstaking process of making sites and subsites (and assigning the right templates to them), but it also provides a clean structure which you can revisit at any time for restructuring or redesign purposes with little effort. 
 

Step 1: Design it

Do a high-level design of your portal's structure based on what you (or client) needs, list all your main sites, and the subsites, and determine who'll have access to using the different sections and on what content. As an example, we'll set up our portal the following way.

 

1 Home

2 -Services (For all users)

3 -Employees (For users of type Employee)

   --TeamBlogs

   --KnowledgeBase

4 -Clients (For users of type Client)

   --Projects

   --Announcements

   --Stakeholders

5 -About (For all users)

 

Portal Design Illustration

This is our portal structure, notice that under the Employees and Client subsites, I'm creating specific subsites that will cater to the type of user that's logged in to my portal (If you want to read more on how to manage site groups and permissions, read this article: "Managing Site Groups and Permissions" http://office.microsoft.com/en-us/winsharepointadmin/HA011608101033.aspx).

 

Step 2: Manifest it.

Create the following file:

Your project SharePoint (AKA 12 Hive)\Template\SiteTemplates\RMSIManifest\RMSIPortalHomeManifest.xml

 

<?xml version="1.0" encoding="utf-8" ?>

<portal xmlns="PortalTemplate.xsd">

         <web name="Home" siteDefinition="RMSIHome#1" displayName="Home" description="RMSI Portal Manifest">

                 <webs>

                          <web name="Services" siteDefinition="RMSIHome#2" displayName="Services" description="Services sub-site (List of our services, public announcements, etc)" />

 

                          <web name="Employees" siteDefinition="RMSIHome#3" displayName="Employees" description="Employees Sub-Site (tailored to each employee)" >

                                   <webs>

                                            <web name="TeamBlogs" siteDefinition="BLOG#0" displayName="Team Blogs" description="Blog Site containing personal and technical blog postings from team members." />

                                            <web name="KnowledgeBase" siteDefinition="WIKI#0" displayName="Knowledge Base" description="Wiki Site containing orientation literature and SharePoint related technical posts from team members." />

                                   </webs>

                          </web>

                          <web name="Clients" siteDefinition="RMSIHome#4" displayName="Clients" description="Clients Sub-Site (tailored to each client)">

                                   <webs>

                                            <web name="Projects" siteDefinition="STS#0" displayName="Projects" description="Team Site containing list of client projects, timelines, scheduled meetings, etc." />

                                            <web name="Announcements" siteDefinition="STS#0" displayName="Announcements" description="Team Site containing Project Announcements, including new projects and completed projects." />

                                            <web name="Stakeholders" siteDefinition="STS#0" displayName="Stakeholders" description="Team Site containing Project Stakeholders, including client contacts and team members assigned." />

                                   </webs>

                          </web>

                          <web name="About" siteDefinition="RMSIHome#5" displayName="About" description="About Sub-Site (Who We Are, Core values, the leadership team, careers, contact page)" />

 

                 </webs>

         </web>

</portal>

 

In this case, for the bottom-level subsites (like Employees/Orientation, or Clients/Projects), I'm using OOTB (Out Of The Box) site templates (like "STS#0", which is the SharePoint Team collaboration site template).

 

By the way, you MUST have the following URL bookmarked; List of Out of Box (OOB) Site Templates http://blumenthalit.net/blog/Lists/Posts/Post.aspx?List=35b60df2-0af2-4e52-8c6f-d3a64a542f45&ID=45

 

In all other cases, I'm using a custom site definition marked with my portal's home site definition prefix (RMSIHome) followed by a numeric identifier. Note that this is not necessary, you're better off using the OOTB site templates since they usually have what you would normally need. But if you would rather create a custom site definition rather than use a basic Publishing site, then follow this article through including Step 4.

 

If you want to read more on this discussion (the cons of creating custom site definitions), read: "Andrew Connell's post on Site Definitions" http://www.andrewconnell.com/blog/archive/2008/02/15/You-dont-need-to-create-site-definitions.aspx


Step 3: Define it. 
 

Create the following "WEBTEMP" file:
*12 Hive*\Template\1033\XML\webtemp.RMSIPortal.xml

 

<?xml version="1.0" encoding="utf-8" ?>

<Templates xmlns:ows="Microsoft SharePoint">

  <Template Name="RMSIPortal" ID="10010">

    <Configuration ID="1"

                   Title="RMSI Portal"

                   Description="RMSI Intranet Home Web"

                   ImageUrl="/_layouts/images/blankprev.png"

                   RootWebOnly="TRUE"

                    Hidden="FALSE"

                   DisplayCategory="RMSI"

                   ProvisionAssembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"

                   ProvisionClass="Microsoft.SharePoint.Publishing.PortalProvisioningProvider"

                   ProvisionData="SiteTemplates\\RMSIManifest\\RMSIPortalHomeManifest.xml"

                   />

  </Template>

</Templates>

 

Notice that we're leveraging the "PortalProvisioningProvider" (which implements SPWebProvisioningProvider), this takes the data found in "RMSIPortalHomeManifest.xml" from Step 1, and generates a portal structure based on that information. If you want exact details on the properties I used in the above example, read this article: http://blogs.technet.com/apurdon/default.aspx

 

Important! I've run into the problem where I was in an infinite loop and produced a vague "Stack Overflow" error. Took me a while to figure out that the reason was because I was using the same name in my Portal template (above) as in the site template "RMSIHome" (below) so save yourself some trouble, and ensure that they're different as we're doing here (in this case, I've named my template "RMSIPortal"). 

 

Step 4 (optional): Site-Define it! 

This step is only needed if you're creating custom site definitions, so if all you're using are OOTB templates like STS#0, you can skip this step.

 

Under SiteTemplates, create a folder called RMSIHome (this HAS to match your siteDefinition name prefix designated in your manifest file). In this folder, you will set up an ONET.xml file (which stands for an Office .NET file). You can reuse one of the OOTB Site Templates for this from this location: c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates

 

Now, your file will contain all your site definitions indicated in Step 2, with the features used in each one of them, i.e.:

 

<Configurations>

  <!-- Home -->

    <Configuration ID="1" Name="Home" CustomMasterUrl="_catalogs/masterpage/YourIntranet.master">

 

         <SiteFeatures>

 

         <!-- In here you will include any custom or OOTB Site Features -->

 

         <!-- BasicWebParts Feature -->

         <Feature ID="00BFEA71-1C5E-4A24-B310-BA51C3EB7A57" />

 

         <!-- Three-state Workflow Feature -->

         <Feature ID="FDE5D850-671E-4143-950A-87B473922DC7" />

           ....

         </SiteFeatures>

 

         <WebFeatures>

 

         <!-- In here you will include any custom or OOTB Web Features -->

 

         <!-- TeamCollab Feature -->

         <Feature ID="00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5" />

        

         <!-- MobilityRedirect Feature -->

         <Feature ID="F41CC668-37E5-4743-B4A8-74D1DB3FD8A4" />

           ...

         </WebFeatures>

 

    </Configuration>

 

  <!-- Welcome -->

    <Configuration ID="2" Name="Welcome" CustomMasterUrl="/_catalogs/masterpage/YourIntranet.master">

         ...

    </Configuration>

 

  <!-- Employees -->

    <Configuration ID="3" Name="Employees" CustomMasterUrl="/_catalogs/masterpage/YourIntranet.master">

         ...

    </Configuration>

 

  <!-- Client -->

    <Configuration ID="4" Name="Client" CustomMasterUrl="/_catalogs/masterpage/YourIntranet.master">

         ...

    </Configuration>

 

  <!-- About -->

    <Configuration ID="5" Name="About" CustomMasterUrl="/_catalogs/masterpage/YourIntranet.master">

         ...

    </Configuration>

</Configurations>

 

Notes:

 

What is Three-State Workflow?

This feature is used to track the status of a list item in three phases. As per the article below, "it can be used to manage business processes that require organizations to track a high volume of issues or items, such as customer support issues, sales leads, or project tasks."

More info: "Use a Three-state workflow" http://office.microsoft.com/en-us/help/HA101544311033.aspx

 

What is a TeamCollab Feature?

This tells your site how to activate certain features that define the collaboration lists and libraries in a given "Team Collaboration" Site.

 

What is the MobilityRedirect Feature?

This feature allows you to support pocket PC and other PDA browsers by taking them to a customized "/m/default.aspx" page in your site. If you think mobility would be useful for your site, read this: "Custom Mobility Pages for SharePoint" http://www.iwkid.com/blog/Lists/Posts/Post.aspx?ID=36

 

For a list of all Farm, Site and Web Features in MOSS 2007 and their GUID's, check this link:

"List of Features with GUIDs" http://www.thorprojects.com/blog/archive/2007/05/16/list-of-features-with-guids.aspx

 

Step 4: Deploy it!
That's it! Go ahead and build to make sure there are no build errors, then do an IISReset (or just reset the app pool that your site collection is running under, this is usually faster).

Now, depending on the way you have your project set up, you can either have the portal provision as part of your deployment script, or do it manually in Central Admin (after you deploy it), at the "Create Site Collection" option in the "Application Management" tab (note that the site template will only show up in the list of templates if you have the property HIDDEN=FALSE, in webtemp.RMSIPortal.xml).

And by the way, if you aren't using the SharePoint Solutions Package Creation Tool (WSPBuilder), you should: http://www.codeplex.com/wspbuilder

Signing off!

Salem Al-Tamimi
SharePoint Consultant
RapidMind Solutions Inc.

Telerik RadScheduler Templates and Binding Checkboxes
So I Spend hours sifting through article after article about how to place an asp:checkbox in a telerik radscheduler template to find that there really are no good answers out there. Everyone I found were guestimations or assumptions.
 
Let me give you a hint right now.
 
It has nothing to do with Databinders, DataItems or Containers
 
Funny enough the answer was so simple it gave me a headache.
 
here is the magic.
 
asp:CheckBox
ID="chbPublic"
runat="server"
Checked='<%# Eval("publicAccess").ToString().Equals("true")?true:false %> '
 
Now read it carefully.
 
I am working in C#. Every other answer out there was in VB and did not work.
 
Eval("publicAccess").ToString().Equals("true")?true:false
 
In my case I was getting a string back true or false or null.
this covers them all.
 
for good coding practice I would recommend using a
 
     .toLower()
 
Final Version
 
Eval("publicAccess").ToString().ToLower().Equals("true")?true:false
 
Your Welcome. Enjoy
 
 
Intro to LINQ (Part 1) - Progression of the Loop

I've been asked recently to explain the advantages of using and the Extension Methods available in Visual Studio 2008 with C# 3.5.

I have trouble explaining this. It came to me as one of the "Eureka" moments. The best way for someone to learn it, is just to see it. So, I'm going to head back to my earliest memories of coding and an taste of what I see.

In introductions to programming, a simple problem is often repeated. It is probably because we see the problem in different variations constantly while coding. Given a set of data, perform an action based on each element in the set.

Specifically, I'm going to take an array of integers (1 to 10) and write each one to the console.

When I started programming, the GOSUB was not yet introduced (Yes, I learnt to program in BASIC). So to solve the problem, we coded the following logic:

Code Snippet

1:   static void GotoLoop(int[] data)
2:   {
3:  
//Initialize the loop
4: 
//Zero based Array
5: 
int currentIndex = 0;
6:  
//Or some form of terminating indicator
7: 
int end = data.Length;
8:  
//A placeholder reference for what is currently being worked on.
9: 
int currentData;

10:  
//Run the loop
11: 
start:

12:  
//Do something with current item
13: 
currentData = data[currentIndex];
14:  
Console.WriteLine(currentData);

15:  
//Finalize the loop
16: 
currentIndex++;

17:  
//Run Gaurd statement
18: 
if (currentIndex < end) {
19:  
goto start;
20:   }
21:   }

</PRE< DIV>

 

Looking at the code, it seems a wonder anyone ever got anything done. That's a lot of plumbing to repeat a single action. Let alone the potential spots for errors. It is step for step (or as close as I was going to produce for this post) what instructions the computer is going to use to handle this problem.

To mitigate some of the plumbing problems, language designers create a new syntax for this issue. The For Loop:

Code Snippet

1:   static void ForLoop(int[] data)
2:   {
3:  
//Or some form of terminating indicator
4: 
int end = data.Length;
5:  
//Or some form of terminating indicator
6: 
int currentData;

7:  
//Zero based Array
8: 
//Run Gaurd statement
9: 
//Finalize the loop
10: 
for (int currentIndex = 0; currentIndex < end; currentIndex++)
11:   {
12:  
//Do something with current item
13: 
currentData = data[currentIndex];
14:  
Console.WriteLine(currentData);
15:   }
16:   }
</PRE< DIV>

 

Same amount of logic, same potential for errors. However, here the code groups the code required to enumerate the array is placed all in the same line, creating a separation of logic. This makes diagnosing and finding bugs easier.

Along with the advances in OOP, the idea of encapsulation came along. So a few new ways of limiting this came about. An Iterator interface was created to wrap data structure like array, with methods hasNext and Next to eliminate much of the plumbing from the code.

This expanded into an System.Collections.IEnumerable interface which allows a new construct of the ForEach statement.

Code Snippet

1:   static void ForEachLoop(int[] data)
2:   {
3:  
foreach (int currentData in data)
4:   {
5:  
//Do something with current item
6: 
Console.WriteLine(currentData);
7:   }
8:   }
</PRE< DIV>

 

So now, we've gone from 18 line function to a 6 line function. So this is a built-in syntax that allows for much more abstraction, more power per command.

Now, what about commands not built into the language? Wouldn't it be nice if you build a method like:

Code Snippet

1:   data.ForEach(Console.WriteLine);

</PRE< DIV>

 

Programmatically Setting permissions in SharePoint

How to Programmatically Set Permissions on Files/Folders/Lists in a SharePoint Document Library

Yep, had to figure this out since I'm still working with SharePoint stuff.  I couldn't find any "HowTo's," code samples, tricks, hints, or anything else really helpful on this.  Just a bunch of other folks attemptint to do the same thing.

 This is one of those things where the answer looks simple and seems like it should have been apparent from the start.  Alas I couldn't see it in the beginning either.

 Here's the magic code:

// get a reference to the folder (this assumes path points to a valid folder)

SPFolder folder = SharePointConfiguration.Site.GetFolder(path);

 

// get a reference to the Sharepoint group collection

SPGroupCollection spc = SharePointConfiguration.Site.SiteGroups;

 

// get a reference to the group who’s permissions you want to modify for the folder above

SPGroup group = spc[groupName];

 

// create a role assignment from the group reference

SPRoleAssignment roleAssignment = new SPRoleAssignment((SPPrincipal)group);

 

// break role inheritance for folders/files because they will be having permissions separate from their parent file/folder

folder.Item.BreakRoleInheritance(true);

 

// update the role assignments for the group by adding the permissionSet “TestPermissionLevel” which is a custom

// permissionset I created manually…you can easily use any of the built-in permission sets

roleAssignment.RoleDefinitionBindings.Add(SharePointConfiguration.Site.RoleDefinitions["Test Permission Level"]);

 

// apply the new roleassignment to the folder.  You can do this at the listitem level if desired (i.e. this could be SPfile.Item…. instead of SPFolder.Item)

folder.Item.RoleAssignments.Add(roleAssignment);

 

Original Article - http://blogs.msdn.com/robgruen/archive/2007/11/15/how-to-programmatically-set-permissions-on-files-folders-in-a-sharepoint-document-library.aspx

Telerik RadScheduler Causing jScript Error 'Object Required' Solution
When using a Telerik RadScheduler and you recieve a jScript Error stating 'Object Required'
 
The short and simple version of the answer.
 
1) Make sure you have your Script Manager at the top of the page immediately after the opening Form Tag.
 
2) Place a Div or Panel on the page with an ID and with attribute runat='Server'
 
3) Create your Telerik.Radscheduler in code and add it to the controls collection of your place holder.
 
This is the Solution that worked for us.
If you have any comments on this please post them. We love to hear from others.
 
RapidMind Solutions Dev Team
Digsby - The Messenger Replacement that does it all.
Ok. So we all know what it is like to have 2 or 3 email accounts, 2 or 3 IM accounts, facebook, mySpace and countless other things that we use for communication.  Thanks to Tyler and his never ending Quest for awesome technology we now have a new IM Program that does everything but the dishes.
 
Imagine having all your emails, IMs, Facebook updates, Twitters and many more all coming to one nice little IM Program in your tool bar. Now you can.
 
This little program can help us all be more professional by putting all your communications to work for you. Now responding in a timely manner is easier than ever. Never miss another email, tweet, status update or message again.
 

It is called Digsby

 
you can download it completely free from
 
 
Try it. like it, love it.
HowTo - Show a List of Blog items
Believe it or not the SharePoint ContentQuery Webpart, which is designed to display lists of information from our selected sources will not display a list of Blog entries. That is to say that it will not display it with out some simple modifications.
 
My first project, in which I had to learn this little trick, was to make a straight forward list of our blogs, on our home page.
 
Easy right? Ha ha. It is now that I know how. Follow these steps and you will be one step closer to having that site you have always wanted. (Or some other fun phrase there you like.)
 
1) Step one
 
open your site in Sharepoint Designer.
Locate this file and check it out.
 
Style Library > XSLStyleSheets > ItemStyle.xsl
 
2) Step Two
 
Go to the end of the file before the very last </xsl:stylesheet> Tag and insert the following definition.
 
********************************************
 
<xsl:template name="ListofBlogPosts" match="Row[@Style='ListofBlogPosts']" mode="itemstyle">
  <xsl:variable name="SafeLinkUrl">
            <xsl:call-template name="OuterTemplate.GetSafeLink">
                <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="SafeImageUrl">
            <xsl:call-template name="OuterTemplate.GetSafeStaticUrl">
                <xsl:with-param name="UrlColumnName" select="'ImageUrl'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="DisplayTitle">
            <xsl:call-template name="OuterTemplate.GetTitle">
                <xsl:with-param name="Title" select="@Title"/>
                <xsl:with-param name="UrlColumnName" select="'LinkUrl'"/>
            </xsl:call-template>
        </xsl:variable>
        <xsl:variable name="LinkTarget">
            <xsl:if test="@OpenInNewWindow = 'True'" >_blank</xsl:if>
        </xsl:variable>
        <div id="linkitem" class="item">
            <xsl:if test="string-length($SafeImageUrl) != 0">
                <div class="image-area-left">
                    <a href="{$SafeLinkUrl}" target="{$LinkTarget}">
                        <img class="image" src="{$SafeImageUrl}" alt="mailto:%7B@ImageUrlAltText}" />
                    </a>
                </div>
            </xsl:if>
            <div class="link-item">
             <xsl:call-template name="OuterTemplate.CallPresenceStatusIconTemplate"/>    
               
                <!-- Anonymous Freindly Link code -->
                <xsl:text disable-output-escaping="yes"><![CDATA[<a href="http://***YourURL.com***/Blogs/Lists/Posts/Post.aspx?ID=]]></xsl:text>
    <xsl:value-of select="@ID"/>
    <xsl:text disable-output-escaping="yes"><![CDATA[" Target="_self">]]></xsl:text>
    <xsl:value-of select="$DisplayTitle"/>
    <xsl:text disable-output-escaping="yes"><![CDATA[</a>]]></xsl:text>
    <!-- End Anonymous Freindly Link code -->
    
                <div class="description">
                    <xsl:value-of select="@Description" />
                </div>
            </div>
        </div>
    </xsl:template>
 
 
 
********************************************
 
3) Step three
 
Make sure you replace the Url "***YourURL.com***/Blogs" with the URL of your blog site.
 
then save the file and check in the changes.
 
4) Step four
 
On the page that you want to put your new list. Insert a ContentQuery WebPart.
 
On the menu for the webPart. (The edit link in the top right hand corner of the Webpart) Select "Modify shared webpart"
 
once the properties open on the right hand side of the page.
 
Select "Show items from the following lists" to "yourSiteName/Posts"
 
example "Blogs/Posts"
 
Now expand the presentation section using the + sign and under "Styles" change "ItemStyle" to "ListOfBlogPosts"
 
Save your changes, publish your page and enjoy your new list.
 
**PS.. Be sure to tune in next week when we'll here someone say "But it works on my computer! Grrrrrrr."
 
David Sullivan
Sharepoint Consultant
HowTo - Custom Theme

The easiest and the fastest way to apply the same look and feel on any SharePoint site is creating a site theme. A SharePoint site theme basically consists of theme.inf, theme.css, and image files. Theme.inf file simply represents the title of the theme. Theme.css is a stylesheet file that defines colors, header images and layouts of a site and image files can be referenced here to display on the page. By creating a custom site theme, you can easily change the style but in fact, writing and editing the stylesheet can be somewhat chanllenging when you have more than a hundred of elements to deal with.

Here is a short procedure of creating a custom site theme named "Ghost":

1. Copy any theme folder in "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES" folder and paste with its name replaced with "Ghost". In this example, copy GRANITE folder.

2. In Ghost folder, rename GRANITE.INF file to GHOST.INF in upper case.

3. Open GHOST.INF file with notepad.

4. Change the value of title under [Info] to Ghost.

5. Replace every word, Granite, under [titles] with Ghost.

6. Open "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\SPTHEMES.XML" file with notepad.

7. Add the following lines under <SPThemes> tag:
 <Templates>
  <TemplateID>Ghost</TemplateID>
  <DisplayName>Ghost</DisplayName>
  <Description>Ghost theme.</Description>
  <Thumbnail>images/thghost.gif</Thumbnail>
  <Preview>images/thghost.gif</Preview>
 </Templates>
Notice that preview and thumbnail paths are images/thghost.gif. By default, MOSS 2007 and WSS 3.0 will not have such image files.

8. In order to display thumbnail and preview correctly, you will need to capture the screen and save the file in "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\IMAGES" folder with thghost.gif name. You can change the .gif file name if you change the thumbnail and preview file names in <Templates> tag.

9. Do an iisrest for the server to recognize the new theme.

Pretty simple procedure. Now you are ready to test your new theme. In Site Settings, you can now choose Ghost theme; however, the theme will not differ from Granite theme. Now, it is time for you to play with theme.css file!

original Post - http://www.sharepointblogs.com/tigirry/archive/2007/07/03/custom-site-theme-for-sharepoint-2007-moss-2007-and-wss-3-0.aspx
Sharepoint - What is it? How can it help me?

How did sharepoint come to be?

      Over the years, people studying trends in business needs, have noticed a few very interesting facts.  Fact, no matter how many times you try to reinvent the wheel, you still end up with a wheel. Now what do I mean by that? I'm glad you asked. Over the years, multitudes of designers and developers have created millions of software packages and programs.  Almost every one has something in common.  They have all been designed with the intention to make human communications better.  Now over time, many of these developers discovered that there are only a few communication issues that everyone repeatedly tries to solve.   Recognizing this, they decided to design a package that focuses directly on the key elements that businesses need for better internal and external communications.

 

What is SharePoint?

     SharePoint is the next Generation in communications. Essentially, SharePoint is a web server system bundle. SharePoint is a collection of the most commonly used and requested Preconfigured webSites. Combining knowledge and experience from generations of Team Systems, hosting Systems, and web design systems Microsoft has created the incredibly useful and flexible System known as "SharePoint". As the name implies "Share" "Point" is a server that allows you to easily share information, internally on an intranet, or externally through an Extranet. Unlike earlier system where you needed developers to build fancy systems, sharepoint is user driven. You the end user can immediately start adding content, editing styles and effecting change on your new sharepoint system without having to depend on programmers to make changes for you.

 

How can SharePoint benefit me?

     SharePoint is designed around a few key principles. These are what I believe to be the most important points.

 

SharePoint is designed to be ready out of the box
having preconfigured working sites that handle most of your business needs built right in means your (From start to finish) times are incredibly fast. Development is minimal with proper SharePoint Architecture. (General SharePoint development should be 10% development and 90% configuration.)

 

SharePoint puts the controls in your hands.
     We are so accustomed to webPages being these static visual items that require phone calls and technicians to manipulate. SharePoint has incorporated the design tools right into the webPages. If you log in with proper credentials and have the appropriate permissions you can create new pages, edit content and manipulate your site directly from the webPage. It can be as easy as typing a letter.

 

Documents can now be shared, read, edited, versioned and managed.
     Recognizing that documents are an important part of every business; SharePoint allows us to have online libraries and storage areas for everyday documents, images and other various files. Need to maintain a collection of invoices, contracts, stories or any other document. No problem, this is what sharepoint does best. Better yet would you like to have sharepoint enforce some rules about certain documents? It can do that as well. Using workflow sharepoint makes sure your documents follow the necessary paths to completion.

 

Security at its finest!

     By using secured credentials sharepoint manages security at all levels. Every step in a SharePoint Application requires some form of security level. When designing your SharePoint Solution you will designate Public areas and Private areas. Even the private sections will have sub levels of privacy allowing you total control over who controls what in your SharePoint System.

Conclusion
     From start to finish SharePoint is drastically changing the way people us the internet technologies. Using templates and premade systems developers can create dynamic and interactive Company Sites in a fraction of the amount of time. Companies can now instantly correct or modify their own pages right from the desktop. Through SharePoint's predesigned team sites, wiki sites and blog sites companies can communicate between offices, branches even countries better than ever before. From the smallest family Store to the Largest International conglomerate sharepoint can increase your internet presence and help your internal communications immensely.

 

     In my opinion SharePoint can help anyone that has to communicate with co-workers and or clients. I know that's a pretty broad statement; however SharePoint can do so much for so many. After all it is the fastest growing product Microsoft has ever produced, with over 75 Million Licenses purchased already.

 

David Sullivan

Developer and Consultant.

Latest Blogs ...