japks
japks

Reputation: 43

Uploading a single Sharepoint document with metadata

I defined terms in the Term Store Management Tool which I added as "Managed Metadata" columns in a document library. I want to upload a document and to update its "Managed Metadata" columns. In order to do so, I wrote the following code:

    void UploadDocument(Document document)
    {
        try
        {
            using (ClientContext context = SPHelper.GetClientContext())
            {
                List library = context.Web.Lists.GetByTitle("MyDocumentLibrary");
                FileCreationInformation fileInfo = new FileCreationInformation
                {
                    Url = "MyFileTarget",
                    Content = document.Content,
                    Overwrite = true
                };
                File file = library.RootFolder.Files.Add(fileInfo);
                ListItem item = file.ListItemAllFields;

                item["RegularColumn"] = "some data";
                item["Metadata"] = "some other data";
                item.Update();
                context.ExecuteQuery(); // "The given guid does not exist in the term store." Exception thrown
            }
        }
        catch (Exception ex)
        {
            LogHelper.RecordError("Failed to upload document", ex, System.Reflection.MethodInfo.GetCurrentMethod().Name);
        }
    }

I can upload a file and update its regular columns but I can't update the Metadata columns.

Is there a way to specify item["Metadata"] GUID ?

Upvotes: 4

Views: 3135

Answers (1)

Jerry
Jerry

Reputation: 3625

The Term Guid can be found in Term Store:

enter image description here

Add reference to Microsoft.SharePoint.Client.Taxonomy.dll:

enter image description here

Here is the code snippet to set managed metadata field value with TaxonomyFieldValue class:

            using (ClientContext context = new ClientContext(sharePointSite))
            {
                FileCreationInformation FCInfo = new FileCreationInformation();
                FCInfo.Url = "http://sp2016/sites/dev/Shared%20Documents/Test.txt";
                FCInfo.Overwrite = true;
                FCInfo.Content = System.IO.File.ReadAllBytes(fileToUpload);

                Web web = context.Web;
                List library = web.Lists.GetByTitle(libraryName);
                Microsoft.SharePoint.Client.File uploadfile = library.RootFolder.Files.Add(FCInfo);

                ListItem item = uploadfile.ListItemAllFields;
                item["Title"] = "some data";
                var fields = library.Fields;
                var field = fields.GetByInternalNameOrTitle("managedcolumn");
                context.Load(fields);
                context.Load(field);
                context.ExecuteQuery();
                var taxKeywordField = context.CastTo<TaxonomyField>(field);
                TaxonomyFieldValue termValue = new TaxonomyFieldValue();
                termValue.Label = "TermC";
                termValue.TermGuid = "045830f1-f51e-4bac-b631-5815a7b6125f";
                termValue.WssId = 3;
                taxKeywordField.SetFieldValueByValue(item, termValue);
                item.Update();
                context.ExecuteQuery();

                uploadfile.CheckIn("testcomment", CheckinType.MajorCheckIn);
                context.ExecuteQuery();

            }

enter image description here

Upvotes: 2

Related Questions