वर्ग पुरालेख: SharePoint विकास

साधारण स्पष्टीकरण: “मान अपेक्षित श्रेणी के भीतर गिर नहीं करता है।”

अद्यतन: एक गुमनाम पोस्टर आंतरिक नामों के बारे में एक महान टिप्पणी छोड़ दिया. इसे पढ़ने के लिए सुनिश्चित हो.

जब घटना रिसीवर और अन्य कोड है कि SharePoint ऑब्जेक्ट मॉडल के माध्यम से सूची आइटम्स का संदर्भ के साथ कार्य करना, मैं अक्सर गलतियों कि रनटाइम पर यह त्रुटि उत्पन्न कर:

त्रुटि लोड हो रहा है और घटना रिसीवर Conchango.xyzzyEventReceiver xyzzy में चल रहा, संस्करण = 1.0.0.0, संस्कृति तटस्थ =, PublicKeyToken = 0dc50a750396c3ac. अतिरिक्त जानकारी के नीचे है. : मान अपेक्षित श्रेणी के भीतर गिर नहीं करता है.

मुझे लगता है कि यह एक काफी जेनेरिक त्रुटि है कि संभवतः कई अलग अलग तरीके के कारण होता है. हालांकि, एक सरल व्याख्या है कि मैं एक फ़ील्ड ग़लत ढंग से संदर्भित कर रहा हूँ. यदि फ़ील्ड का नाम है "नियत दिनांक", मैं इस तरह एक घटना रिसीवर में संदर्भ चाहिए:

गुण।ListItem["नियत दिनांक"]

जब मैं misspell या गलत मामला जब संदर्भित फ़ील्ड का उपयोग करें, SharePoint उत्पन्न करता है इसके बाद के संस्करण रनटाइम त्रुटि उल्लेख किया. उदाहरण के लिए, यह गलत है:

गुण।ListItem["नियत दिनांक"]

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें.

Technorati टैग:

त्वरित & आसान: एक फ़ोल्डर बनाएँ और कोई सामग्री प्रकार असाइन करें (या, अपने KPIs है और उन्हें भी खा)

एक KPI समस्या के आसपास काम करने के लिए मैं यहाँ के बारे में लिखा था, मैं कुछ परीक्षण किया है और कि वे दस्तावेजों के खिलाफ काम करते या सूची आइटम में उसी तरह मेटा डेटा के साथ फ़ोल्डर्स के खिलाफ उस KPI के काम की खोज. मैं इसे बाहर एक नया सामग्री प्रकार बनाने के द्वारा फ़ोल्डर सामग्री प्रकार पर आधारित और फिर कुछ फ़ील्ड जोड़ा साबित कर दिया. मैं कुछ संकेतकों बनाया और खुद के लिए कि KPIs के रूप में की उम्मीद काम साबित कर दिया. इस समाचार का स्वागत था. यह सही नहीं है, ड्रिल-डाउन आप से मिल KPI फ़ोल्डर्स के खिलाफ बिल्कुल नहीं तुम क्या चाहते है क्योंकि. इस क्योंकि मेरे मामले में बहुत ज्यादा एक खामी नहीं है 1) अंत उपयोगकर्ताओं को किसी भी बेहतर नहीं पता और 2) ड्रिल-डाउन एक फ़ोल्डर के लिए चला जाता है. वे फ़ोल्डर नाम क्लिक करें और वे आइटम पर हैं. यह एक के बजाय दो क्लिकों है, जो दुनिया का अंत नहीं है.

यह अच्छी तरह से काम कर रहा था के साथ इकट्ठा हुआ. मैं एक फ़ोल्डर के लिए हर दस्तावेज़ अपलोड हो जाता है कि पैदा कर रहा हूँ. इस एक घटना रिसीवर के माध्यम से किया जाता है. एक परिणाम के रूप में, यह केक का एक टुकड़ा रखने के लिए है पैरेंट फ़ोल्डर स्वयं नलसाजी पहले से ही जगह में है के बाद से फ़ाइल से KPI चालित मेटा डेटा के साथ सिंक में मेटा डेटा. This allows me to have my KPI’s and eat them too 🙂

मैं घटना रिसीवर फ़ोल्डर जोड़ें और तब मेरी कस्टम KPI दोस्ताना सामग्री प्रकार के लिए इस नए फ़ोल्डर की सामग्री प्रकार निर्धारित करने के लिए संशोधित. इस बिट कोड की चाल थी:

 SPFolderCollection srcFolders = targetWeb.GetFolder("दस्तावेज़").सबफ़ोल्डर;
  SPFolder addedFolder = srcFolders.Add(गुण।ListItem.ID.ToString());
  SPContentTypeId kpiCT = नई SPContentTypeId("0x0120002A666CAA9176DC4AA8CBAA9DC6B4039F");
  addedFolder.Item["सामग्री प्रकार ID"] kpiCT =;
  addedFolder.Item.Update();

