2016-09-28 5 views
1

SharePoint 온라인에서 토론 항목의 속성을 업데이트하는 중이 오류가 발생합니다. 문서 라이브러리 및 사용자 지정 목록의 경우에는 오류가 발생하지 않습니다. 오류 코드 -2147024809 내 코드가 이런 식으로 간다.유효하지 않은 데이터가 목록 항목을 업데이트하는 데 사용되었습니다. 업데이트하려는 필드가 읽기 전용 일 수 있습니다.

public static SBUpdatePropsResponse UpdateProps(string siteCollectionUrl,string webUrl ,SBUpdatePropsRequest updateRequest) 
{ 
    var updateResponse = new SBUpdatePropsResponse(); 
    var clientContext = Admin.GetAuthenticatedClientContext(webUrl); 
    var web = clientContext.Web; 
    var oList = clientContext.Web.Lists.GetById(updateRequest.ListID); 

    var itemProps = updateRequest.ItemProperties; 
    var itemUserProps = updateRequest.UserTypeProperties; 
    var itemDateTimeProps = updateRequest.DateTimeItemProperties; 

    ListItem listItem = oList.GetItemById(updateRequest.DocID); 
    clientContext.Load(web); 
    clientContext.Load(listItem); 
    clientContext.ExecuteQuery();     
    try 
    { 
     //Need to create a extra dictionary to save server time against property     
     var itemDateTimePropsLocal = new Dictionary<string, string>(); 
     foreach (var prop in itemDateTimeProps) 
     { 
      var dateTimeLocal = new DateTime(prop.Value, DateTimeKind.Utc); 
      var temp = web.RegionalSettings.TimeZone.UTCToLocalTime(dateTimeLocal); 
      clientContext.ExecuteQuery(); 
      itemDateTimePropsLocal.Add(prop.Key, temp.Value.ToString()); 
     } 

     foreach (var userProp in itemUserProps) 
     { 
      if (userProp.Value != null && !string.IsNullOrEmpty(userProp.Value.ToString())) 
      { 
       var uservalues = userProp.Value as int[]; 
       //Handle for multi user property 
       if (uservalues.Length > 1) 
       { 
        var propValues = new List<FieldUserValue>(); 
        foreach (var values in uservalues) 
        { 
         if (values > 0) 
          propValues.Add(new FieldUserValue { LookupId = values }); 
        } 
        listItem[userProp.Key] = propValues.ToArray(); 
       } 
       else 
        listItem[userProp.Key] = (new FieldUserValue { LookupId = uservalues[0] }); 
      } 
     }    

     foreach (var prop in itemProps) 
     { 
      if (prop.Key.Equals("ContentType")) 
       continue; 
      if (prop.Value != null && !string.IsNullOrEmpty(prop.Value.ToString()) && prop.Value.GetType() != typeof(FieldUrlValue)) 
       listItem.ParseAndSetFieldValue(prop.Key, prop.Value.ToString()); 
     } 

     foreach (var prop in itemDateTimePropsLocal) 
     { 
      listItem[prop.Key] = prop.Value; 
     } 
     listItem.Update(); 
     clientContext.ExecuteQuery(); 
     updateResponse.IsSuccess = true; 
    } 
    catch(Exception ex) 
    { 
     Logging.LogWriteLine("Failed to update list item properties", ex); 
     updateResponse.IsSuccess = false; 
    } 

}

답변

0

나는 경우 사람들이 여기에 내 대답을 걸었하면 오류 메시지가 인터넷 검색으로이 질문을 찾을 것을이 SO 질문의 제목이다. 이 대답은이 이상한 오류 메시지를 우연히 만난 다른 사람들을 도울 수 있습니다.

서버 측 코드로 캘린더 이벤트를 업데이트 할 때 동일한 오류가 발생했습니다.

내 코드는 처음에 새로운 빈 목록 항목을 추가했습니다. 이 새 목록 항목에는 시작 날짜와 종료 날짜의 기본값이 있습니다. 몇 줄 후에 목록 항목 필드가 하나씩 (op 코드와 유사하게) 업데이트되고 목록 항목 update이 호출됩니다. 내 경우에는 시작일이 내 코드에 의해 업데이트되지 않고 기본값으로 유지됩니다. 종료일이 내 코드에 의해 업데이트되고 종료일이 시작일보다 일찍 설정되었습니다. 목록 항목 update이 호출되면이 예외가 내 예외 로그에 표시됩니다.

이 문제를 해결하고 종료일이 항상 만료되도록 시작일을 조정 한 다음 update으로 전화하면 오류가 사라집니다.