Pages

Friday 2 September 2011

Prevent duplicate item in a SharePoint List

The following Event Handler code will prevent users from creating duplicate value in "Title" field.

ItemAdding Event Handler
 public override void ItemAdding(SPItemEventProperties properties)
        {
            base.ItemAdding(properties);
            if (properties.ListTitle.Equals("My List"))
            {
                try
                {
                    using(SPSite thisSite = new SPSite(properties.WebUrl))
                    {
                        SPWeb thisWeb = thisSite.OpenWeb();
                        SPList list = thisWeb.Lists[properties.ListId];
                        SPQuery query = new SPQuery();
                        query.Query = @"" + properties.AfterProperties["Title"] + "";
                        SPListItemCollection listItem = list.GetItems(query);
                        if (listItem.Count > 0)
                        {
                            properties.Cancel = true;
                            properties.ErrorMessage = "Item with this Name already exists. Please create a unique Name.";
                        }
                    }
                }
                catch (Exception ex)
                {
                    PortalLog.LogString("Error occured in event ItemAdding(SPItemEventProperties properties)() @ AAA.BBB.PreventDuplicateItem class. Exception Message:" + ex.Message.ToString());
                    throw new SPException("An error occured while processing the My List Feature. Please contact your Portal Administrator");
                }
            }
        }


Feature.xml

<?xml version="1.0" encoding="utf-8"?>
<Feature  Id="1c2100ca-bad5-41f5-9707-7bf4edc08383"
          Title="Prevents Duplicate Item"
          Description="Prevents duplicate Name in the "My List" List"
          Version="12.0.0.0"
          Hidden="FALSE"
          Scope="Web"
          DefaultResourceFile="core"
          xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="elements.xml"/>
  </ElementManifests>
</Feature>

<font color="red">Element.xml</font>


<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Receivers ListTemplateId="100">
    <Receiver>
      <Name>AddingEventHandler</Name>
      <Type>ItemAdding</Type>
      <SequenceNumber>10000</SequenceNumber>
      <Assembly>AAA.BBB, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8003cf0cbff32406</Assembly>
      <Class>AAA.BBB.PreventDuplicateItem</Class>
      <Data></Data>
      <Filter></Filter>
    </Receiver>
  </Receivers>
</Elements>

Error: The search request was unable to connect to the Search Service

Scenario: Recieved an error in our SharePoint site when we try to search contents

Error message: "The search request was unable to connect to the Search Service"

Resolution:

1. Go to Central Admin > Operations > Services on Server > Office SharePoint Server Search Service
Make sure the "Use this server for serving search queries" is checked.

2. Also verify that the search account is configured in both search services
Go to Central Admin > Operations > Services on Server > Office SharePoint Server Search service
Go to Central Admin > Operations > Services on Server > Windows SharePoint Services Search

3. Make sure the search account specified in "Default content access account" is used on above settings.

SharePoint Useful CodePlex Tools for SharePoint


To manage where the column are displayed (e.g.: new or edit mode). To Hide columns from newform.aspx, editform.aspx and dispform.aspx etc
http://wsslistconfigurator.codeplex.com/

To add 'Only their own' permission for the document library.
http://moresharepoint.codeplex.com/

Ad Rotator WebPart
http://spadrotator.codeplex.com/

Caml Query Builder
http://spadrotator.codeplex.com/

JQuery SPServices
http://spservices.codeplex.com

Hit Counter WebPart
http://hitcounter.codeplex.com/

Cascading drop downs
http://customfieldcontrols.codeplex.com/

To manage alerts on list or item for SharePoint groups.
http://advancedalert.codeplex.com

Useful Sharepoint Designer Custom Workflow Activities
http://spdactivities.codeplex.com/wikipage?title=Copy%20List%20Item%20Extended%20Activity&ProjectName=spdactivities

SharePoint User Change Password
http://userchangepassword.codeplex.com/>

List of users and their access
http://accesschecker.codeplex.com/

SharePoint Navigation Menu
http://spnavigationmenu.codeplex.com/>

Thursday 1 September 2011

SharePoint 2010 Color Calendar 2 steps (Nested if else Conditions 19 nested if conditions)


Add the calculated column "colorCalendar" in sharePoint calendar list, and paste the following in the formula field :