वास्तविक सामग्री प्रकार ID का पता लगाएँ करने के लिए, मैं उस सामग्री प्रकार के साइट सेटिंग्स के द्वारा तक पहुँचा और प्रतिलिपि/यह के रूप में दिखाए गए यूआरएल से चिपकाया:

छवि

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें!

Technorati टैग: ,

त्वरित और आसान: एक SPListItem के SPFolder प्राप्त एक घटना रिसीवर में

मैं यह मानता हूँ नफरत, लेकिन मैं इस के साथ एक सभी संघर्ष दिवस. मेरा घटना रिसीवर की जरूरत है इसकी पैरेंट फ़ोल्डर के एक फ़ील्ड को अद्यतन करने के लिए. यह थोड़ा सा दिखाता है कि कैसे यह करने के लिए:

निजी शून्य UpdateParentFolder(SPItemEventProperties गुण)
{

SPFolder thisItemFolder = गुण।ListItem.File.ParentFolder;
thisItemFolder.Item["ZZ अनुमोदन स्थिति"] = "अच्छी खबर, हर कोई!";
thisItemFolder.Item.Update();


} // UpdateParentFolder

इस मामले में, मैं एक दस्तावेज़ लाइब्रेरी के साथ काम कर रहा हूँ और गुण एक ItemAdded घटना से आ रहे हैं.

चाल है कि आप सीधे आइटम से ही SPFolder आइटम की प्राप्त नहीं कर सकता (अर्थात. गुण।ListItem.Folder नल है). इसके बजाय, सूची आइटम की संबंधित फाइल के लिए जाना और फ़ाइल के फ़ोल्डर हो जाओ.

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें!

Technorati टैग:

अभी तक एक और घटना रिसीवर चाल डीबग करें

मुझे यकीन है कि मैं इस के साथ आने के लिए पहले व्यक्ति नहीं हूँ. हालांकि, मैं किसी को भी इस तरह की एक चाल के बाद से मैं पिछले साल जुलाई में समुदाय के लिए करीब ध्यान दे शुरू प्रकाशित गौर नहीं किया. तो, मैंने सोचा था कि मैं इसे इस त्वरित और आसान डीबग टिप के बाद होगा.

मैं इस त्रुटि में उत्पन्न करने के लिए शुरू कर दिया एक घटना रिसीवर पर काम कर रहा हूँ 12 हाइव:

त्रुटि लोड हो रहा है और घटना रिसीवर Conchango.xyzzyEventReceiver xyzzy में चल रहा, संस्करण = 1.0.0.0, संस्कृति तटस्थ =, PublicKeyToken = blahbalhbalh. अतिरिक्त जानकारी के नीचे है. : किसी ऑब्जेक्ट की आवृत्ति के लिए सेट नहीं ऑब्जेक्ट संदर्भ.

मैं नहीं जानता था क्योंकि मैं मेरे कोड/तैनाती/परीक्षण चक्रों में से एक में भी कई बातें किया था जहाँ मैं इस बग पेश किया था.

मैंने कोशिश की इस समाधान मेरी pdb कि SharePoint में उम्मीद के साथ वहाँ पाने के लिए 12 हाइव स्टैक ट्रेस दिखा होता, पर कोई भाग्य. मैं नहीं जानता कि यदि यह संभव है और यदि कोई करता है, कृपया मुझे पता है 🙂

मैं जानता हूँ कि यह संभव करने के लिए है अपनी खुद लॉग संदेशों को लिखने 12 हाइव. सच कहूँ तो, मैं कुछ करना चाहता था एक छोटे से कम डरावना और जल्दी लागू करने के लिए.

यह हुआ मुझे करने के लिए कम से कम कुछ बुनियादी ट्रेस जानकारी को पकड़ने और पुनः इस तरह सामान्य अपवाद फेंक द्वारा कि मैं मिल सकता है:

  प्रयास करें {
    UpdateEditionDate(गुण);
  }
  पकड़ो (अपवाद ई)
  {
    फेंक नई अपवाद("Dispatcher, UpdateEditionDate(): अपवाद: [" + e.ToString() + "].");
  }

इस दिखाया के में 12 thusly हाइव:

त्रुटि लोड हो रहा है और घटना रिसीवर Conchango.xyzzyEventReceiver xyzzy में चल रहा, संस्करण = 1.0.0.0, संस्कृति तटस्थ =, PublicKeyToken = blahblahblah. अतिरिक्त जानकारी के नीचे है. : Dispatcher, UpdateEditionDate(): अपवाद: [System.NullReferenceException: किसी ऑब्जेक्ट की आवृत्ति के लिए सेट नहीं ऑब्जेक्ट संदर्भ. पर Conchango.xyzzyManagementEventReceiver.UpdateEditionDate(SPItemEventProperties गुण) पर Conchango.xyzzyManagementEventReceiver.Dispatcher(SPItemEventProperties गुण, स्ट्रिंग eventDescription)].

