Wednesday, November 7, 2012

Sync Taxonomy hiddenlist(termstore values)

If you are using taxonomy fields in spSite then you will get a prolem while updating the taxonomy value from centeral admin then updated taxonomy value  won't sync with new value in list items, Even after run Taxonomy Scheduler job. For this we have write the sptimerjob with the following code(Or write a webpart),it should be run under administrative previlages, any wat timer job will run under administrator.
 Namespace required:
Using Microsoft.SharePoint;
Using Microsoft.SharePoint.Taxonomy;

            // Resync the taxonomy hidden list to make sure it is update-to-date
            TaxonomySession.SyncHiddenList(site);


Example webpart souce code:
protected void Button1_Click(object sender, EventArgs e)
{
bool status;
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb rootWeb = site.RootWeb)
{
status = rootWeb.AllowUnsafeUpdates;

rootWeb.AllowUnsafeUpdates =
true;
try
{
SPUser theUser = SPContext.Current.Web.CurrentUser;

if (theUser.IsSiteAdmin)

{
// sync the taxonomy hidden list to make sure it is update-to-date
TaxonomySession.SyncHiddenList(site);

Controls.Add(new LiteralControl("Success"));

}
else
{

Controls.Add(
new LiteralControl("Current loged in user donot have permissions."));

}
}
catch (Exception ex)
{
Controls.Add(
new LiteralControl("Failure: " + ex.ToString()));

}
finally
{
rootWeb.AllowUnsafeUpdates = status;
}

}

}

}


Thanks & Regards,
MTR
SharePoint Deeloper.


 

Thursday, August 23, 2012

Get Site and SubSites Size

.cs

#region Variable/properties declarations

public DataTable table

{

get { return (DataTable)ViewState["Table"]; }

set

{

ViewState[
"Table"] = value;

}

}

public DataTable table1

{

get { return (DataTable)ViewState["Table1"]; }

set

{

ViewState[
"Table1"] = value;

}

}

public DataTable ListReporttable

{

get { return (DataTable)ViewState["ListReporttable"]; }

set

{

ViewState[
"ListReporttable"] = value;

}

}

public DataTable listTable

{

get { return (DataTable)ViewState["ListTable"]; }

set { ViewState["ListTable"] = value; }

}

public DataTable documentsListTable

{

get { return (DataTable)ViewState["DocumentsListTable"]; }

set { ViewState["DocumentsListTable"] = value; }

}

TreeNode root;

Double listSize = 0d;

Double docmentLibrarySize = 0d;

List<Guid> webSiteIds;

Hashtable subSitesSize;

#endregion Variable/properties declarations

#region Events

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

SPSite site = SPContext.Current.Site;

SPWebApplication webApp = SPWebApplication.Lookup(new Uri(site.Url));

foreach (SPSite siteCol in webApp.Sites)

{

String title = siteCol.ToString();

root = new TreeNode(); // Creating new root node

root.Text = title;

root.Value =
Convert.ToString(siteCol.Url);

root.ShowCheckBox = true; //Allowing checkbox to b visible in the node

TreeView1.Nodes.Add(root);

siteCol.Dispose();

}

foreach (TreeNode node in TreeView1.Nodes)

populatechilds(node);

}

}

protected void Select_Change(Object sender, EventArgs e)

{

subSitesSize =
new Hashtable();

webSiteIds = new List<Guid>();

ListReporttable = CreateListReportTable();

documentsListTable = CreateListReportTable();

listTable =
null;

double totalData = 0;

String title = TreeView1.SelectedNode.Text;

String id = TreeView1.SelectedNode.Value;

SPSite site = new SPSite(id);

SPWeb oWeb = site.OpenWeb();

String title1 = site.OpenWeb().Title;

string webId = string.Empty;

table = CreateTable();

webId =
Convert.ToString(oWeb.ID);

table1 = null;

#region GetWebSite Size using SP

string withUnitMeasure;

double webSizeInBytes = GetWebSizeWithUnitMeasure(oWeb, out withUnitMeasure);

#endregion

DataRow row1;

if (table1 != null)

row1 = table1.NewRow();

DataRow row = table.NewRow();

row["Web Name"] = oWeb.Title;

row["Used Data"] = Convert.ToString(webSizeInBytes + " MB ");

row["WebSize"] = webSizeInBytes.ToString("0.##") + "L";

table.Rows.Add(row);

totalData += webSizeInBytes;

oWeb.Dispose();

lblSiteCollectionData.Text =
"Total Data used by " + title + " Site collection is: " + Convert.ToString(totalData) + " MB ";

listTotalSize.Text = Convert.ToString(listSize);//Convert.ToString(ListReporttable.Compute("Sum(Size)", ""));

lstDocSize.Text = Convert.ToString(docmentLibrarySize);



gvDocumentsList.DataSource = documentsListTable;

gvDocumentsList.DataBind();

spGridWebSiteUsedData.DataSource = table;

spGridWebSiteUsedData.DataBind();

gvListReport.DataSource = ListReporttable;

gvListReport.DataBind();

}

