Thursday, June 19, 2008

Get a SharePoint list (SPList) Root Folder Name and Display Name (Title)

style="FONT-SIZE: 16px; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #333; PADDING-TOP: 10px">Summary


style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 5px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">href="#Introduction">1. Introduction
2. Samples

1.1. Getting List names
programmatically in c#

href="#Retrieving-a-list-by-its-names-programmatically-in-C#">1.2. Retrieving a
list by its names programmatically in C#

href="#document-Library">1 - Document Library
href="#Standard-Lists-">2 - Standard Lists
3.
Warnings

1. Special characters
href="#File-Not-Found-exception">2. File Not Found exception


style="FONT-SIZE: 16px; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #333; PADDING-TOP: 10px">name=Introduction>1.Introduction


style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 5px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">Reading
MSDN for href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.aspx">SPList
Class
, it seems it's not very obvious to:
get the name of a SharePoint
list.
look for a list in a SharePoint web site using its name.
Here is
the only excerpt of the href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splist.aspx">SPList
Class Library Reference
in MSDN speaking of the list name:
 

[...]
Use an indexer to return a single list from the collection. For
example, if the collection is assigned to a variable named collLists, use
collLists[index] in C#, or collLists(index) in Visual Basic 2005, where index is
the index number of the list in the collection, the display name of the list, or
the GUID of the list.
[...]


style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 5px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">For
instance SPList class has no Name property or GetName method.
Furthermore, a
SharePoint list will have TWO names if you had renamed it!
The Root Folder
Name (like the Internal Name for a SPList Field ) is the one you have set when
you have created the list.
This name will be always present in your browser
Address Bar when you display the list
The display name (the one you have
used if you have renamed the list).
This name will appear as your list Title,
when you display the list and the as a link to the list in your QuickLaunch menu
if you have added to. (If you have not renamed your List, the root folder name
and the display name are the same).


style="PADDING-RIGHT: 0px; PADDING-LEFT: 13px; FONT-WEIGHT: bold; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">name=Samples>2.Samples


style="PADDING-LEFT: 26px; FONT-WEIGHT: normal; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">name=Getting-List-names-programmatically-in-c#>1.1 Getting List names
programmatically in c#


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">So,
how to get a SharePoint list Root Folder Name and Display Name (Title) in C#
programming.
The following code sample will display these two names for all
lists of a SharePoint web site:


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">color=#000000>                           
SPWeb
myWeb =
SPContextcolor=#000000>.Current.Web;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                           
Debug.WriteLine(
"MyWeb lists :
"
);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">color=#000000>                           
foreach
(
SPList aList
in
myWeb.Lists)


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                           
{


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                               
Debug.WriteLine(
style="COLOR: #a31515">"************************************"color=#000000>);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                               
Debug.WriteLine(
"list Title (Display
Name): "
+ aList);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                               
Debug.WriteLine(
"list Title (Display
Name): "
+ aList.Title);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                               
Debug.WriteLine(
"list Root Folder
Name: "
+
aList.RootFolder.Name);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">color=#000000>                               
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">color=#000000>Debug.WriteLine(style="COLOR: #a31515">"************************************"color=#000000>);


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">color=#000000>style="mso-spacerun: yes">                           
}


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">

style="PADDING-LEFT: 26px; FONT-WEIGHT: normal; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">name=Retrieving-a-list-by-its-names-programmatically-in-C#>2.2 Retrieving a
list by its names programmatically in C#


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">And
now, how to retrieve a SharePoint list using Root Folder Name or Display Name:

Notice that:
Document Libraries URL finishes by
"/Website/DocLibRootFolderName"
Other Lists URL finishes by
"/Website/Lists/OtherListsRootFolderName"


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">1 -
Document Library


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">Assume
we need to instantiate a SPList object corresponding to a Document Library with,

Root Folder Name: mycustomdoclib1
Display Name: Invoices
the
following code sample will illustrate that:



    style="padding-LEFT: 50px;padding-LEFT: 50px;MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial">
  • style="MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial; TEXT-ALIGN: justify">Root
    Folder Name:

style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                     
style="mso-spacerun: yes">      style="COLOR: #2b91af">SPWeb myWeb = style="COLOR: #2b91af">SPContext.Current.Web;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
//SPList myList =
myWeb.GetList("sites/my-collaboration-portal/docs/mycustomdoclib1");


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList myList = myWeb.GetList(style="COLOR: #2b91af">SPUrlUtility.CombineUrl(myWeb.ServerRelativeUrl,
"mycustomdoclib1"));


    style="padding-LEFT: 50px;MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial">
  • style="MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial; TEXT-ALIGN: justify">Display
    Name:

style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList myList = myWeb.Lists[style="COLOR: #a31515">"Invoices"];


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">2 -
Standard Lists


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">Assume 
we need to instantiate a SPList object corresponding to a list that is not a
document library with,
Root Folder Name: mycustomlist1
Display Name:
Clients
the following code sample will illustrate that:


    style="padding-LEFT: 50px;MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial">
  • style="MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial; TEXT-ALIGN: justify">Root
    Folder Name:

style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPWeb myWeb = style="COLOR: #2b91af">SPContext.Current.Web;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
//SPList myList =
myWeb.GetList("sites/my-collaboration-portal/docs/Lists/ mycustomlist1 ");


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList myList = myWeb.GetList(style="COLOR: #2b91af">SPUrlUtility.CombineUrl(myWeb.ServerRelativeUrl,
"/Lists/ mycustomlist1
"
)); 

 


    style="padding-LEFT: 50px;MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial">
  • style="MARGIN-TOP: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; MARGIN-BOTTOM: 5px; COLOR: gray; FONT-FAMILY: arial; TEXT-ALIGN: justify">Display
    Name:

style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList myList = myWeb.Lists[style="COLOR: #a31515">"Clients"];


style="FONT-SIZE: 16px; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #333; PADDING-TOP: 10px">3.
Warnings:


style="PADDING-RIGHT: 0px; PADDING-LEFT: 13px; FONT-WEIGHT: bold; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">3.1
Special characters


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">When
you set your list display name, you will generally do it using the Web Site user
language. If this language is not English, you will sometimes have to use
special characters like:
É, è , ù, ê, Ø, ñ, ô, …

SharePoint generally
use Unicode escape sequence for these characters. Assume your list display name
in French is:
"ma première doclib",

you will have to use that string
to retrieve it:


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">style="mso-spacerun: yes">color=#000000>                           
SPList
myList = myWeb.Lists[
"ma premi\u00e8re
doclib"
];


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">
If
you are looking for any Unicode escape sequence, you can download a mapping
table here.


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">If
you have too many fields with special characters to manipulate, think to use
Visual Studio Advanced Save Options and save your .aspx Page file in "UTF-8 with
signature" or "Unicode" format, doing that will allow you to write your fields
name using your language special characters. You can also modify your Web
Application web.config to obtain the same result.


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">About
this topic you can read this post:

href="http://www.aspnetresources.com/blog/unicode_in_vsnet.aspx">Unicode in
Visual Studio .Net