="<div style='width:100%;background-color:"&IF(Category="meeting","#4FDB51",IF(Category="work hours","#F08616",IF(Category="holiday","#F55875",IF(Category="gifts","#F558D5",IF(Category="A","#9932CC",IF(Category="B","#FFD700",IF(Category="C","#00FF00",IF(Category="D","#FAF0E6",IF(Category="E","#FF00FF",IF(Category="F","#CD853F",IF(Category="G","#BC8F8F",IF(Category="H","#008080",IF(Category="I","#FFFF00",IF(Category="J","#9ACD32",IF(Category="K","#F5F5F5",IF(Category="L","#A52A2A",IF(Category="anniversary","#DC143C",IF(Category="get-together","#E0F558",IF(Category="birthday","#6E80FA","#FF4040")))))))))))))))))))&";'> "&Title&"</div>"

The possible nested if else conditions in SharePoint 2010 is 19, all those profiles which says it is less than this are wrong. This calculated field working great at my end


Go to Calendar View and set "colorCalendar" for the month view title, week view title and day view title.

Now add a content editor web part in the calendar page and paste the following script to change color background color of calendar events :

<style>
.ms-acal-time {
	DISPLAY: none
}
.ms-acal-selected {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BACKGROUND: 0% 50%; PADDING-TOP: 0px
}
.ms-acal-item {
	PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; BACKGROUND: 0% 50%; PADDING-TOP: 0px
}
.ms-acal-sdiv SPAN {
	MARGIN-LEFT: 0px
}
.ms-acal-sdiv DIV.ms-acal-title SPAN {
	MARGIN-LEFT: 0px
}
.ms-acal-rootdiv DIV {
	PADDING-BOTTOM: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; HEIGHT: 100%; PADDING-TOP: 0px
}</style>
<script>
// Color coded calendars for SharePoint 2010
// load our function to the delayed load list
_spBodyOnLoadFunctionNames.push('colorCalendarEventLinkIntercept');
// hook into the existing SharePoint calendar load function
function colorCalendarEventLinkIntercept()
{
  var OldCalendarNotify4a = SP.UI.ApplicationPages.CalendarNotify.$4a;
  SP.UI.ApplicationPages.CalendarNotify.$4a = function () 
    {
      OldCalendarNotify4a();
      colorCalendarEventLinks();
    }
}
// hide the hyperlinks
function colorCalendarEventLinks()
{
  // find all DIVs
  var divs = document.getElementsByTagName("DIV");
  for (var i=0;i');
divs[i].title = divs[i].title.substring(0, divs[i].title.indexOf('<')) + divs[i].title.substring(divs[i].title.indexOf('>')+1, divs[i].title.lastIndexOf('<'));
    }
   // find "x more items" links and re-remove links on Expand/Contract
    if (divs[i].className.toLowerCase()=="ms-acal-ctrlitem")
    {
      var links = divs[i].getElementsByTagName("A");
      if (links.length==1)
      {
        links[0].href="javascript:colorCalendarEventLinks();void(0);"
      }
    }

  }
}</script>

Wednesday 31 August 2011

SharePoint: Hiding the Search Box

Sometimes a site or site page has only one purpose, and you don’t want the distraction of the search controls. The search controls are easy to hide and can be hidden at various levels…



To hide the search control on just one page:

Add a Content Editor Web Part (CEWP)
Edit the web part and click the Source Editor button
Paste the following:
<style>
#SRSB {display:none}
</style>

To hide the search control on all pages:

Use SharePoint Designer to edit your master page and put the above style tag just after the SharePoint style controls
<SharePoint:CssLink runat="server"/>
<SharePoint:Theme runat="server"/>
<style> #SRSB {display:none} </style>
To let the site owners hide or show by using a feature:

The search box is actually an ASP.Net Web User Control (.ASCX) that can be replaced by using a SharePoint “feature”. If you want nothing displayed you can just create a one line .Net Web User Control (using Notepad if you like):
<%@ Control Language="VB" ClassName="yourclassname" %>
Here's an article with enough info to get you started on building the feature (just leave out the Google stuff):
http://techtrainingnotes.blogspot.com/2009/07/sharepoint-custom-search-boxes-google.html

Upgrading an Existing Master Page to the SharePoint Foundation Master Page

SharePoint 2010

