Unable to change the managed metadata fields for my Files and Folders inside my remote event receiver
-
08-02-2021 - |
Pergunta
I have the following code inside my RER:-
foreach (ListItem currentFilingSystemItem in collListItem)
{
Folder folder = context.Web.GetFolderByServerRelativeUrl(context.Web.ServerRelativeUrl + "/library3/" + currentFilingSystemItem["DealName"].ToString());
context.Load(folder);
context.ExecuteQuery();
folder.MoveTo(context.Web.ServerRelativeUrl + "/ArchDocs/" + currentFilingSystemItem["DealName"].ToString());
folder.Update();
context.Load(folder);
context.Load(folder.Files);
context.Load(folder.Folders);
FileCollection files = folder.Files;
FolderCollection folders = folder.Folders;
context.ExecuteQuery();
foreach (File f in files)
{
ListItem item = f.ListItemAllFields;
context.Load(item);
context.ExecuteQuery();
item["DealStage"] = currentFilingSystemItem["DealStage"];
item.Update();
context.ExecuteQuery();
}
foreach (Folder fo in folders)
{
ListItem item = fo.ListItemAllFields;
context.Load(item);
context.ExecuteQuery();
item["DealStage"] = currentFilingSystemItem["DealStage"];
item.Update();
context.ExecuteQuery();
}
where i am trying to change a managed metadata column named "DealStage" using this item["DealStage"] = currentFilingSystemItem["DealStage"];
for both File and Folders, but my above code will not raise any exception, but the DealStage
will not get update! can anyone advice on this please?
Thanks
Solução
As I mentioned in response to your other posted question, you should use [TaxonomyFieldValue
][1] (for single-value managed metadata columns) and [TaxonomyFieldValueCollection
][2] (for multi-value managed metadata columns). In most cases, setting a taxonomy field to a raw guid will not update the value correctly. Also note the use of the SetFieldValueByValue
method on the actual Field object, rather than simply setting the field equal to a value. Taxonomy fields are considerably more difficult to code updates for than scalar value fields are.
Give this a try:
foreach (ListItem currentFilingSystemItem in collListItem)
{
Folder folder = context.Web.GetFolderByServerRelativeUrl(context.Web.ServerRelativeUrl + "/library3/" + currentFilingSystemItem["DealName"].ToString());
context.Load(folder);
context.ExecuteQuery();
folder.MoveTo(context.Web.ServerRelativeUrl + "/ArchDocs/" + currentFilingSystemItem["DealName"].ToString());
folder.Update();
context.Load(folder);
FileCollection files = folder.Files;
FolderCollection folders = folder.Folders;
context.Load(files, fs => fs.Include(f => f.ListItemAllFields));
context.Load(folders, fs => fs.Include(f => f.ListItemAllFields));
context.ExecuteQuery();
var dealStageField = list.Fields.GetByInternalNameOrTitle("DealStage");
context.Load(dealStageField);
context.ExecuteQuery();
var dealStageTaxField = context.CastTo<TaxonomyField>(field);
var dealStageTermValue = currentFilingSystemItem["DealStage"] as TaxonomyFieldValue;
foreach (File f in files)
{
ListItem item = f.ListItemAllFields;
dealStageTaxField.SetFieldValueByValue(item, dealStageTermValue);
item.Update();
context.ExecuteQuery();
}
foreach (Folder fo in folders)
{
ListItem item = fo.ListItemAllFields;
dealStageTaxField.SetFieldValueByValue(item, dealStageTermValue);
item.Update();
context.ExecuteQuery();
}
}