通过CSOM Exception&#34添加分类值时,Value不能为null。 ParamterName:termId"抛出

时间:2014-12-04 18:54:53

标签: c# sharepoint-2013 taxonomy csom

我正在尝试在CSOM中设置Sharepoint 2013 TaxonomyField的值,但是当我在context.ExecuteQuery()之后执行最后一个taxField.Update()时,会抛出一个异常,其中显示了类型&的第一次机会异常#39; Microsoft.SharePoint.Client.ServerException'发生在Microsoft.SharePoint.Client.Runtime.dll中附加信息:值不能为空。参数名称:termId'。一切都很好,它找到了这个词,我没有想法。

        public void AddTaxonomyFieldValue(ClientContext context, ListItem item, string destinationColumn, IEnumerable<string> terms, Guid termGroupId, Guid termSetId, int lcid)
    {
        var taxonomySession = TaxonomySession.GetTaxonomySession(context);
        var store = taxonomySession.TermStores.GetByName("Managed Metadata Service2");
        var group = store.GetGroup(termGroupId);
        var set = group.TermSets.GetById(termSetId);
        var existingTerms = set.GetAllTerms();
        var field = item.ParentList.Fields.GetByInternalNameOrTitle(destinationColumn);
        var taxField = context.CastTo<TaxonomyField>(field);
        context.Load(existingTerms, et => et.Include(t => t.Labels.Include(l => l.Value, l => l.Language), t => t.Id, t=> t.PathOfTerm, t => t));
        context.ExecuteQuery();

        var fieldTermValues = new Collection<Term>();

        foreach (var term in terms)
        {
            var lmi = new LabelMatchInformation(context);
            lmi.TermLabel = term;
            // Find existing term
            var existingTerm =
                existingTerms.FirstOrDefault(t => t.Labels.Any(l => l.Language == lcid && l.Value == term));

            if (null == existingTerm)
            {
                // create new term
                existingTerm = set.CreateTerm(term, lcid, new Guid());
                set.TermStore.CommitAll();
                context.Load(existingTerm);
                context.ExecuteQuery();
            }

            fieldTermValues.Add(existingTerm);
        }
        // set taxonomy field
        taxField.SetFieldValueByCollection(item, fieldTermValues, lcid);
        taxField.Update();
        // Exception Thrown Here
        context.ExecuteQuery();
    }

编辑1: 我只是注意到我在foreach循环中创建的分类术语有一个唯一标识符==&#34; 00000000-0000-0000-0000-000000000000&#34;从Sharepoint网站查看时。所以我认为我的问题就在那里。

1 个答案:

答案 0 :(得分:0)

我发现了我的问题,这是由于创建了一个错误的无效术语ID。

在以下代码中

// crete new term
existingTerm = set.CreateTerm(term, lcid, new Guid());

我应该做

existingTerm = set.CreateTerm(term, lcid, Guid.NewGuid());