There have been significant changes to the user interface (UI) for Microsoft SharePoint Foundation 2010, including the addition of the Server ribbon. By default, the v4.master page includes the Server ribbon. Many of the commands previously found in menus and toolbars now exist inside of the Server ribbon. As a result, if your existing master page does not contain the Server ribbon, many commands will be unavailable. This topic shows you how to add the Server ribbon along with any new controls or content placeholders that are required for an existing master page to render correctly in SharePoint Foundation 2010.


Microsoft SharePoint Foundation 2010


There are some controls that were previously included with the default master page that have been moved into the new Server ribbon UI. Because these controls now exist inside the Server ribbon, if you plan to update an existing master page with Server ribbon functionality, you need to remove the following controls from your existing master page. These controls will be added when your incorporate the Server ribbon into your master page.

  • Publishing Console - <PublishingConsole:Console>

  • Site Actions Menu - <PublishingSiteAction:SiteActionMenu>

  • Sign-in and Log-in Control


Important note
Important

If you are using a custom sign-in control, you can move the control inside or outside of the Server ribbon, based on your layout.

Add Content Placeholders

You must ensure that the new ContentPlaceHolder controls exist in order to update your master page to be compatible with SharePoint Foundation 2010. The following table lists all of the placeholders required for update your master page to be compatible with SharePoint Foundation 2010.

Important noteImportant

The PlaceHolderTitleAreaClass placeholder is now in the head tag. Any customizations that add a WebPartZone in a content tag to this placeholder will cause an error on the page.



Placeholder Control


Description


New


<asp:ContentPlaceHolder id="PlaceHolderQuickLaunchTop" runat="server">


The top of the Quick Launch menu.


Yes


<asp:ContentPlaceHolder id="PlaceHolderQuickLaunchBottom" runat="server">


The bottom of the Quick Launch menu.


Yes


<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/>


The title of the site.


No


<asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server"/>


A placeholder in the head section of the page used to add extra components such as ECMAScript (JavaScript, JScript) and Cascading Style Sheets (CSS) to the page.


No


<asp:ContentPlaceHolder id="PlaceHolderBodyAreaClass" runat="server"/>


The class of the body area.


No


<asp:ContentPlaceHolder ID="SPNavigation" runat="server">


A control used for additional page editing controls.


No


<asp:ContentPlaceHolder id="PlaceHolderSiteName" runat="server">


The name of the site where the current page resides.


No


<asp:ContentPlaceHolder id="PlaceHolderPageTitleInTitleArea" runat="server" />


The title of the page, which appears in the title area on the page.


No


<asp:ContentPlaceHolder id="PlaceHolderPageDescription" runat="server"/>


The description of the current page.


No


<asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server">


The section of the page for the search controls.


No


<asp:ContentPlaceHolder id="PlaceHolderGlobalNavigation" runat="server">


The breadcrumb control on the page.


No


<asp:ContentPlaceHolder id="PlaceHolderTitleBreadcrumb" runat="server">


The breadcrumb text for the breadcrumb control.


No


<asp:ContentPlaceHolder id="PlaceHolderGlobalNavigationSiteMap" runat="server">


The list of subsites and sibling sites in the global navigation on the page.


No


<asp:ContentPlaceHolder id="PlaceHolderTopNavBar" runat="server">


The container used to hold the top navigation bar.


No


<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">


The navigation menu that is inside the top navigation bar.


No


<asp:ContentPlaceHolder id="PlaceHolderLeftNavBarDataSource" runat="server" />


The placement of the data source used to populate the left navigation bar.


No


<asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat="server" />


The date picker used when a calendar is visible on the page.


No


<asp:ContentPlaceHolder id="PlaceHolderLeftNavBarTop" runat="server"/>


The top section of the left navigation bar.


No


<asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server">


The Quick Launch bar.


No


<asp:ContentPlaceHolder id="PlaceHolderLeftActions" runat="server">


The additional objects above the Quick Launch bar.


No


<asp:ContentPlaceHolder id="PlaceHolderMain" runat="server">


The main content of the page.


No


<asp:ContentPlaceHolder id="PlaceHolderFormDigest" runat="server">


The container where the page form digest control is stored.


No


<asp:ContentPlaceHolder id="PlaceHolderUtilityContent" runat="server"/>


The additional content at the bottom of the page. This is outside of the form tag.


No


<asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat="server"/>


The class for the title area. This is now in the head tag. Any customizations that add a WebPartZone in a content tag to this placeholder will cause an error on the page.


No


