2012-07-12 16 views
5

Próbuję zaktualizować pole "ModifiedBy" na tablicy dyskusyjnej Sharepoint, używając modelu obiektu klienta. Zmieniając pola "Editor" i "Author", mogę zmienić "ModifiedBy", który pojawia się w widoku listy. Jednak po kliknięciu na post dyskusji, pole "ModifiedBy", które się tam pojawi (to z obrazkiem powyżej), nie odzwierciedla zmian. Po eksperymentach odkryłem, że pole, które muszę zmienić, aby to poprawić, nazywa się "MyEditor". Niestety to pole jest tylko do odczytu.Ustawienia modelu obiektu klienta Sharepoint Pole Modyfikuj w polu

W poniższym kodzie staram się zmienić ustawienia tylko do odczytu pola na false. Kiedy patrzę na pole MyEditor w debugerze Visual Studio po linii ExecuteQuery() na dole pierwszego bloku, pokazuje to, że wartość ReadOnlyField została ustawiona na wartość false.

 sharepointContext.Load(discussionList); 
     sharepointContext.ExecuteQuery(); 
     var fields = discussionList.Fields; 
     sharepointContext.Load(fields); 
     sharepointContext.ExecuteQuery(); 
     var field = fields.GetByInternalNameOrTitle("MyEditor"); 
     field.ReadOnlyField = false; 
     field.Update(); 
     sharepointContext.Load(field); 
     sharepointContext.ExecuteQuery(); 

Powyższy kod wykonuje się bez problemów. Problem zaczyna się z tego następnego bloku:

 //...Code to initialize discussionItem... 
     discussionItem["MyEditor"] = 0; 
     discussionItem["Editor"] = 0; 
     discussionItem["Author"] = 0; 
     discussionItem["Body"] = "Testing"; 
     discussionItem["Title"] = "Hello Worlds"; 
     discussionItem.Update(); 
     sharepointContext.Load(discussionItem); 
     sharepointContext.ExecuteQuery(); 

Gdy kod osiągnie executeQuery() w dolnej części drugiego bloku, to rzuca się ServerException z następującym komunikatem:

 Invalid data has been used to update the list item. 
     The field you are trying to update may be read only. 

aby upewnić się, że pole MyEditor było tym, które spowodowało wyrzucenie wyjątku, skomentowałem linię, w której ją ustawiłem i ponownie uruchomiłem kod. Wszystko działało dobrze. Nie rozumiem, co jest nie tak, czy ktoś może mi pomóc?

+0

Jak myślisz, dlaczego powinno być możliwe (i dlaczego trzeba, że ​​dla zwykłych celów)? Nie spodziewałbym się, że tego typu pola będą edytowalne ... Jeśli używasz konta innego niż administrator, aby to zrobić i uda Ci się zmienić te pola, wydaje mi się, że to błąd. –

+0

Wierzę, że powinno być możliwe, ponieważ wydaje się rozsądne, że jeśli ustawię właściwość ReadOnly pola na wartość false, powinienem móc do niego napisać. Jeśli nie, w jakim celu służy pole ReadOnly? Przenoszę dane na forum dyskusyjne z innej bazy danych do SharePoint i chcę, aby pole ModifiedBy odzwierciedlało osobę, która je opublikowała (od tej chwili zamiast tego pokazuje moje imię). Moje konto ma pełne prawa administracyjne. –

Odpowiedz

1

ModifiedBy i CreadtedBy obliczony automatycznie od autora i redakcji trzeba zmienić tylko pola Autor i redaktor tak:

 using (var clientContext = new ClientContext(@"http://server")) 
     { 
      var web = clientContext.Web; 
      var lst = web.Lists.GetByTitle("Discus"); 

      var item = lst.GetItemById(2); 
      item["Author"] = 3; 
      item["Editor"] = 2; 
      item.Update(); 
      clientContext.ExecuteQuery();       

      Console.WriteLine("done"); 
     } 
+0

Jestem tego świadomy. Działa tylko wtedy, gdy dodasz element, a następnie pobierzesz go za pomocą GetItemById. To absolutnie nie ma sensu (co nie jest twoją winą). Chciałbym wiedzieć, dlaczego nie mogę zmodyfikować pola MyEditor i sprawić, że będzie działał przy pierwszym dodaniu go. –

3

W przypadku ktoś musi znaleźć użytkownika według nazwy, to idzie tak:

private static FieldUserValue GetUser(ClientContext clientContext, string userName) 
    { 
     var userValue = new FieldUserValue(); 
     var newUser = clientContext.Web.EnsureUser(userName); 
     clientContext.Load(newUser); 
     clientContext.ExecuteQuery(); 
     userValue.LookupId = newUser.Id; 
     return userValue; 
    } 

Zwrócona wartość można ustawić za pomocą pozycji [ „Autor”]

Powiązane problemy