2013-05-30 6 views
7

से GetItem() को असंभव बनाता है मैं साइटकोर 6.6.0 (rev। 120918) का उपयोग कर रहा हूं। साइटकोर व्यवस्थापक पोर्टल से, मैं जाता हूं और प्रकाशित करता हूं प्रकाशित करने योग्य किसी आइटम का ध्वज (छवि देखें)।साइटकोर प्रकाशित करने योग्य ध्वज मास्टर डेटाबेस

enter image description here

इस के बाद, Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}") रिटर्न अशक्त

यदि मैं फिर से प्रकाशित करने योग्य ध्वज चालू करता हूं, तो GetItem() सही आइटम देता है। इस व्यवहार का कारण क्या है? प्रकाशित करने योग्य सेटिंग वेब डेटाबेस पर प्रकाशित करने की क्षमता को नियंत्रित करती है। यह मास्टर डेटाबेस में GetItem() एपीआई कॉल क्यों प्रभावित करता है?

+0

वर्क्स मेरी मशीन :) पर क्या वास्तव में क्या तुमने किया था और यह आइटम रिटर्न ... –

+0

आप "लाइव" मोड में चला रहे हैं? –

+0

इसे बाहर करने की कोशिश करने के लिए धन्यवाद! नहीं, मैं लाइव मोड का उपयोग नहीं कर रहा हूं। हम सार्वजनिक साइट पर प्रकाशित सामग्री देखने के लिए वेब डेटाबेस का उपयोग करते हैं। लेकिन कुछ विशेष परिदृश्यों में हम कुछ आइटम प्राप्त करने के लिए सीधे मास्टर डेटाबेस तक पहुंचते हैं। – ravinsp

उत्तर

2

अब मुझे पता चला है कि कारण साइटकोर पूर्वावलोकन सुविधा है। GetItem() के साथ मेरे पिछले चेक में मैंने एक साइटकोर व्यवस्थापक के रूप में पहले पूर्वावलोकन सुविधा का उपयोग किया है। उसके बाद मेरी पूरी सार्वजनिक साइट पूर्वावलोकन मोड में जाती है (थोड़ा कष्टप्रद) इसलिए आइटम पहुंच योग्य हो जाता है (यहां तक ​​कि मास्टर डेटाबेस एपीआई कॉल के माध्यम से)।

मैं क्या खोज की है से इन नियम हैं:

  • हैं आइटम नहीं है प्रकाशन योग्य और अगर वेबसाइट पूर्वावलोकन मोड में है, Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}") रिटर्न शून्य।

  • अप्रकाशित आइटम का भी पूर्वावलोकन नहीं किया जा सकता है। साइटकोर आइटम के लिए sublayout लोड भी प्रतीत नहीं होता है।

मैं एक अलग सवाल पूछने जा रहा हूं कि पूर्वावलोकन सुविधा उन वस्तुओं पर ऐसे प्रतिबंध क्यों रखती है जो प्रकाशित नहीं हैं।

+3

ऐसा इसलिए है कि यह एक उचित पूर्वावलोकन दिखा सकता है। पूर्वावलोकन मोड में यह अभी भी मास्टर डेटाबेस से काम कर रहा है, लेकिन यह उपयोगकर्ता को दिखा रहा है कि साइट डिलीवरी पर कैसा दिखता है - इसका पूर्वावलोकन - यही कारण है कि डेट नियंत्रण है, आप भविष्य में कुछ प्रकाशित करने योग्य बना सकते हैं और पूर्वावलोकन बदल सकते हैं यह सुनिश्चित करने की तारीख है कि यह सही तिथियों आदि पर दिखाई दे ...एक पूर्वावलोकन जो खाता प्रकाशित प्रतिबंधों को ध्यान में रखता नहीं है, बहुत उपयोगी नहीं होगा :) –

+0

धन्यवाद रिचर्ड। यह सार्थक है। दुर्भाग्य से हमारे कारण की मदद नहीं करता है। :-) – ravinsp

8

मुझे ऐसे मामलों के लिए एक रास्ता मिला है जहां आप वास्तव मेंContentDatabase (यानी मास्टर डेटाबेस) से पढ़ने की आवश्यकता है और आइटम प्रकाशित नहीं करना चाहते हैं। यह उपयोगकर्ता उत्पन्न सामग्री हो सकती है, उदाहरण के लिए। सक्रिय वाणिज्य में, हम इसमें इच्छा सूची जैसे सामग्री के साथ भाग लेते हैं जिन्हें हमेशा पूर्वावलोकन या गैर-चरण वाले वातावरण में मास्टर से पढ़ा जाता है, और मंचित वातावरण में वेब सेवा के माध्यम से उपयोग किया जाता है।

Sitecore.Context.Site.DisableFiltering से true पर सेट करके, अप्रकाशित वस्तुओं का फ़िल्टर अक्षम कर दिया जाएगा। मैंने एक साधारण IDisposable लागू किया है जो आपको वैकल्पिक स्थिति के साथ अस्थायी रूप से फ़िल्टरिंग अक्षम करने की अनुमति देता है।

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ActiveCommerce.SitecoreX 
{ 
    public class ItemFilteringDisabler : IDisposable 
    { 
     private readonly bool _disableCondition = true; 

     public ItemFilteringDisabler() 
     { 
      Sitecore.Context.Site.DisableFiltering = true; 
     } 

     public ItemFilteringDisabler(bool disableCondition) 
     { 
      _disableCondition = disableCondition; 
      if (_disableCondition) 
      { 
       Sitecore.Context.Site.DisableFiltering = true; 
      } 
     } 

     public void Dispose() 
     { 
      if (_disableCondition) 
      { 
       Sitecore.Context.Site.DisableFiltering = false; 
      } 
     } 
    } 
} 

उदाहरण उपयोग:

using (new ItemFilteringDisabler(!Sitecore.Context.PageMode.IsNormal)) 
{ 
    Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}"); 
} 
+0

ItemFilteringDisabler मेरी समस्या हल! –

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