<asp:ContentPlaceHolder id="PlaceHolderPageImage" runat="server"/>


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderTitleLeftBorder" runat="server">


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderMiniConsole" runat="server"/>


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderTitleRightMargin" runat="server"/>


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderTitleAreaSeparator" runat="server"/>


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderNavSpacer" runat="server">


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderLeftNavBarBorder" runat="server">


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderBodyLeftBorder" runat="server">


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No


<asp:ContentPlaceHolder id="PlaceHolderBodyRightMargin" runat="server">


This placeholder does not appear as part of the UI and must be present for backward compatibility.


No




The Server ribbon is a new addition to the UI for SharePoint Foundation. The SPRibbonPeripheralContent controls in the v4.master page contain content that renders inside the Server ribbon area. This content can be moved outside of the Server ribbon if desired. The following procedure shows the code for adding the Server ribbon to the page.

To add the Server Ribbon

  1. Open your master page file (.master).

  2. Copy and paste the following code inside the form tag to add the Server ribbon to the page.

    Important noteImportant

    The following code sample contains commented sections where you copy and paste controls from your custom master page or from the v4.master page. Any ContentPlaceholder controls inside the Global Navigation section need to be added to the page elsewhere if you do not add them within the Server ribbon.

    <div id="s4-ribbonrow" class="s4-pr s4-ribbonrowhidetitle">
      <div id="s4-ribboncont">
        <SharePoint:SPRibbon
         runat="server"
         PlaceholderElementId="RibbonContainer"
         CssFile="">
          <SharePoint:SPRibbonPeripheralContent
      runat="server"
      Location="TabRowLeft"
      CssClass="ms-siteactionscontainer s4-notdlg">
         <%-- Insert the Site Actions Menu Here --%>
         </SharePoint:SPRibbonPeripheralContent>
     
         <%-- Insert the Global Navigation Here --%>
         <SharePoint:SPRibbonPeripheralContent
           runat="server"
           Location="TabRowRight"
           ID="RibbonTabRowRight"
           CssClass="s4-trc-container s4-notdlg">
         <%-- Insert the Top-Right Corner Controls Here --%>
         </SharePoint:SPRibbonPeripheralContent>
     
        </SharePoint:SPRibbon>
      </div>
      <div id="notificationArea" class="s4-noti">
        <%-- Notifications will appear in this div element. --%> 
      </div>
      <asp:ContentPlaceHolder ID="SPNavigation" runat="server">
        <SharePoint:DelegateControl runat="server" ControlId="PublishingConsole">
        </SharePoint:DelegateControl>
      </asp:ContentPlaceHolder>
      <div id="WebPartAdderUpdatePanelContainer">
        <asp:UpdatePanel
         ID="WebPartAdderUpdatePanel"
         UpdateMode="Conditional"
         ChildrenAsTriggers="false"
         runat="server">
            <ContentTemplate>
              <WebPartPages:WebPartAdder ID="WebPartAdder" runat="server" />
            </ContentTemplate>
            <Triggers>
              <asp:PostBackTrigger ControlID="WebPartAdder" />
            </Triggers>
        </asp:UpdatePanel>
      </div>
    </div>
    
  3. Save your master page file.

REFERENCE

Major functional areas of a SharePoint interface



Figure Label

Functional Area

Description of Functionality

A


Server ribbon


The entire top portion of the UI is part of the ribbon. What is displayed depends on the user's current context.


B


Site Actions


The main menu for interacting with SharePoint, used primarily by content authors and administrators.


C


Global breadcrumbs control


A new implementation of the global breadcrumbs control that was first introduced in Microsoft Office SharePoint Server 2007. When clicked, the icon displays a dynamic HTML that shows a hierarchical view of the site. Use it to navigate up levels of the hierarchy from the current location in the hierarchy.


D


Page State Action button


The button used to control the page state, and that typically displays a shortcut to edit or save the current page.


E


Ribbon contextual tabs


Tabs present menus that are specific to the functions of the SharePoint site. What is displayed changes based on what the user is interacting with on the page. Some of the items will not be used on every site.


F


Welcome menu


This menu shows the welcome message and enables the user to view their profile, to sign out, and to sign in as a different user. If other language packs are installed, the functionality to change the user's language is also available here. When the user is not logged on, the Welcome menu also shows the Sign In link.


G


Developer Dashboard button


