2008-12-31 13 views
9

मैं एक SharePoint सूची के लिए एक आइटम एडिंगर हैंडलर लिख रहा हूं, और सूची में बहु-उपयोगकर्ता फ़ील्ड हैं। चूंकि एसपीआईटीम वास्तव में इस बिंदु पर उपलब्ध नहीं है, मुझे लगता है कि मुझे SPItemEventDataCollection से वापस आने वाली स्ट्रिंग का उपयोग करने के लिए रवाना किया गया है। यही कारण है कि स्ट्रिंग कुछ इस तरह दिखेगा जब user1, user2, और user3 मौजूद हैं:एसपीयूसर की एक सरणी में एक SharePoint बहु-उपयोगकर्ता फ़ील्ड स्ट्रिंग को कन्वर्ट करने के लिए सबसे अच्छा तरीका है?

1; #MYDOMAIN \ user1; # 4; #MYDOMAIN \ user2; # 10; #MYDOMAIN \ user3

मैं था इसे किसी अन्य मौजूदा विधि में पारित करने के लिए एसपीयूसर ऑब्जेक्ट्स की एक सरणी में परिवर्तित करना चाहते हैं। क्या इन स्ट्रिंग्स को संभालने के लिए कोई भी SharePoint अंतर्निहित तरीका है, या क्या मैं इस स्ट्रिंग को पार्स करने के लिए रुक गया हूं?

यह भी मानते हुए कि मुझे इस स्ट्रिंग से निपटने की ज़रूरत है, ऐसा लगता है कि यहां पूर्णांक टोकन हमेशा डोमेन \ उपयोगकर्ता नाम से मेल खाते हैं। क्या ऐसे कोई मामले हैं जहां यह सत्य नहीं होगा और या तो पूर्णांक या डोमेन \ उपयोगकर्ता नाम गुम हैं या अन्यथा गलत हैं? क्या केवल संख्याओं का उपयोग करना और एसपीवेब की साइट यूज़र का उपयोग करना सुरक्षित होगा। GETByID (आईडी) विधि? कुछ हद तक परीक्षणों में मैं असफल होने के लिए इसे प्राप्त नहीं कर सकता, लेकिन ऐसा लगता है कि अगर वे पूरी तरह से अनावश्यक हैं तो संख्यात्मक और स्ट्रिंग डेटा दोनों शामिल किए जाएंगे।

धन्यवाद!

+1

और यही कारण है कि मैं शेयरपॉइंट विकास को नापसंद करता हूं ... यह लोगों की तरह है * सोचने के लिए भूल गया *। –

उत्तर

16

SPFieldUserValueCollection वही करता है जो आप खोज रहे हैं। इसका कन्स्ट्रक्टर एसपीवेब और उपयोगकर्ताओं की स्ट्रिंग स्वीकार करता है। संग्रह में SPFieldUserValue आइटम एक उपयोगकर्ता प्रॉपर्टी प्रदान करते हैं जो वेब के लिए संबंधित SPUser ऑब्जेक्ट देता है।

private void ProcessUsers(SPListItem item, string fieldName) 
{ 
    string fieldValue = item[fieldName] as string; 
    SPFieldUserValueCollection users = new SPFieldUserValueCollection(item.Web, fieldValue); 

    foreach(SPFieldUserValue uv in users) 
    { 
    SPUser user = uv.User; 
    // Process user 
    } 
} 

SPFieldUser प्रकार मानक SPFieldLookup, और शीर्षक जो भी दोनों आईडी स्टोर से अपने व्यवहार विरासत और एक इसी SPFieldLookupValueCollection है। आईडी (कमजोर) संदर्भित अखंडता का समर्थन करता है जबकि कैश किए गए मान त्वरित प्रश्नों के लिए अनुमति देता है।

0

यह मेरे लिए काम करता इवेंट डेटा .: से निकालने के लिए एक उपयोगकर्ता क्षेत्र से एक SPSuser हो रही यह एक ही बात होना चाहिए

private SPUser getGroup(SPListItem item, string fieldName) 
     { 
      string fieldValue = item[fieldName] as string; 
      if (string.IsNullOrEmpty(fieldValue)) return null; 
      int id = int.Parse(fieldValue.Split(';')[0]); 
      SPUser user = item.Web.AllUsers.GetByID(id); 
      return user; 
     } 

पूर्णांक स्थानीय SPWebs के उपयोगकर्ता में उपयोगकर्ता की आईडी को संदर्भित करता है डेटाबेस। हालांकि, यह सिंक नहीं किया गया है, इसलिए उपयोगकर्ता आइटम डेटाबेस से हटा दिया गया है क्योंकि सूची आइटम सहेजा गया था।

+0

धन्यवाद। मैं मूल रूप से इस मार्ग को ले गया, लेकिन जोड़ा झुर्रियों के साथ कि क्षेत्र के मूल्य में संभावित रूप से कई उपयोगकर्ता हैं। एक अजीब चीज यह है कि मेरे क्षेत्र में एक उपयोगकर्ता के साथ, ";" - सीमित मूल्य के बजाय क्षेत्र में केवल संख्यात्मक मान है। अभी भी काम करता प्रतीत होता है। –

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

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