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