The button that opens the Developer Dashboard that typically appears at the bottom of the screen. The Developer Dashboard contains statistics about the page rendering and queries. This icon is shown when the Developer Dashboard's display level is set to OnDemand (other options include On and Off). Administrators can set the Developer Dashboard display level by using Windows PowerShell or by using the SharePoint API.


H


Title logo


Sometimes referred to as site icon. It typically shows the SharePoint site icon, but can display a user-defined logo instead.


I


Breadcrumb


This is a breadcrumb-like control that is specific to the v4.master master page. It includes the Site Title and the placeholder for Title in Title Area, which typically contains the Page Title. The Site Title is linked to the top level of the site.


J


Social buttons


Used for marking items as liked and for adding tags and notes to content.


K


Global navigation


Sometimes referred to as the Top Link Bar or Top Navigation Bar, it is the primary horizontal navigation mechanism for the site.


L


Search area


The search box is used to enter terms for performing searches on the site.


M


Help button


The help button links to the SharePoint 2010 help documents.


N


Quick Launch


Provides current navigation. Sometimes referred to as the Left Navigation. It is the secondary or vertical navigation mechanism of the pages related to the current location.


O


Tree View


Provides a Windows Explorer–style representation of the site. Because of its appearance, the tree view is often better suited for intranet sites.


P


Recycle Bin


Provides a link to the Recycle Bin for the site, which is the area where items are stored when deleted. Typically, this is better suited for intranet sites.


Q


All Site Content


A link to the All Site Content page. This was the View All Site Content link in Office SharePoint Server 2007. Typically, this is better suited for intranet sites.


R


Body area


Represents the main content placeholder that includes all of the content that is specific to the page. Required for rendering the content of the page.


REFERENCE

SharePoint 2010 Base CSS Classes

This will be the first of many SharePoint 2010 posts. I will be focusing on a few of the main CSS classes used for SharePoint 2010 Public Beta. As the product becomes more final there might be some changes to the class names but I will be sure to create a new post if that happens. This will be quite a lengthy but it should be helpful. The default CSS given below are just highlights of the full CSS attributes for that class.

I will be using a basic team site as my base for the screenshots.

image

Here is a basic structure of the main areas that I will cover.

  1. Ribbon Row
    • Table Row Left
      • Site Actions
      • Navigate Up
      • Edit
    • Tab List
      • Browse
      • Page
    • Table Row Right
      • Give Feedback
      • Welcome Menu
  2. Workspace
    • Body Container
      • Title Row
        • Title
          • Title Logo
          • Title Text / Breadcrumb
            • Page Description
          • Social Data
            • Separator
            • I like It
            • Tags/Notes
        • Top Header 2/Top Links
          • li Static-Selected
          • li Static
          • Search
          • Help
      • Status Bar Container
      • Main Area
        • Left Panel
          • Navigation Manager
            • li Static (Header)
            • ul li Static (Link)
          • Special Navigation Links List
            • Recycle Bin
            • View All Site Content
        • Content Table / Body Area
          • Web Part Cell
            • Web Part Header
              • WP Title
              • WP Header TD
              • WP Header Menu
              • WP Header Selection
            • Web Part Content

Ribbon Row:
Class/ID = “body #s4-ribbonrow”
Default CSS:
min-height:43px;
background-color:#21374c;
Comments: This is the container for all of the items in the top ribbon
image

Table Row Left:
Class/ID = “ms-cui-TabRowLeft”
Default CSS:
float:left;
margin-top:20px;
Comments: This is the container Site Actions, Navigate Up and Edit
image

Site Actions:
Class/ID = “ms-siteactionsmenuinner”
Default CSS:
border-color:#21374C;
border-top-color:#394f63;
background:url("/_layouts/images/bgximg.png") repeat-x -0px -467px;
background-color:#21374c;
Comments: Main Style for Site Actions menu
image

Navigate Up:
Class/ID = “.s4-breadcrumb-anchor,.ms-qatbutton”
Default CSS:
margin:0px 3px 0px 0px;
padding:2px 5px 0px;
Comments: There is an image “fgimg.png” that sits within an “A” hyperlink Tag. This image is large and has many icons in it. It uses inline absolute positioning to show the correct Icon.
”position: absolute; top: -112px !important;”
image

Here is what the “fgimg.png” image looks like:

FGIMG

Edit:
Class/ID = “.s4-breadcrumb-anchor,.ms-qatbutton” (Same as Above)
Default CSS:
Same As Above
Comments: Same as above except that the background image position is different. “position: absolute; top: -235px;”
image 

