2012-07-12 10 views
5

मैं क्लाइंट ऑब्जेक्ट मॉडल का उपयोग करके शेयरपॉइंट चर्चा बोर्ड में "संशोधित" फ़ील्ड को अपडेट करने का प्रयास कर रहा हूं। "संपादक" और "लेखक" फ़ील्ड को बदलकर, मैं सूची दृश्य पर दिखाई देने वाले "संशोधित" को बदल सकता हूं। हालांकि, एक बार जब आप एक चर्चा पोस्ट पर क्लिक करते हैं, तो वहां "संशोधित" फ़ील्ड दिखाई देता है (इसके ऊपर की तस्वीर वाला एक) परिवर्तनों को प्रतिबिंबित नहीं करता है। प्रयोग करने के बाद, मैंने पाया कि जिस क्षेत्र को मुझे सही करने के लिए बदलने की जरूरत है उसे "माईडिटर" कहा जाता है। दुर्भाग्य से, यह क्षेत्र केवल पढ़ने के लिए है।शेयरपॉइंट क्लाइंट ऑब्जेक्ट मॉडल सेटिंग संशोधित द्वारा फ़ील्ड

नीचे दिए गए कोड में, मैं फ़ील्ड की केवल-पढ़ने की सेटिंग्स को गलत में बदलने की कोशिश करता हूं। जब मैं पहले ब्लॉक के नीचे ExecuteQuery() लाइन के बाद विजुअल स्टूडियो के डीबगर में MyEditor फ़ील्ड को देखता हूं, तो यह दिखाता है कि ReadOnlyField मान वास्तव में गलत पर सेट किया गया है।

 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(); 

उपरोक्त कोड बिना किसी समस्या के निष्पादित करता है।

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

सुनिश्चित करने के लिए:

 //...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(); 

जब कोड ExecuteQuery() दूसरे खंड के तल पर पहुंचता है, यह निम्न संदेश के साथ एक ServerException फेंकता है: समस्या यह अगले ब्लॉक के साथ आता है कि MyEditor फ़ील्ड एक अपवाद को फेंकने वाला था, मैंने उस लाइन को टिप्पणी की जहां मैंने इसे सेट किया और कोड फिर से चलाया। सब कुछ ठीक काम किया। मुझे समझ में नहीं आता कि क्या गलत है, क्या कोई मेरी मदद कर सकता है?

+0

क्यों (तुम क्यों की आवश्यकता होगी और यह सामान्य प्रयोजनों के लिए) आपको लगता है कि यह संभव हो जाना चाहिए करते हैं? मैं इस प्रकार के फ़ील्ड को संपादन योग्य होने की उम्मीद नहीं करूंगा ... यदि आप ऐसा करने के लिए गैर-व्यवस्थापक खाते का उपयोग कर रहे हैं और इन फ़ील्ड को बदलने का प्रबंधन करते हैं तो यह मुझे एक बग जैसा लगता है। –

+0

मेरा मानना ​​है कि यह संभव होना चाहिए क्योंकि यह उचित लगता है कि अगर मैंने फ़ील्ड की केवल पढ़ने की संपत्ति को गलत पर सेट किया है, तो मुझे इसे लिखने में सक्षम होना चाहिए। यदि नहीं, तो ReadOnly फ़ील्ड किस उद्देश्य से सेवा करता है? मैं एक अलग डेटाबेस से शेयरपॉइंट में एक चर्चा बोर्ड के लिए डेटा माइग्रेट कर रहा हूं, और मैं संशोधितबी फ़ील्ड को मूल रूप से पोस्ट करने वाले व्यक्ति को प्रतिबिंबित करना चाहता हूं (अभी के रूप में, यह इसके बजाय मेरा नाम दिखाता है)। मेरे खाते में पूर्ण प्रशासनिक अधिकार हैं। –

उत्तर

1

ModifiedBy और CreadtedBy लेखक और संपादक से स्वचालित रूप से गणना की आप इस तरह केवल लेखक और संपादक क्षेत्रों को बदलने की जरूरत:

 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

मुझे इस बारे में पता है। यह केवल तभी काम करता है जब आप उन्हें आइटम जोड़ते हैं और फिर इसे GetItemById के साथ पुनर्प्राप्त करते हैं। यह बिल्कुल समझ में नहीं आता है (जो आपकी गलती नहीं है)। मैं जानना चाहता हूं कि मैं MyEditor फ़ील्ड को क्यों संशोधित नहीं कर सकता और इसे पहली बार जोड़ता हूं। –

3

मामले में किसी नाम से उपयोगकर्ता को खोजने के लिए की जरूरत है, यह इस प्रकार है:

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; 
    } 

दिए गए मान मद के माध्यम से स्थापित किया जा सकता [ "लेखक"]

संबंधित मुद्दे