कि मुझे मैं उस विशेष समस्या नीचे ट्रैक करने के लिए आवश्यक सभी विस्तार दिया था और मुझे उम्मीद है यह एक बहुत आगे जा रहा का उपयोग करने के लिए.

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें!

समाधान: SPQuery फ़ोल्डर्स खोज नहीं करती.

पिछले हफ्ते मैं को लागू करने था एक "विकसित हो" एक ग्राहक है कि BDC और SPQuery का उपयोग करता है और कुछ कठिनाई SPQuery युक्त फ़ोल्डर्स किसी दस्तावेज़ लायब्रेरी के खिलाफ का उपयोग कर में भाग के लिए समाधान. नीचे पंक्ति: "रीकर्सिव असाइन करें" क्वेरी से विशेषता देखें करने के लिए.

मेरी परिदृश्य:

  • सोमवार को, मैं एक दस्तावेज़ अपलोड करें और कुछ मेटा डेटा की आपूर्ति.
  • अगले हफ्ते, मैं एक नया दस्तावेज़ अपलोड करें. इस नए दस्तावेज़ का मेटा डेटा का ज्यादा मैं सोमवार को अपलोड किया गया दस्तावेज़ पर आधारित है (जो हम कहते हैं "मुख्य दस्तावेज़").
  • हम एक वेब सेवा मुखौटे कि सूची के लिए कोई BDC के अनुकूल इंटरफेस प्रदान करता है जिससे कि उपयोगकर्ताओं को आसानी से एक शीर्षक खोज के माध्यम से उस सोमवार दस्तावेज़ का पता लगाने कर सकते हैं बनाया है.
  • कोई BDC डेटा स्तंभ एक उपयोगकर्ता के अनुकूल इंटरफेस प्रदान करता है. (यह एक अधिक दोस्ताना लुकअप स्तंभ के लिए BDC का उपयोग करने पर मेरे प्रयास का हिस्सा है).

अंतिम BDC मुखौटे सेवा लुकअप करने के लिए इस तरह की एक क्वेरी का उपयोग करता है:

 // U2U उपकरण इस CAML क्वेरी पैदा करने में सहायता करने के लिए प्रयुक्त.
      oQuery.Query =
        "<जहाँ>";

      अगर (titleFilter.Length > 0)
        oQuery.Query   =
          "  <और>";

      oQuery.Query   =
        "    <और>" +
        "      <Geq>" +
        "        <FieldRef नाम =  "DocumentId" />" +
        "        <मान प्रकार =  "Text">" + minId + "</मान>" +
        "      </Geq>" +
        "      <Leq>" +
        "        <FieldRef नाम =  "DocumentId" />" +
        "        <मान प्रकार =  "Text">" + maxId + "</मान>" +
        "      </Leq>" +
        "    </और>";

      अगर (titleFilter.Length > 0)
        oQuery.Query   =
          "    <होता है>" +
          "      <FieldRef नाम =  "Title" />" +
          "      <मान प्रकार =  "Text">" + titleFilter + "</मान>" +
          "    </होता है>" +
          "  </और>";
      oQuery.Query   =
        "</जहाँ>";

विकास के प्रारंभिक चरण के दौरान, यह बहुत अच्छा काम किया. हालांकि, हम कुछ समस्याओं को हल करने के लिए निर्देशिका में फ़ोल्डर्स की शुरुआत की और अचानक, मेरी BDC पिकर किसी भी परिणाम वापस नहीं होता. मैं इस तथ्य यह है कि SPQuery कोई भी परिणाम वापस कभी नहीं होगा के लिए नीचे ट्रैक किया. हम मुख्य रूप से एकाधिक फ़ाइलें अपलोड किया जा करने के लिए एक ही नाम के साथ, लेकिन अलग अलग मेटा डेटा के साथ की अनुमति दें करने के लिए फ़ोल्डर्स इस्तेमाल किया. जब फ़ाइल अपलोड की गई है, हम सूची आइटम की आईडी पर आधारित एक फ़ोल्डर बनाएँ और तब फ़ाइल को वहाँ ले जाएँ (मैं उस के बारे में लिखा था यहाँ; हम लिया है मिश्रित परिणाम इस दृष्टिकोण के साथ, लेकिन पूरे पर, यह अच्छी तरह से काम कर रहा है). उपयोगकर्ता फ़ोल्डर्स के बारे में और वास्तव में परवाह नहीं, सच में नहीं समझते हैं कि वहाँ किसी भी फ़ोल्डर्स. हम कॉन्फ़िगर करने सभी आइटम्स के संबंध के बिना फ़ोल्डर्स दिखाने के लिए लायब्रेरी पर बार देखे गए.

मैं इस समस्या तकनीकी कार्यान्वयन विकसित किया गया है और हल के रूप में दो बार इसे दूसरे तरीके से हर बार मारा. पहली बार, मैं क्वेरी में संग्रहित करता है ऑपरेटर का उपयोग कर नहीं था. बिना एक संग्रहित करता ऑपरेटर, मैं SPQuery contructor पर दृश्य निर्दिष्ट करके समस्या को हल करने में सक्षम था. डिफ़ॉल्ट निर्माता का उपयोग करने के बजाय:

SPList oList वेब =।सूचियाँ["दस्तावेज़"];

SPQuery oQuery = नई SPQuery();

मैं बजाय एक निर्माता एक दृश्य निर्दिष्ट करते थे:

SPList oList वेब =।सूचियाँ["दस्तावेज़"];

SPQuery oQuery = नई SPQuery(oList.Views["सभी दस्तावेज"]);

कि समस्या हल कर दी और मैं अपने परिणाम प्राप्त करने के लिए शुरू कर दिया.

मैं तो मिश्रण में संग्रहित करता है ऑपरेटर जोड़ दिया और इसे फिर से तोड़ दिया. यह जाता है कि बाहर इसमें ऑपरेटर, जहाँ तक मैं बता सकता हूँ, दृश्य के साथ एक ही तरह के रूप में काम नहीं करता है एक सरल GEQ / LEQ ऑपरेटर्स. मैं कुछ खोज किया था और सीखा है कि क्वेरी ViewAttributes "पुनरावर्ती करने के लिए" सेट किया जाना चाहिए, के रूप में:

oQuery.ViewAttributes = "गुंजाइश = "Recursive"";

कि संग्रहित करता है के लिए समस्या का हल. वास्तव में, यह मेरे मूल खोज समस्या भी हल हो और अगर मैं रीकर्सिव निर्दिष्ट किया था पहली बार विशेषता, मैं इस मुद्दे में फिर से चला होगा नहीं.

तथ्य यह है कि एक दृश्य-आधारित SPQuery कुछ ऑपरेटरों के लिए काम करता है (GEQ/LEQ) और दूसरों को नहीं (होता है), तथ्य यह है कि KPIs सब पर मुझे विश्वास है कि SPQuery कुछ orthogonality के मुद्दों के लिए दस्तावेज़ लायब्रेरीज़ फ़ोल्डर-युक्त सुराग के साथ काम करने के लिए नहीं लग रहे हो के साथ युग्मित.

विशेष धन्यवाद:

  • में अच्छे लोगों U2U और अपनी क्वेरी उपकरण.
  • माइकल विलियम ब्लेक ग्रेट "कर के सीखना" ब्लॉग पोस्ट, टिप्पणियाँ और प्रतिक्रियाएं.

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें!

काई KPI बग? सूची सूचक को दस्तावेज़ लायब्रेरी फ़ोल्डर के साथ बंधे

अद्यतन 02/29/08: मैं एक फ़ोल्डर बना कर और तब मेटा डेटा मैं KPIs के लिए की जरूरत है जो उस फ़ोल्डर के लिए कोई सामग्री प्रकार असाइन करना इस समस्या का हल. मैं कि एक छोटे और अधिक विस्तार में यहाँ वर्णित.

हम एक तकनीकी समाधान है जहाँ उपयोगकर्ताओं को किसी दस्तावेज़ लायब्रेरी पर दस्तावेज़ अपलोड लागू है. एक घटना रिसीवर एक निर्देशिका बनाता है और उस निर्देशिका के लिए फ़ाइल ले जाता है (क्या मैं के बारे में लिखा करने के लिए इसी तरह की एक तकनीक का उपयोग करना यहाँ). हम सफलतापूर्वक संभावित मुद्दों कि अपलोड की गई फ़ाइलों का नाम बदलें घटना रिसीवर द्वारा वजह से आसपास navigated है (क्योंकि मुख्य रूप से उपयोगकर्ताओं को कभी नहीं उनके दस्तावेज़ "नई पर क्लिक करके प्रारंभ करें" लेकिन इसके बजाय डॉक्स स्थानीय रूप से बनाएँ और फिर उन्हें अपलोड करें).

इन दस्तावेज़ों के लिए मेटा डेटा शामिल है एक हाँ/नहीं साइट स्तंभ "तत्काल बुलाया" और एक अन्य साइट स्तंभ कहा जाता है "स्थिति". हम की जरूरत है "तत्काल का प्रतिशत पता चलता है कि एक व्यापार की आवश्यकता को पूरा करने के लिए" दस्तावेज़ जिनकी स्थिति "लंबित" है.

यह आमतौर पर करने के लिए सरल है और मैं कुछ बहुत बहुत SharePoint बीगल पर इस तरह का वर्णन यदि आप रुचि रखते हैं स्क्रीन शॉट्स के बहुत सारे के साथ.

संक्षेप में, मैं निम्नलिखित किया:

  • डॉक्टर पुस्तकालय "लंबित" नामक पर कोई दृश्य बनाना.
  • दृश्य फ़ोल्डर संरचना को अनदेखा करने के लिए कॉन्फ़िगर करें.
  • कोई KPI सूची बनाना.
  • कहते हैं डॉक्टर उदारीकरण और कि करने के लिए सूची में किसी सूचक "लंबित बनाएँ" दृश्य.