Browse:
Class/ID = “.ms-cui-tt-s > .ms-cui-tt-a”
Default CSS:
border-color:#b6babf;
background-color:#fff;
color:#23272c !important;
Comments: This is the selected state of the browse button. Note the “s” at the end of the class.
image

Page:
Class/ID = “.ms-cui-tt-span”
Default CSS:
padding:4px 10px 4px;
border-top:1px solid transparent;
text-align:center;
Comments: This is the non-selected state of the page button.
image

Give Feedback:
Class/ID = “No Class Or ID Specified, See below”
Default CSS:
Inline CSS and Image
Comments: If you would like to remove this icon via CSS, use the following:
.ms-cui-TabRowRight a img{
display: none;
}

image

Welcome Menu:
Class/ID = “.ms-welcomeMenu”
Default CSS:
padding:2px 5px 3px;
margin:0px 3px;
font-size:1em;
font-family:Verdana,sans-serif;
border:1px solid transparent;
Comments: The class for the arrow is “.ms-viewselector-arrow”
image 


Workspace:
Class/ID = “body #s4-workspace”
Default CSS:
overflow:visible !important;
overflow-y:scroll;
overflow-x:auto;
position:relative;
left:0px;
Comments: This is the container and scroll area for the site. 
image

Body Container:
Class/ID = “body #s4-bodyContainer”
Default CSS:
min-width:760px;
Comments: This class controls the minimum width. 

Title Row:
Class/ID = “body #s4-titlerow”
Default CSS:
display:block !important;
Comments: This is the container for the Title, Tags, Ribbon, Main navigation, Search and Help.
image

Title Row:
Class/ID = “.s4-title”
Default CSS:
padding:0px 0px 0px 10px;
margin:0px;
min-height:64px;
background:url("/_layouts/images/bgximg.png") repeat-x -0px -1013px;
background-color:#f9f9f9;
word-wrap:break-word;
-ms-word-wrap:break-word;
overflow-x:hidden;
Comments: Notice that there is a min height of 64px and a background image is applied by default.
image Title Logo:
Class/ID = “.s4-titlelogo”
Default CSS:
padding:12px 10px 12px 0px;
text-align:center;
vertical-align:middle;
Comments: The logo can be changed via the Admin UI. Default Image size is 35x35px
image

Title Text:
Class/ID = “.s4-titletext”
Default CSS:
width:100%;
Comments: The title text is also the bread crumb.
image 

Page Description:
Class/ID = “.s4-title .s4-pagedescription,.s4-title .s4uniqpermdescription”
Default CSS:
margin-top:6px;
font-size:1em;
color:#5d6878;
font-weight:normal;
Comments: This only shows up if you have specified a description of the site.
image

Social Data:
Class/ID = “ms-socialNotif-Container”
Default CSS:
width:120px;
overflow-x:auto;
overflow-y:hidden;
padding:0px 3px;
Comments: This is the container that holds both I Like It and Notes.
image 

Social Separator:
Class/ID = “.ms-socialNotif-groupSeparator”
Default CSS:
height:60px;
position:relative;
top:4px;
margin:0px 3px;
border-right:1px solid;
border-right-color:#e7e7e8;
Comments: This is the slight line on the left of the social tags.
image

I Like It:
Class/ID = “.ms-socialNotif”
Default CSS:
width:48px;
height:60px;
overflow:hidden;
margin:0px 1px;
padding:0px 2px;
border:1px solid transparent;
Comments: This class is shared with the tags and notes. The text uses the class “.ms-socialNotif-text” and the image “mossfgimg.png” with inline style of
position: absolute; top: -132px !important;

Here is what the “mossfgimg.png” image looks like:

MOSSFGIMG

Tags & Notes:
Class/ID = “.ms-socialNotif”
Default CSS: 
Same As “I Like It” above 
Comments: This class is shared with the I like It Feature. The image “mossfgimg.png” with inline style of
position: absolute; top: -300px !important;

Top Header 2:
Class/ID = “body #s4-topheader2”
Default CSS: 
background:url("/_layouts/images/selbg.png") repeat-x left top;
background-color:#f6f6f6;
vertical-align:middle;
min-height:25px;
border-top:1px solid #e0e0e0;
border-bottom:1px solid #b8babd; 
Comments: This class makes up the majority of the navigation row style.