#endregion Events

#region GetWebsiteSize

public double DefineSizeWithUnitMeasure(double sizeInBytes, out string unitMeasure)

{

unitMeasure =
"Bytes";

double size = sizeInBytes;

if (size > 1024)

{

size = sizeInBytes / 1024d;
//KB

unitMeasure = "KB";

}

if (size > 1024)

{

size = size / 1024d;
//MB

unitMeasure = "MB";

}

if (size > 1024)

{

size = size / 1024d;
//GB

unitMeasure = "GB";

}

if (size > 1024)

{

size = size / 1024d;
//TB

unitMeasure = "TB";

}

return size;

}

public double GetWebSizeWithUnitMeasure(SPWeb web, out string withUnitMeasure)

{

double storageUsage = 0d;

double listData = 0d;

foreach (SPList list in web.Lists)

{

listData = (
double)GetListSizeInBytes(list) / (1024 * 1024);

storageUsage += listData;

if (list.BaseType != SPBaseType.DocumentLibrary)

{

listSize += listData;

DataRow row = ListReporttable.NewRow();

row["ListNameName"] = list.Title;

row["Size"] = listData;

row["ListType"] = list.BaseType.ToString();

row["ItemsCount"] = Convert.ToString(list.ItemCount);

row["WebUrl"] = list.ParentWebUrl;

ListReporttable.Rows.Add(row);

}

else

{

docmentLibrarySize += listData;

DataRow row = documentsListTable.NewRow();

row["ListNameName"] = list.Title;

row["Size"] = listData;

row["ListType"] = list.BaseType.ToString();

row["ItemsCount"] = Convert.ToString(list.ItemCount);

row["WebUrl"] = list.ParentWebUrl;

documentsListTable.Rows.Add(row);

}

}

subSitesSize.Add(web.ID+
"/"+web.Title, storageUsage);

string unitMeasure = "";

double webSize = DefineSizeWithUnitMeasure(storageUsage * 1024.0 * 1024.0, out unitMeasure);

withUnitMeasure = string.Format("{0} {1}", webSize.ToString("f"), unitMeasure);

foreach (SPWeb subweb in web.Webs)

{

String t;

storageUsage += GetWebSizeWithUnitMeasure(subweb, out t);

}



return storageUsage;

}

public double GetListSizeWithUnit(SPList list, out string withUnitMeasure)

{

double listSizeinBytes = (double)GetListSizeInBytes(list);

string unitMeasure = "";

double listSize = DefineSizeWithUnitMeasure(listSizeinBytes, out unitMeasure);

withUnitMeasure = string.Format("{0} {1}", listSize.ToString("f"), unitMeasure);

return listSizeinBytes;

}

public long GetListSizeInBytes(SPList list)

{

long listSize = 0;

string filter = string.Format("tp_id='{0}'", list.ID);

DataTable myDataTable = GetCachedSiteCollectionListSizes(list.ParentWeb.Site);



//if (table1 == null)

// table1 = myDataTable;

#region GetListTable

DataTable newTable = new DataView(myDataTable, "tp_WebID = '" + list.ParentWeb.ID + "'", "", DataViewRowState.CurrentRows).ToTable();

if (!webSiteIds.Contains(list.ParentWeb.ID))

{

webSiteIds.Add(list.ParentWeb.ID);

if (listTable != null)

listTable.Merge(newTable);

else

listTable = newTable;

}

#endregion

DataRow[] dataRows = myDataTable.Select(filter);

if (dataRows.Length > 0)

{

listSize = (
long)dataRows[0]["TotalSize"];

}

return listSize;

}

