Let's say you have one Document Library in SharePoint and in this
library you have created custom Content Type called "DocCase", which
is derived from Content Type "Folder" and it has its own custom
metadata columns. "DocCase" is a container for documents, i.e. every
document that is uploaded to this library is uploaded to one
"DocCase". It is actually a Folder for my documents, but with my
custom columns (metadata).
But, Content Type "DocCase" and documents that are uploaded to
that "DocCase" have different metadata. I would like to set two
different views (to show different metadata) for each of these Content Types.
NOTE: I am using "Doc Case" Content Type just as an example.
This process of creating two default views can be applied to ordinary "Folder"
Content Type, or any other Content Type that inherits "Folder"
Content Type.
I created a simple Console Application in Microsoft Visual Studio 2012, added
Microsoft.SharePoint.dll to its References and pasted following code in Main function:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.SharePoint;
using System.Collections.Specialized;
namespace SharePointConsoleApplication3 {
class Program {
static void Main(string[] args) {
using (SPSite site = new SPSite("http://dev/sites/test")) {
using (SPWeb web = site.OpenWeb()) {
SPList newList =
web.Lists["Documents"];
// create view for top-level folder
StringCollection
viewFields = new StringCollection();
viewFields.Add("LinkFilename");
viewFields.Add("Client Address");
viewFields.Add("Client ID");
SPView newView =
newList.Views.Add("DocCase view", viewFields, "", 100, true, true);
newView.ContentTypeId = new SPContentTypeId("0x012001");//root of list
newView.Update();
// create view for documents
StringCollection
viewFields2 = new StringCollection();
viewFields2.Add("LinkFilename");
viewFields2.Add("Author");
viewFields2.Add("Created");
viewFields2.Add("Editor");
viewFields2.Add("Modified");
SPView newView2 = newList.Views.Add("Docs",
viewFields2, "", 100, true, false);
//here you paste ID of your Content Type
newView2.ContentTypeId = new SPContentTypeId("0x01200077A411909BB3FD4D8496482CB376DA3A");
newView2.DefaultViewForContentType = true;
newView2.Update();
}
}
}
}
}
Now,
when you go to your list (Documents in my case), default view "DocCase
view" opens and shows our "DocCases" with their columns (Client Address,
Client ID...).
But,
when you click on one of the "DocCases" ("My New Doc Case"), it
switches to the second view - "Docs" - and you can see that different
columns appear (Created By, Created, Modified, Modified By...).
In my next (here) post, I will show how to do the exact same thing programmatically using List Definition.
Nice article.
ReplyDeleteGaurav Goyal