यह सिर्फ काम नहीं करता. KPI मेरा लक्ष्य से पता चलता है (जैसे. पाँच जरूरी दस्तावेज) लेकिन हमेशा जरूरी दस्तावेजों की वास्तविक संख्या शून्य के रूप में दिखाता है. विडंबना यह है कि, यदि आप विवरण के लिए नीचे ड्रिल, यह सूची में पाँच जरूरी दस्तावेजों से पता चलता है. मैं दो दस्तावेजों के साथ एक बहुत ही सरल परिदृश्य बनाया, एक फ़ोल्डर और एक में एक नहीं. यहाँ स्क्रीन शॉट है:

छवि

ऊपर स्क्रीन शॉट स्पष्ट रूप से दिखाता है कि वहाँ रहे हैं दो दस्तावेज़ों में देखें, लेकिन 'मूल्य" एक है. "CamlSchema" रिक्त दस्तावेज़ के साथ Id रूट फ़ोल्डर में है और अन्य "84" नाम का एक फ़ोल्डर में है.

यह मुझे करने के लिए कि प्रकट होता, भले ही आप एक दृश्य निर्दिष्ट करें, KPI का सम्मान नहीं करता "दिखाएँ सभी आइटम बिना फ़ोल्डर्स" स्थापित करने और इसके बजाय, खुद को रूट फ़ोल्डर में confines.

अगर मैं गलत हूँ, कृपया मुझे एक पंक्ति ड्रॉप या एक टिप्पणी छोड़ दो.

</अंत>

मेरे ब्लॉग के लिए सदस्यता लें!

Technorati टैग:

समस्या का समाधान: “FileNotFoundException” मेरी सुविधा रिसीवर के साथ.

मैं एक विशेषता है कि कुछ घटना रिसीवर एक विशिष्ट सूची इंस्टेंस के लिए जोड़ होगा पिछले सप्ताह पर काम कर रहा था. (मैं उस सूची यहाँ रिसीवर के बारे में थोड़ा blogged).

कमांड लाइन का उपयोग करना, मैं के साथ कोई त्रुटि इस सुविधा स्थापित कर सका (लेकिन नीचे छुपे हुए त्रुटि के लिए देखें). जब मैं साइट पर सुविधा को परिनियोजित करने के लिए करने की कोशिश की, एक "FileNotFoundException की काई की शिकायत" त्रुटि. इस ब्लॉग प्रविष्टि बताता है कि कैसे मैं इसे हल.

इस काई मेरे वेब ब्राउज़र में पता चला है कि त्रुटि है:

सुविधा ' b2cb42e3-4f0a-4380-aaba-1ef9cd526f20’ नहीं स्थापित किया जा सकता है क्योंकि घटना रिसीवर विधानसभा "xyzzyFeatureReceiver_0 की लोडिंग" में विफल रहा: System.IO.FileNotFoundException: फ़ाइल या असेंबली लोड नहीं कर सका ' xyzzyFeatureReceiver_0’ या इसके निर्भरताएँ में से एक. सिस्टम निर्दिष्ट फ़ाइल नहीं ढूँढ सकता.
फ़ाइल का नाम: ' xyzzyFeatureReceiver_0’
पर System.Reflection.Assembly.nLoad(AssemblyName फ़ाइल का नाम, स्ट्रिंग codeBase, प्रमाण assemblySecurity, विधानसभा locationHint, StackCrawlMark& stackMark, बूलियन throwOnFileNotFound, बूलियन forIntrospection)
पर System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, प्रमाण assemblySecurity, StackCrawlMark& stackMark, बूलियन forIntrospection)
पर System.Reflection.Assembly.InternalLoad(स्ट्रिंग assemblyString, प्रमाण assemblySecurity, StackCrawlMark& stackMark, बूलियन forIntrospection)
पर System.Reflection.Assembly.Load(स्ट्रिंग assemblyString)
पर Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: असेंबली बाइंडिंग लॉगिंग चालू है रवाना.
विधानसभा बाँध विफलता लॉगिंग को सक्षम करने के लिए, रजिस्ट्री मान को सेट करें [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) करने के लिए 1.
नोट: वहाँ कुछ प्रदर्शन विधानसभा बाँध विफलता लॉगिंग के साथ जुड़े जुर्माना है.
इस सुविधा को बंद करने के लिए, रजिस्ट्री मान निकालें [HKLMSoftwareMicrosoftFusion!EnableLog].

Windows SharePoint सेवाओं के साथ समस्याओं का निवारण.

मुझे पता कैसे जान-बूझकर उस त्रुटि का कारण: असेंबली GAC में स्थापित न करें. लेकिन, इसे GAC में था. मैं आम तौर पर असेंबलियों GAC में उन्हें में सी खींच कर स्थापित करें:\windowsassembly फ़ोल्डर windows explorer का उपयोग कर. मैं कभी नहीं महसूस किया है 100% आराम से कर रही है कि क्योंकि मैं हमेशा सोचा कि gacutil एक कारण के लिए अस्तित्व में … इसलिए मैंने कोशिश की है कि. यह कोई फर्क नहीं.