public DataTable m_SiteCollectionListSizes;

public Guid m_SiteCollectionListSizesSiteID;

private DataTable GetCachedSiteCollectionListSizes(SPSite site)

{

if (m_SiteCollectionListSizes == null || m_SiteCollectionListSizesSiteID != site.ID)

{

m_SiteCollectionListSizes = GetSiteCollectionListSizes(site);

m_SiteCollectionListSizesSiteID = site.ID;

}

return m_SiteCollectionListSizes;

}

private DataTable GetSiteCollectionListSizes(SPSite site)

{

DataTable dataTable = GetDocLibSizes(site);

//Combine both list and doc lib size results

dataTable.Merge(GetListSizes(site));

return dataTable;

}

private DataTable GetDocLibSizes(SPSite site)

{

string connectionString = site.WebApplication.ContentDatabases[site.ContentDatabase.Id].DatabaseConnectionString;

string storedProcName = "proc_GetDocLibrarySizes";

System.Data.SqlClient.SqlConnection connection = null;

System.Data.SqlClient.SqlDataReader reader = null;

DataTable dataTable = null;

try

{

connection =
new System.Data.SqlClient.SqlConnection(connectionString);

connection.Open();

System.Data.SqlClient.
SqlCommand command = new System.Data.SqlClient.SqlCommand(storedProcName, connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@SiteId", site.ID.ToString()));

reader = command.ExecuteReader();

dataTable =
new DataTable();

dataTable.Load(reader);

}

finally

{

if (reader != null)

reader.Close();

if (connection != null)

connection.Close();

}

return dataTable;

}

private DataTable GetListSizes(SPSite site)

{

string connectionString = site.WebApplication.ContentDatabases[site.ContentDatabase.Id].DatabaseConnectionString;

string storedProcName = "proc_GetListSizes";

System.Data.SqlClient.SqlConnection connection = null;

System.Data.SqlClient.SqlDataReader reader = null;

DataTable dataTable = null;

try

{

connection =
new System.Data.SqlClient.SqlConnection(connectionString);

connection.Open();

System.Data.SqlClient.
SqlCommand command = new System.Data.SqlClient.SqlCommand(storedProcName, connection);

command.CommandType = CommandType.StoredProcedure;

command.Parameters.Add(new System.Data.SqlClient.SqlParameter("@SiteId", site.ID.ToString()));

reader = command.ExecuteReader();

dataTable =
new DataTable();

dataTable.Load(reader);

}

finally

{

if (reader != null)

reader.Close();

if (connection != null)

connection.Close();

}

return dataTable;

}

#endregion

#region
Create Treeview nodes

public void populatechilds(TreeNode node)

{

string id = node.Value;

using (SPSite oSite = new SPSite(id))

{

populateSite(node, oSite.RootWeb);

oSite.Dispose();

}

}

public void populateSite(TreeNode node, SPWeb rootWeb)

{

foreach (SPWeb oWeb in rootWeb.Webs)

{

TreeNode child = new TreeNode();

child.Text = oWeb.Title;

child.Value =
Convert.ToString(oWeb.Url);

child.ShowCheckBox = true;

node.ChildNodes.Add(child);

populateSite(child, oWeb);

oWeb.Close();

}

}

#endregion Create Treeview nodes

#region Create Table structure

private DataTable CreateListReportTable()

{

DataTable newTable = new DataTable();

DataColumn col1 = new DataColumn("ListNameName", typeof(String));

DataColumn col2 = new DataColumn("Size", typeof(Double));

DataColumn col3 = new DataColumn("ItemsCount", typeof(String));

DataColumn col4 = new DataColumn("ListType", typeof(String));

DataColumn col5 = new DataColumn("WebUrl", typeof(String));

newTable.Columns.Add(col1);

newTable.Columns.Add(col2);

newTable.Columns.Add(col3);

newTable.Columns.Add(col4);

newTable.Columns.Add(col5);

return newTable;

}

private DataTable CreateTable()

{

DataTable newTable = new DataTable();

DataColumn col1 = new DataColumn("Web Name", typeof(String));

DataColumn col2 = new DataColumn("Used Data", typeof(String));

DataColumn col3 = new DataColumn("WebSize", typeof(String));

newTable.Columns.Add(col1);

newTable.Columns.Add(col2);

newTable.Columns.Add(col3);

return newTable;

}

#endregion Create Table structure

.aspx



<style type="text/css">

.GridHeader

{

background-color:#156db4 !Important;

height: 30px;

width:auto;

}



.Rows

{

background-color:#d8d8d8;

height: 30px;

background-repeat: repeat-x;

text-align:center;

color:#002a76;

}

.Rows1

{

background-color:White;

height: 30px;

background-repeat: repeat-x;

text-align:center;

color:#002a76;

}

.linkButton

{

color: #CD853F !Important;

cursor : hand ;

background-color:#156db4 !Important;

font-weight: bold;

height: 30px;

width:auto;

}

</style>

<table>

<tr valign="top">

<td style="width:30%" >

<asp:TreeView ID="TreeView1" runat="server" OnSelectedNodeChanged="Select_Change" >

</asp:TreeView>

</td>

<td style="width:70%">

<asp:Label ID="lblSiteCollectionData" runat="server" CssClass="Rows" ></asp:Label>

 

<asp:GridView ID="spGridWebSiteUsedData" runat="server" AutoGenerateColumns="false">

 

<HeaderStyle CssClass="linkButton" />

<RowStyle CssClass="Rows" />

<AlternatingRowStyle CssClass="Rows1" />

 

<Columns>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblWebSiteName" Text="Web Site Name" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblSebSite"

Text='<%# Eval("Web Name") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

 

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblWebSiteUsedData" Text="Web Site Name" runat="server" />

 

</HeaderTemplate>

 

<ItemTemplate>

 

<asp:Label ID="lblUsedData"

Text='<%# Eval("Used Data") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

 

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblWebSiteData" Text="Web Site Size" runat="server" />

 

</HeaderTemplate>

 

<ItemTemplate>

 

<asp:Label ID="lblUsedDatasize"

Text='<%# Eval("WebSize") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

</Columns>

 

</asp:GridView>

<br />

<asp:GridView ID="gvDocumentsList" runat="server" AutoGenerateColumns="false">

<HeaderStyle CssClass="linkButton" />

<RowStyle CssClass="Rows" />

<AlternatingRowStyle CssClass="Rows1" />

<Columns>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhlistName" Text="ListName" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblListNameName"

Text='<%# Eval("ListNameName") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhListSize" Text="ListSizee" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblSize" Text='<%# Eval("Size") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhItemscount" Text="Itemscount" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblItemsCount" Text='<%# Eval("ItemsCount") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhListType" Text="ListType" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblListType" Text='<%# Eval("ListType") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhWebUrl" Text="WebUrl" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblWebUrl" Text='<%# Eval("WebUrl") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

<br />

<!-- ListReport-->

<asp:Label ID="lstTotalSize" runat="server" Text="Total Lists Size: "></asp:Label>

<asp:Label ID="listTotalSize" runat="server"></asp:Label>

<asp:Label ID="lstDocSizeText" runat="server" Text="Documents Size:"></asp:Label>

<asp:Label ID="lstDocSize" runat="server"></asp:Label>

<asp:GridView ID="gvListReport" runat="server" AutoGenerateColumns="false">

<HeaderStyle CssClass="linkButton" />

<RowStyle CssClass="Rows" />

<AlternatingRowStyle CssClass="Rows1" />

<Columns>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhlistName" Text="ListName" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblListNameName" Text='<%# Eval("ListNameName") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhListSize" Text="ListSizee" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblSize" Text='<%# Eval("Size") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhItemscount" Text="Itemscount" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblItemsCount" Text='<%# Eval("ItemsCount") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhListType" Text="ListType" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblListType" Text='<%# Eval("ListType") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField >

<HeaderTemplate >

<asp:Label ID="lblhWebUrl" Text="WebUrl" runat="server" />

</HeaderTemplate>

<ItemTemplate>

<asp:Label ID="lblWebUrl" Text='<%# Eval("WebUrl") %>' runat="server"></asp:Label>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

<asp:Label ID="Message" runat="server"></asp:Label>

</td></tr>

</table>