質問

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

役に立ちましたか?

解決

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();
    }
}
ライセンス: CC-BY-SA帰属
所属していません sharepoint.stackexchange
scroll top