मैं Internets की खोज की और इस पोस्ट पाया: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1

पोस्टर कोड का एक ही जड़ सा प्रयोग किया हुआ (इस सूची से अंदर WSS किताब से) इतना था कि एक उम्मीद है साइन इन करें. हालांकि, विधानसभा के साथ सजाने का सुझाव एक [विधानसभा: ] निर्देशक भाव मुझे नहीं बना था. मैं यह वैसे भी करने की कोशिश की और मैं सही था. यह कोई फर्क नहीं.

तब मैंने देखा कि मेरे वर्ग परिभाषा सार्वजनिक नहीं था. मैं इसे सार्वजनिक कर दिया और जो कोई अंतर नहीं किया.

अगले, मैं "विधानसभा बाँध विफलता लॉग को सक्षम करने की मुसीबत के लिए चला गया" (उपयोगी और सटीक निर्देशों का पालन प्रदान की) और यह वह जगह है जहाँ बातें दिलचस्प मिल शुरू कर दिया. उस लॉग मुझे पता चलता है कि रनटाइम हर जगह मेरा विधानसभा के लिए उस सर्वर पर खोज रहा है. यह भी इसके लिए मेरी दवा कैबिनेट में खोज किया जा करने के लिए प्रकट होता है. लेकिन … यह इसके लिए GAC में खोज नहीं होगा.

मैं मेरे सर्दियों जैकेट पर डाल दिया और Internets खोज फिर से जाने और लगता कि किसी को भी इस समस्या थी गया है. कुछ भी नहीं है में बंद लंबी चर्चा कि पोस्टिंग में पीटर्स और मैं एक समाधान नहीं ढूँढ सकता.

मैं मेरा विधानसभा लॉग का दावा है कि यह खोज रहा है और मैं एक छोटे से अधिक प्रगति कर स्थानों में से एक में ले जाएँ. मैं इस सुविधा को सक्रिय करने का प्रयास करते समय मैं ब्राउज़र में एक नया त्रुटि के साथ पुरस्कृत कर रहा हूँ:

"XyzzyFeatureReceiver_0" विधानसभा से फ़ीचर पानेवाला ऑब्जेक्ट बनाने में विफल रहा, "Conchango.xyzzyFeatureReceiver टाइप" सुविधा b2cb42e3-4f0a-4380-aaba-1ef9cd526f20 के लिए: System.ArgumentNullException: मान रिक्त नहीं हो सकता.
पैरामीटर नाम: प्रकार
पर System.Activator.CreateInstance(प्रकार प्रकार, बूलियन nonPublic)
पर System.Activator.CreateInstance(प्रकार प्रकार)
पर Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()

Windows SharePoint सेवाओं के साथ समस्याओं का निवारण.

Internets के लिए एक अंतिम यात्रा के लिए समय!

मैं इस समय पता लगाना, जाहिर है पर्याप्त, मुद्दों कि काई इस त्रुटि क्योंकि असेंबली GAC में नहीं है.

मैं कुछ इस से बाहर सकारात्मक हो और मैं बना लिया है कि एक छोटे गर्व महसूस करने की कोशिश करना चाहते हैं MSIL विधानसभाओं का भगोड़ा, लेकिन यह काम नहीं कर रहा है. मैं सिर्फ सादा नाराज़ हूँ. मैं अपने आप को गुनगुन "चिकन या अंडा ढूँढना" मेरी सांस के तहत.

मैं अंत में बाज़ी करने का फैसला. मैं एक पूरी तरह से नया प्रोजेक्ट बनाएँ और इस नई परियोजना के लिए incredible-cloaked-from-the-GAC-assembly से अधिक गैर-कार्य परियोजना से कोड कॉपी/पेस्ट. (मैं एक बिल्ड असेंबली GAC में स्थापित तो बंधन से छुपाएँ"की तरह कुछ नामक ध्वज के लिए देखो" लेकिन एक मिल नहीं कर सकता).

मैं इस सुविधा को स्थापित और यह सक्रिय और … यह काम करता है! तो, उस सब के बाद, मैं मूल रूप से किया था ' रिबूट’ मेरी परियोजना. यह एक और कारण क्यों मैं कंप्यूटर से नफरत है.