Top Links:
Class/ID = “.s4-toplinks”
Default CSS: 
padding:0px; 
Comments: This is the container for the main navigation, search and help.
image

Top Link Selected:
Class/ID = “.s4-toplinks .s4-tn a.selected”
Default CSS: 
border-color:#91cdf2;
border-bottom-color:#addbf7;
border-top-color:#c6e5f8;
background:url("/_layouts/images/selbg.png") repeat-x left top;
background-color:#ccebff;
color:#003759;
padding:4px 5px;
margin:0px 5px; 
Comments: The hover class is “.s4-toplinks .s4-tn a.selected:hover”
image 

Top Link Static:
Class/ID = “.s4-tn li.static > .menu-item”
Default CSS: 
color:#3b4f65;
white-space:nowrap;
border:1px solid transparent;
padding:4px 10px;
height:15px; 
Comments: The hover class is “.s4-tn li.static > a:hover”
image 

Search:
Class/ID = “.s4-search table”
Default CSS: 
width: 212px;
margin-right: 17px;  
Comments: This is the container for the search box. The class resides in the Search.css file.
image 

Search Input:
Class/ID = “.s4-search input”
Default CSS: 
width: 212px;
margin-right: 17px;  
Comments: Note that this class does not change width, border color or height. You could use this to change the background color.

Search Image:
Class/ID = “.s4-search .ms-searchimage”
Default CSS: 
background-color:#fff;
border:1px solid #e3e3e3 !important;
height:16px;
padding:2px 3px 1px;
border-left:none !important;
margin-top:3px;  
Comments: This class controls the border around the go image.
image

Help:
Class/ID = “.s4-help”
Default CSS: 
margin:4px;  
Comments: This uses the “fgimg.png” with inline style of:
position: absolute; top: -293px !important;
image


Status Bar Container:
Class/ID = “.s4-statusbarcontainer”
Default CSS: 
None  
Comments: I am not 100% sure where or how this is used. I can only imagine that this is a publishing class.

Main Area:
Class/ID = “body #s4-mainarea”
Default CSS: 
float:left;
clear:both;  
Comments: This includes both left navigation and content
imageLeft Panel:
Class/ID = “body #s4-leftpanel”
Default CSS: 
width:155px;
float:left;  
Comments: This is the left navigation
image 

Left Panel Headers:
Class/ID = “.s4-ql ul.root > li > .menu-item,.s4-qlheader,.s4-qlheader:visited”
Default CSS: 
font-size:1.2em;
color:#0072bc;
margin:0px;
padding:3px 4px 3px 10px;
word-wrap:break-word;
overflow-x:hidden;  
Comments: This class controls the look of the header text
image

Left Panel Links:
Class/ID = “.s4-ql ul.root ul > li > a”
Default CSS: 
padding:3px 4px 4px 10px;
color:#3b4f65;
word-wrap:break-word;
overflow-x:hidden;
zoom:1;  
Comments: This class controls the look of the link text
image 

Special Navigation Links List:
Class/ID = “.s4-specialNavLinkList”
Default CSS: 
margin:0px;
border-top:1px solid #dbddde;
padding-top:5px; 
Comments: This class makes the line above the recycle bin
image 

Recycle Bin:
Class/ID = “.s4-specialNavLinkList a”
Default CSS: 
padding:3px 4px 3px 10px;
color:#3b4f65; 
Comments: This is a shared class with view all site content
image

View All Site Content:
Class/ID = “.s4-specialNavLinkList a”
Default CSS: 
Same As Above
Comments: This is a shared class with Recycle Bin
image 

Content Table Body Area:
Class/ID = “.s4-ca”
Default CSS: 
margin-left:155px;
margin-right:0px;
min-height:324px;
Comments: This is main class for the body content. Notice the 155px margin to the left. This basically moves the content over so that it does not overlap the left navigation.
image

Web Part Cell:
Class/ID = “.s4-wpcell”
Default CSS: 
border:1px solid transparent;
Comments: This would be a good class to define a pixel line around web parts.
image
Web Part Header:
Class/ID = “.ms-WPHeader”
Default CSS: 
background-color:#FFFFFF;
Comments: This controls the background color of the wp header.

Web Part Header TD:
Class/ID = “.ms-WPHeader td”
Default CSS: 
border-bottom:1px solid #EBEBEB;
Comments: This controls the border color of the wp header.

