I've recently wanted to delete social tags when I am deploying my wsp using powershell. I started writing the code and was able to retrieve the social tags but was not able to delete them. When I attempted to delete them an exception was thrown. More like an Unauthorized exception. Read this for more information on it.
But I was able to find this blog post which helped me out in solving the issue. I was able to create a console program using C# to delete the social tags of SharePoint 2010. I havent tested it much. Feel free to modify the code.
using System;
using System.Globalization;
using System.IO;
using System.Reflection;
using System.Security.Principal;
using System.Web;
using Microsoft.Office.Server.SocialData;
using Microsoft.Office.Server.UserProfiles;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;
namespace RemoveTags
{
class Program
{
static void Main(string[] args)
{
using (SPSite site = new SPSite(args[0]))
{
using (SPWeb web = site.OpenWeb())
{
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("Deleting all tags");
foreach (SPUser user in site.OpenWeb().AllUsers)
{
if (!user.IsDomainGroup && user.LoginName != "NT AUTHORITY\\LOCAL SERVICE" && user.LoginName != "SHAREPOINT\\system")
{
web.AllowUnsafeUpdates = true;
Console.WriteLine("Deleting tags for : " + user.Name);
HttpRequest request = new HttpRequest("", args[0], "");
HttpContext.Current = new HttpContext(request, new HttpResponse(new StringWriter(CultureInfo.CurrentCulture)));
HttpContext.Current.Items["HttpHandlerSPWeb"] = web;
WindowsIdentity wi = WindowsIdentity.GetCurrent();
typeof(WindowsIdentity).GetField("m_name", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(wi, user.LoginName);
HttpContext.Current.User = new GenericPrincipal(wi, new string[0]);
WindowsIdentity wi2 = WindowsIdentity.GetCurrent();
SPServiceContext serviceContext = SPServiceContext.GetContext(HttpContext.Current);
SocialTagManager socialTagManager = new SocialTagManager(serviceContext);
SPServiceContext context = SPServiceContext.GetContext(site);
UserProfileManager usrPrfMngr = new UserProfileManager(context);
UserProfile usrPrf = usrPrfMngr.GetUserProfile(user.LoginName);
SocialTag[] tags = socialTagManager.GetTags(usrPrf);
foreach (SocialTag tag in tags)
{
Term term = tag.Term;
socialTagManager.DeleteTag(tag.Url, term);
}
}
}
web.AllowUnsafeUpdates = false;
Console.WriteLine("All tags are deleted");
Console.ResetColor();
Console.ReadLine();
}
}
}
}
}
No comments:
Post a Comment