मैं इस से उपयोगी कुछ सीख किया था. मैं सुविधाओं के सभी दिन लंबे समय stsadm आदेश पंक्ति का उपयोग किया गया था स्थापित करने और उपयोग कर रहा है "-बल" आदत से बाहर विकल्प. किसी कारण के लिए, मैं का उपयोग नहीं किया था जब मैं इस नई परियोजना स्थापित - बल विकल्प. इस बार, मैं वास्तव में किया था, सही मायने में इस नई परियोजना की असेंबली में GAC की प्रतिलिपि करने के लिए भूल जाते हैं. एक परिणाम के रूप में, मैं उस "FielNotFoundException प्राप्त" त्रुटि. इस बार, मेरे पास यह stsadm से, जब मैं वेब ब्राउज़र के माध्यम से इस सुविधा को सक्रिय करने की कोशिश की नहीं. तो, -बल वास्तव में दो भूमिकाएं निभाता. यह एक मौजूदा सुविधा को पुन: स्थापित करने के लिए आप की अनुमति देता है. यह भी कि रनटाइम पर काम नहीं कर सकते त्रुटि दबा द्वारा एक छोटी गाड़ी सुविधा को स्थापित करने के लिए आपको अनुमति देता है. यह शायद कहीं मदद में ज्यादा के रूप में कहते हैं, लेकिन मैंने कभी नहीं देखा है यह.

</अंत>

त्वरित & आसान: अपलोड की गई एक घटना रिसीवर के माध्यम से SharePoint ऑब्जेक्ट मॉडल का उपयोग कर फ़ाइल का नाम बदलें

अद्यतन: यह काम करता है, लेकिन वहाँ जो टिप्पणी में वर्णित हैं महत्वपूर्ण सीमाएं हैं. यह अभी भी कुछ cirumstances में उपयोगी हो सकता है.

अद्यतन 2: मेरे वर्तमान परियोजना में, उपयोगकर्ताओं को हमेशा दस्तावेज़ अपलोड करें. एक परिणाम के रूप में, मैं कहाँ MS वर्ड चल रहा है और सोचता है कि फ़ाइल पर यह नाम दिया गया था एक समस्या में चला नहीं. मैं एक समस्या में चला था, "फ़ाइल किसी और द्वारा संशोधित किया गया" और यह एक सरल सिकंदरा प्रकार ध्वज के माध्यम से हल. एक मेटा डेटा फ़ील्ड के लिए कुछ और उसके डिफ़ॉल्ट मान से बदलने के लिए उपयोगकर्ताओं की आवश्यकता. Itemupdated() रिसीवर वास्तव में नाम बदलें प्रदर्शन कर रहा से पहले और उसके बाद से वहाँ कोई मान्य मान के लिए दिखता है, मैं किसी भी समस्याओं का नहीं था. आपका लाभ भिन्न हो सकते हैं.

मैं एक ग्राहक की आवश्यकता के अनुरूप के साथ एक विशेष सम्मेलन नामकरण किसी विशिष्ट दस्तावेज़ लायब्रेरी के लिए अपलोड की गई फ़ाइलों का नाम बदलने के लिए है. एपीआई एक "पुनर्नामित नहीं प्रदान करता है()" विधि. इसके बजाय, हम का उपयोग करें "MoveTo(…)". यहाँ इस को पूरा करने के लिए कोड की कम से कम थोड़ी है:

 सार्वजनिक ओवरराइड करें शून्य ItemAdded(SPItemEventProperties गुण)
        {
            SPFile f = गुण।ListItem.File;

            f.MoveTo(गुण।ListItem.ParentList.RootFolder.Url + "/xyzzy.doc");
            f.Update();

        }

केवल मुश्किल सा है "गुण। ListItem.ParentList.RootFolder.Url". MoveTo() विधि किसी URL की आवश्यकता है. कि स्ट्रिंग अंक ले मुझे मेरे वर्तमान दस्तावेज़ लायब्रेरी के रूट फ़ोल्डर में मसला हुआ. यह मुझे मेरी घटना रिसीवर में किसी भी हार्ड कोडिंग से बचने के लिए अनुमति देता है.

यह एक अधिक उपयोगी संस्करण है कि एक ही बात करता है, लेकिन "शीर्षक के लिए" फ़ाइल का नाम असाइन करता है:

 सार्वजनिक ओवरराइड करें शून्य ItemAdded(SPItemEventProperties गुण)
        {
            DisableEventFiring();

            // इस आइटम का शीर्षक स्वयं फ़ाइल के नाम को असाइन करें.
 // नोट: हम स्वयं फ़ाइल संशोधित करने से पहले इस असाइनमेंट जगह ले लेना चाहिए.
 // अद्यतन बुला() पर SPFile गुण में अमान्य करने लगता है
 // कुछ भाव.  "शीर्षक के लिए अद्यतन" जब तक कि बदलने में विफल रहा (और अद्यतन() कॉल)
 // परिवर्तन के सामने फ़ाइल नाम के लिए चले गए थे.
            गुण।ListItem["शीर्षक"] गुण =।ListItem.File.Name;

            गुण।ListItem.Update();

            SPFile f = गुण।ListItem.File;

            // फ़ाइल का एक्सटेंशन मिल.  हमें जरूरत है कि बाद में.
 स्ट्रिंग spfileExt = नई FileInfo(f.Name).एक्सटेंशन;

            // सूची आइटम ID करने के लिए फ़ाइल नाम बदलें और रखने के लिए फ़ाइल एक्सटेंशन का उपयोग करें
 // यह अक्षुण्ण का वह हिस्सा.
            f.MoveTo(गुण।ListItem.ParentList.RootFolder.Url +
                "/" + गुण।ListItem["आईडी"] + spfileExt);

            // हटो संकल्प लें.
            f.Update();

            EnableEventFiring();
        }

