Take the 2-minute tour ×
SharePoint Stack Exchange is a question and answer site for SharePoint enthusiasts. It's 100% free, no registration required.

I am currently working on a project which requires me to use Managed Metadata columns in a list.I have used list definitions for creating the list and created the managed metadata field in its schema.xml

Now the problem is that the client has some data in the list on his environment(Assuming that the Term Store is configured exactly the same on his and my environment) and i need to somehow migrate the data from that list to the list in my environment without migrating the content database(as explained in this link migrating-managed-metadata-term-sets-to-another-farm-on-another-domain

As the managed metadata columns are non editable in the datasheet view ,is there any other way to achieve this by either exporting the data from the customer's list in an excel and populating the same to the list on my environment?Or any other workaround either through the object model or powershell ?

Thanks in Advance

share|improve this question
    
Managed metadata columns are editable in datasheet. –  ukhardy Feb 12 at 14:44
add comment

2 Answers

How about a tool like this one?

http://metadataexportsps.codeplex.com/

It should allow you to export the TermSets you need to a csv & then import them in your environment.

share|improve this answer
add comment

I am assuming that you have same termset on both your environments and you just want to copy the data from one list to another. You can do this via powershell (Note: there might be a better way, but I felt this was quick way to get going).

Save the list as template. Download the stp file. Rename it with .cab extension. Unzip to find manifest.xml. Find the nodes <Data>...</Data> and copy the entire <Data>...</Data> to another new xml file.

Now using powershell, read from xml file and updating the target list, something like below. (Assuming the taxfield to have only have one value).

$site = Get-SPSite "http://site/"
$targetList = $site.RootWeb.Lists["targetlistname"]
$taxField = [Microsoft.SharePoint.Taxonomy.TaxonomyField]$targetList.Fields["taxfieldname"]

#taxnonomy objects
$session = New-Object Microsoft.SharePoint.Taxonomy.TaxonomySession($site)
$termStore = $session.DefaultKeywordsTermStore
$termStoreGroup = $termStore.Groups["GroupName"]
$termSet = $termStoreGroup.TermSets["TermsetName"]

#Get Contents of the xml file
[xml]$manifest = Get-Content "manifest.xml"

$manifest.Rows.Row | ForEach-Object {
   $row = $_
   $taxfieldelement = $row.Field | Where-Object { $_.Name -eq "taxfieldname" }
   $titleFieldelement = $row.Field | Where-Object { $_.Name -eq "Title" }

   $taxfieldvalue =  $taxfieldelement.InnerText.Substring($taxfieldelement.InnerText.IndexOf('#') + 1)
   $titlevalue =  $titlevalue.InnerText
   $term = $termSet.Terms | Where-Object { $_.Name -eq $taxfieldvalue }

   #udpate target list
   $taxFieldValue = New-Object Microsoft.SharePoint.Taxonomy.TaxonomyFieldValue($taxField)
   $taxFieldValue.PopulateFromLabelGuidPair($term.Name + "|" + $term.get_Id().ToString())
   $item = $list.Items.Add()
   $item["Title"] = $titlevalue
   $item["taxfieldname"] = $taxfieldvalue
   $item.Update()
}
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.