Web Part Header Menu:
Class/ID = “.ms-WPHeaderTdMenu”
Default CSS: 
width:21px;
border:1px solid transparent;
Comments: This class is for the web part menu spacing.
image 

Web Part Header Selection:
Class/ID = “.ms-WPHeaderTdSelection”
Default CSS: 
width:21px;
Comments: This class is for the web part selector spacing.
image 

Web Part Content:
Class/ID = “.ms-wpContentDivSpace”
Default CSS: 
margin-left:5px;
margin-right:5px;
Comments: This class adds marginal space left and right for the web part content.

There are many many many more classes that I could cover but these are some of the main ones to get you going. I will cover more in future posts.

Please leave a comment!

Tuesday 30 August 2011

Programmatically Submitting Files to the SharePoint Content Organizer

The content organizer in SharePoint 2010 is an interesting feature, particularly from an application development perspective as it gives you a fairly competent rules builder (why does it post back when you select a content type? Like seriously, Microsoft?) and routing engine, for free. We built something similar in FirstPoint for SharePoint 2007, but it was quite a bit of work. You can do all sorts of interesting things with this such as moving documents around based on metadata changes or externalizing the rules that determine where server generated documents should be routed to.

The content organizer can be accessed from the Official Files web service but it can also be accessed directly when building server applications such as event receivers or custom web services. One common scenario, for example, is using an event receiver for moving a document to a different folder or library if a user changes a metadata field. If I have a list of contacts organized into folders by last name (A-C, B-E, etc.), I'd want the system to automatically move a contact into the correct folder if a contact changes his or her last name. Without the content organizer and externalized rules, you'd either have to hard code the routing rules or design and code a system to externalize the routing rules, both sub-optimal solutions compared to the content organizer.

Behind the scenes, content organizer users a class called OfficialFileCore, you'll need to add a reference to Microsoft.Office.Policy.dll (found in the ISAPI directory) to your project. The following is some code that should give you an idea of how to call the OfficialFileCore.SubmitFile() method:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.Office.RecordsManagement.RecordsRepository;
using System.Collections;

// Namespace and class omitted for formatting purposes...

static void Main(string[] args)
{
Microsoft.SharePoint.OfficialFileResult result = Microsoft.SharePoint.OfficialFileResult.UnknownError;
string destination = null; // New location of the file is assigned to this string.

using (SPSite site = new SPSite("http://moss.dev.com/"))
using (SPWeb web = site.OpenWeb())
using (new SPMonitoredScope("Official File Receiver", uint.MaxValue, new ISPScopedPerformanceMonitor[] { new SPSqlQueryCounter(100) }))
{
SPFile file = web.GetFile("http://moss.dev.com/dropofflibrary/test1.docx");
byte[] bytes = file.OpenBinary();
string fileType = file.Item.ContentType.Name;
SPFieldCollection fields = file.Item.Fields;

List properties
= new List();

// Create a RecordsRepositoryProperty for each metadata field.
foreach (SPField field in fields)
{
try
{
string value = Convert.ToString(
field.GetFieldValue(Convert.ToString(file.Item[field.Title])));

Console.Out.WriteLine("Name:{0}, Type:{1}, Value:{2}",
field.Title, field.TypeAsString, value);

Microsoft.SharePoint.RecordsRepositoryProperty property =
new Microsoft.SharePoint.RecordsRepositoryProperty
{
Name = field.Title,
Type = field.TypeAsString,
Value = value
};

properties.Add(property);
}
catch (Exception exception)
{
// Some fields fail; not sure if they're consequential yet!
Console.Out.WriteLine(" - Failed to process field {0}", field.Title);
}
}

result = OfficialFileCore.SubmitFile(web, bytes, properties.ToArray(), fileType,
"http://moss.dev.com/dropofflibrary/test1.docx", "Charles", false, out destination);

// Seems that you have to manually delete the file.
file.Item.Delete();
}

Console.Out.WriteLine("1 > {0}", result);
Console.Out.WriteLine("2 > {0}", destination);
}

In this case, the source library is the drop off library. Note that if you programmatically add a file to the library, it doesn't actually get routed according to the content organizer rules; you'll still have to submit it manually in the UI or use the code outlined above to actually trigger the routing.

One final note: as far as I can tell, it seems that you have to manually delete the file from the source library once you successfully route the file.

Popular Posts