त्वरित टिप: सामग्री क्वेरी वेब भाग, लुकअप स्तंभ मान और XSL

मैं "रियल एस्टेट स्थान" नामक किसी सामग्री प्रकार में किसी स्तंभ का नाम है.

उस स्तंभ का प्रकार "लुकअप" है.

मैं संशोधित किया है <CommonViewFields> और ItemStyle.xsl स्तंभ को दिखाने के लिए.

एक सरल <xsl:मान का चयन करें =…> वापस आर्डिनल स्थिति डेटा शामिल हैं एक आंतरिक मूल्य देता है, रूप में इस तरह:

1;#मियामी

मानव के अनुकूल मूल्य प्राप्त करने के लिए, xsl-substring-बाद का उपयोग करें, के रूप में दिखाया गया:

<xsl:valuexsl का चयन करें "substring बाद =(@Real_x005F_x0020_Estate_x005F_x0020_Location,’#’)"></xsl:मान का>

जब भी आप XSL रूपांतरण में लुकअप मान के साथ काम कर रहे हैं और मानव के अनुकूल मूल्य प्राप्त करने की जरूरत इस तकनीक का उपयोग करें.

<अंत />

Technorati टैग: , ,

त्वरित और आसान: कोई साइट स्तंभ के आंतरिक स्तंभ नाम का निर्धारण

अद्यतन: जेरेमी Thake इस बारे में blogged है और ऊपर से कुछ डाल किसी कंसोल अनुप्रयोग के लिए कोड पता चलता है कि आंतरिक नाम.

मैं एक सामग्री क्वेरी वेब पार्ट के किसी कार्य से एक नियत दिनांक को प्रदर्शित करने के लिए पाने के लिए कोशिश कर रहा था और क्योंकि स्क्रीन लेबल "नियत दिनांक" है, मैं मान लिया है कि स्तंभ नाम में उपयोग करने के लिए <CommonViewFields> "Due_x0020_Date" है.

गलत!

वास्तविक स्तंभ नाम के इस मामले में "DueDate" था.

मैं यह कैसे पता चला? मैं पुनः हीदर पढ़ें सुलैमान ब्लॉग प्रविष्टि को संशोधित करने के CQWP पर डेटा के अतिरिक्त स्तंभों को दिखाने के लिए. वह इस प्रक्रिया के चरण में वर्णन #13. यह ट्रस्ट. यह सही है. कम से कम, यह मेरे लिए सही था. मैं यह एक बहुत लंबे समय तक नाम के साथ किसी अन्य स्तंभ के लिए पहली बार में विश्वास नहीं किया.

मैं कहना है कि "यह ट्रस्ट" क्योंकि मैं यह विश्वास नहीं किया और शायद व्यर्थ दो घंटे एक दीवार के खिलाफ मेरे सिर butting के पास. मैं "DueDate का समाधान करने के बाद" नाम, मैं किसी अन्य फ़ील्ड में नहीं जोड़ चाहता था <CommonViewFields>. सोलोमन तकनीक का उपयोग करना, मैं एक कॉलम का नाम "XYZ_x0020_Project_x0020_Due_x00" की तरह हो रही थी.

मैं खुद के लिए सोचा, कि स्पष्ट रूप से एक छोटे रूप का नाम है. मैं आगे बढ़ो और संयुक्त राष्ट्र छोटा कर दिया गया था यह कोई सफलता के साथ. मैं अंत में प्रतीत होता छोटे रूप का नाम इस्तेमाल किया और यह काम किया.

बोनस टिप: जब मैं CQWP के साथ काम कर रहा था, अगर मैं एक बुरा आंतरिक नाम को जोड़ा गया <CommonViewFields>, CQWP मुझे बताना होगा कि क्वेरी कोई परिणाम नहीं लौटा था. लेकिन, अगर मैं एक डेटा प्रकार फ़ील्ड नाम को जोड़ा गया, यह एक परिणाम वापसी होगी. जब से मैं एक गैर विद्यमान फ़ील्ड संदर्भित किया गया डेटा जोड़ने प्रकार वास्तव में एक समस्या छिपा हुआ. मैं इसे जोड़ सकता है, लेकिन जब मैं इसका मान प्रदर्शित करने की कोशिश की, मैं हमेशा एक खाली मिलता था.

यह त्रुटि मुखौटा नहीं किया था:

<CommonViewFields>Due_x0020_Date;</CommonViewfields>

यह त्रुटि मुखौटा किया था:

<CommonViewFields>Due_x0020_Date,दिनांक समय;</CommonViewfields>

</अंत>