style="PADDING-LEFT: 26px; FONT-WEIGHT: normal; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">Tricks:


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">To avoid using special characters in your requests:
Use an English name
for the list when you create it, and rename your list using Web Site user
language.
Use the list Internal Name with SPWeb.GetList method to retrieve a
list using server code (VB .net, C#...).


style="PADDING-RIGHT: 0px; PADDING-LEFT: 13px; FONT-WEIGHT: bold; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">3.2
File Not Found exception


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">There
is a lack in SharePoint when you are trying to find objects, because the methods
you are using for that will throw an exception if the object does not exist
instead of returning null. That forces you to manage certain parts of your code
by handling exception that is not a good coding practice.


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList
listVariable;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
try


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
{


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                               
listVariable = myWeb.Lists[style="COLOR: #a31515">"ListIWant"];


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">}


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">style="mso-spacerun: yes">                           
catch (style="COLOR: #2b91af">Exception e) { }



style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">There
is at least two ways of avoiding exception handling when trying to retrieve a
list:


style="PADDING-LEFT: 26px; FONT-WEIGHT: normal; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">1
- Loop-through-the-lists


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
SPList
listVariable;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
foreach (style="COLOR: #2b91af">SPList tempList style="COLOR: blue">in myWeb.Lists)


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                           
{


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                               
if (tempList.Title == style="COLOR: #a31515">"ListIWant")


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                               
{


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                                   
listVariable = tempList;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">style="mso-spacerun: yes">                                   
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">breakstyle="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">;


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">style="mso-spacerun: yes">                               
}


style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"
align=left>style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes">style="mso-spacerun: yes">                           
}
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes">




style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">It
is not so fool as it seems to be since someone found that loop was always faster
than the previously described methods.


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">href="http://www.novolocus.com/2009/01/29/fast-access-items-in-an-splistcollection/">Fast
access items in an SPListCollection


style="PADDING-LEFT: 26px; FONT-WEIGHT: normal; PADDING-BOTTOM: 10px; MARGIN: 1px 0px; COLOR: #e9ab17; PADDING-TOP: 10px">2
- Use-LINQ


style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">There
is a LINQ request posted by Adam Buenz that allows you to look for a list
without throwing an exception if it does not exists.

By the way the Linq request actually is doing a loop.



style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none">style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">style="mso-spacerun: yes">       
public style="COLOR: blue">static bool
InspectForList(string
listName)


style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none">style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">style="mso-spacerun: yes">       
{


style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none">style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">style="mso-spacerun: yes">           
var results = style="COLOR: #2b91af">SPContext.Current.Web.Lists.Cast<style="COLOR: #2b91af">SPList>().Where(item => Equals(style="COLOR: blue">string.Compare(item.Title, listName, style="COLOR: blue">true), 0));


style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none">style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: EN-US; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">style="mso-spacerun: yes">           
style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">returnstyle="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">
results.Count() > 0;


style="MARGIN: 0cm 0cm 0pt; mso-layout-grid-align: none">style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US">style="mso-spacerun: yes">        }




style="PADDING-RIGHT: 5px; PADDING-LEFT: 31px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">href="http://www.sharepointsecurity.com/blog/general/what-are-the-biggest-sharepoint-api-mistakes/">What
Are The Biggest SharePoint API Mistakes?


style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 5px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">

style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify">For
ending, a last advice,
You should always use the root folder name of a list
to look for it, since this name will never change.


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify"> 


style="PADDING-RIGHT: 5px; PADDING-LEFT: 18px; FONT-WEIGHT: normal; FONT-SIZE: 10pt; PADDING-BOTTOM: 18px; MARGIN: 1px 0px; COLOR: gray; PADDING-TOP: 5px; FONT-FAMILY: arial; TEXT-ALIGN: justify"> 


 


Thursday, June 12, 2008

Improve readibility of CAML in SPQuery using C# and Visual Studio

Introduction

If you want to break down line in C# while writing CAML to define an SPQuery query,
you maybe try to look for C# continuation line character, the equivalent of _ in VB .net.
Referring to C# Language Specification, C# doesn't need one. A line continues until a ; is reached.


However, If you try to break line in a string in Visual Studio you will have a "new line in constant " exception.


The solution is to use @ character before your string.

Code sample


SPSite mySite = new SPSite("http://frev1149:8080/");
SPQuery myQuery = new SPQuery();
myQuery.Query= @"
<Where>
<Eq>
<FieldRef Name='StateMonthReport'/>
<Value Type='Text'>Refusee</Value>
</Eq>
</Where>
";
SPList myList = mySite.OpenWeb().Lists["Transmises"];
SPListItemCollection myItems = myList.GetItems(myQuery);


Sunday, June 8, 2008

Create multiple Ajax-enabled Web Sites in Windows Sharepoint Services and MOSS 2007

Introduction



The goal of this post is to point out the key that will allow you to use Ajax for multiple sites in Windows SharePoint Services or MOSS 2007.
Our team met the problem. We had several SharePoint Web Sites that had to exchange informations with an Ajax Web Service, and we couldn't use the SPContext object in the web service code because it was always instantiated the site collection top level site SPContext object.


We used a temporary solution passing the SharePoint Web Site GUID as a parameter to the Web Method.


Thanks to Daniel Larson that answered to a comment I posted on his blog, we found the solution. You may find it in a more complete version in the chapter 5 of his book written with Ted Pattison:




Inside Microsoft Windows SharePoint Services 3.0






Tutorial





To make a clear demonstration I will customize the WsAjaxEnabledWSSApplication I created in a previous post:




Integrate ASP.NET Web Service based AJAX with MOSS 2007 or Windows SharePoint Services 3.0




1 - Adding a new aspx page that will display the Title of the web site.




I add to the solution a new aspx page that will display the Title of the web site that is invoking the Ajax Web Service. This Title must be returned by the Ajax Web Service.









2 - Adding a new Web Method that will return the Title of the web site.




I add to the web service a new Web Method in order to get the Title of the Web Site that is invoking Web Service:




[WebMethod]
public string GetSPWebTitle()
{
return (SPContext.Current.Web.Title);
}







3 - The AjaxRetrieveSPWebTitle.aspx page inline code




And now, the most interesting, the .aspx page inline code :




<%@ Assembly Name="Microsoft.SharePoint.ApplicationPages, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" MasterPageFile="~/_layouts/application.master" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="System.Globalization" %>

<asp:Content ContentPlaceHolderID="PlaceHolderMain" runat="server">

<script runat="server">

private const string WebInitScriptKey = @"WSAjaxEnebledWSSApplication.AjaxRetrieveSPWebGUID.aspx";
private const string WebInitScriptFormat = @"window.spWebUrl = '{0}';";

public void Page_Load(object sender, EventArgs e)
{
string webInitScript = string.Format(CultureInfo.InvariantCulture, WebInitScriptFormat, SPContext.Current.Web.Url);
this.Page.ClientScript.RegisterClientScriptBlock(typeof(System.Web.UI.Page), WebInitScriptKey, webInitScript, true);
}
</script>

<script type="text/javascript">
function getMyWebTitle(){
WsAjaxEnabledWSSApplication.HelloWorldService.set_path(window.spWebUrl + "/_vti_bin/AjaxWebService/HelloWorldService.asmx");
WsAjaxEnabledWSSApplication.HelloWorldService.GetSPWebTitle(OnComplete, OnTimeOut, OnError);
}

function OnComplete(args){
document.getElementById("divWebServiceReturn").innerText=args;
}

function OnTimeOut(args){
alert("Time Out");
}

function OnError(args){
alert("Error");
}
</script>

<asp:ScriptManager ID="ScriptManager1" runat="server">
<services>
<asp:ServiceReference InlineScript="true" Path="~/_vti_bin/AjaxWebService/HelloWorldService.asmx" />
</services>
</asp:ScriptManager>
<br />
<br />
<input type="button" value="Get myWeb Title" onclick="JavaScript:getMyWebTitle();" />
<br />
<br />
<span>Ajax Web Service returned that web site Title: </span>
<div style="display: inline; color: Black" id="divWebServiceReturn">
</div>
</asp:Content>





4 - Summary.




So the Key point is :


to set the path correctly before calling the service




WsAjaxEnabledWSSApplication.HelloWorldService.set_path(window.spWebUrl + "/_vti_bin/AjaxWebService/HelloWorldService.asmx");




And to set the path, I used the JavaScript property as used by Daniel Larson and Ted Pattison in SharePoint AJAX Toolkit:


window.spWebUrl






5 - Testing




I am now creating a new subsite, mySubsite1.


As my .aspx page is an application page, for any site in my Site Collection that will be using that page, I will get its Title :