2014-12-04 9 views
0

CSOM에서 Sharepoint 2013 TaxonomyField의 값을 설정하려고하지만 이후에 마지막으로 context.ExecuteQuery()을 실행하면 예외가 발생합니다. Microsoft.SharePoint.Client.Runtime.dll에서 'Microsoft.SharePoint.Client.ServerException'형식의 첫 번째 예외가 발생했습니다. 추가 정보 : 값은 null 일 수 없습니다. 매개 변수 이름 : termId '. 모든 것이 잘로드되고, 용어를 찾고 아이디어가 없습니다.CSOM 예외를 통해 분류 값을 추가 할 때 "값은 null 일 수 없습니다. 매개 변수 이름 : termId"throw

 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 루프에서 만든 분류의 용어 == "00000000-0000-0000-0000-000000000000"셰어에서보고 고유 식별자를 가지고 것으로 나타났습니다 대지. 그래서 나는 내 문제가 거기에 있다고 생각하고있다.

답변

0

나는 내 문제를 알아 냈고 잘못된 잘못된 용어 ID가 만들어 졌기 때문에 발생했습니다. 다음 코드에서

내가 일을해야

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

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