Wednesday, 8 April 2015

Getting managed metadata from a another system. I recently needed to extract the managed metadata terms from a server to which I had very little access, from a computer that wouldn't allow me to run PowerShell scripts. I did so using a Windows Forms application instead. I thought I'd post the code here for future benefit:

public void GetTerms(ClientContext context, StreamWriter file, Term term, string prefix)
{
    TermCollection subTerms = term.Terms;
    context.Load(subTerms);
    context.ExecuteQuery();
    foreach (Term subTerm in subTerms)
    {
        file.WriteLine(prefix + subTerm.Name + "," + subTerm.Id);
        GetTerms(context, file, subTerm, prefix + subTerm.Name + "/");
    }
}

private void button1_Click(object sender, EventArgs e)
{
    //Recursive function to get terms


    //Specify admin user and SharePoint site URL
    //User = "e-sjones"
    string site = "mysite";


    //Pwd = Read-Host -Prompt "Enter your password" -AsSecureString
    ClientContext context = new Microsoft.SharePoint.Client.ClientContext(site);
    Web web = context.Web;
    context.Load(web);
    context.ExecuteQuery();
    //Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials(User,Pwd)
    //Context.Credentials = Credentials
    TaxonomySession mms = TaxonomySession.GetTaxonomySession(context);
    context.Load(mms);
    //Context.ExecuteQuery()

    //Get Term Stores
    var termStores = mms.TermStores;
    context.Load(termStores);
    context.ExecuteQuery();
    var termStore = termStores[0];
    context.Load(termStore);
    context.ExecuteQuery();

    //Get Groups
    var Groups = termStore.Groups;
    context.Load(Groups);
    context.ExecuteQuery();

    //Create the file and add headings
    var outputFile = @"c:\temp\Output File Path.txt";

    var file = new StreamWriter(outputFile);
    file.WriteLine("Term Set Name,GUID");

    foreach (TermGroup group in Groups)
    {
        context.Load(group);
        context.ExecuteQuery();
        file.WriteLine();
        file.WriteLine("-----------");
        file.WriteLine();
        file.WriteLine(group.Name + "," + group.Id);
        var TermSets = group.TermSets;
        context.Load(TermSets);
        context.ExecuteQuery();
        foreach (TermSet termSet in TermSets)
        {
            file.WriteLine("--");
            file.WriteLine(termSet.Name + "," + termSet.Id);

            var Terms = termSet.Terms;
            context.Load(Terms);
            context.ExecuteQuery();
            foreach (Term term in Terms)
            {
                file.WriteLine(term.Name + "," + term.Id);
                GetTerms(context, file, term, term.Name + "/");
            }
        }
    }
    file.Flush();
    file.Close();
}

I can't really claim credit by the way. This was a re-write of a PowerShell script that I found here: http://sharepointrapt.blogspot.co.uk/2014/08/export-sharepoint-managed-metadata.html


No comments:

Post a Comment