2012-09-05 6 views
8

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

// grab the root content node from sitecore 
Item contentNode = dbSource.Items[ID.Parse("{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}")]; 

PublishOptions options = new PublishOptions(sourceDatabase, targetDatabase, PublishMode.Smart, lang, DateTime.Now); 

options.RootItem = contentNode; 

options.Deep = true; 

Publisher p = new Publisher(options); 

p.PublishAsync(); 

जब हम ऊपर कोड यह सामग्री नोड में सब कुछ, सभी सन्तान सहित प्रकाशित करता है, की परवाह किए बिना चलाने वर्कफ़्लो राज्य। ऐसा लगता है कि यह पूरी तरह से वर्कफ़्लो को अनदेखा कर रहा है। यह वह नहीं है जो हम बाद में हैं, और हमारी लाइव वेबसाइट पर कई समस्याएं पैदा कर रहे हैं।

यह सामग्री नोड में सब कुछ प्रकाशित करता है हम Sitecore डेस्कटॉप के भीतर से ही कार्रवाई चलाते हैं सभी सन्तान, हैं कि सहित, प्रकाशन योग्य (अंतिम कार्यप्रवाह चरण में यानी)। यह पेड़ में किसी भी आइटम को प्रकाशित नहीं करता है जो अभी भी मसौदे मोड में हैं। यह आवश्यक बाहवीर है।

मैं कथन का उपयोग निम्नलिखित के साथ उपरोक्त कोड में दर्ज करके एक गैर-व्यवस्थापक उपयोगकर्ता के रूप में कोड को लागू करने की कोशिश की है:

string userName = @"sitecore\******"; 

Sitecore.Security.Accounts.User user = Sitecore.Security.Accounts.User.FromName(userName, true); 

user.RuntimeSettings.IsAdministrator = false; 

using (new Sitecore.Security.Accounts.UserSwitcher(user)) 
{ 
    ... 
} 

दुर्भाग्य से यह कोई प्रभाव नहीं पड़ा है।

क्या कुछ स्पष्ट है जो मैंने याद किया है, या क्या मैं इसे सही कर रहा हूं और साइटकोर यह गलत कर रहा है? क्या कोई मदद कर सकता है?

मैंने देखा कि अजीब बात यह भी है कि लाइव डेटाबेस पर देखे जाने वाले मसौदे आइटम फ़ील्ड या मेटा डेटा के मामले में साइटकोर डेस्कटॉप में बिल्कुल कुछ नहीं दिखा रहे थे। उन्होंने यह भी एक चेतावनी दिखा रहे थे कि अंग्रेजी "वर्तमान आइटम में एक संस्करण नहीं है":। अंग्रेजी "

+0

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

+2

धन्यवाद @ हॉर्समन, लेकिन मुझे लगता है कि शेड्यूलर में निर्मित साइटकोर एक अंतराल पर काम करता है, जो ASP.NET AppPool रीसायकल करते समय आसानी से रीसेट कर सकता है। यह प्रकाशन के लिए आपके पास होने वाले किसी भी उचित शेड्यूल को गड़बड़ कर देगा और गड़बड़ कर देगा। नतीजतन, हम एक वेब सेवा का उपयोग करते हैं जिसे विंडोज टास्क शेड्यूलर से शेड्यूल पर बुलाया जाता है। – theyetiman

उत्तर

4

टी एल; डॉ रूट सामग्री नोड किसी अन्य भाषा में संस्करण था, कोशिश कर @ techphoria414 के बाद उस संस्करण को हटाने, या केवल ड्राफ़्ट मोड में

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

मैंने कुछ परीक्षण किए हैं और पाया है कि प्रकाशक किसी अन्य भाषा में मौजूद वस्तुओं के लिए वर्कफ़्लो को अनदेखा करता है।निम्नलिखित परिदृश्य पर विचार करें:

1) आप एक फ़ोल्डर और "आइटम वर्कफ़्लो आइटम" के नीचे कोई आइटम जोड़ते हैं जिसमें वर्कफ़्लो है। ड्राफ्ट मोड में संस्करण 1 पर छोड़कर आइटम को प्रतिबद्ध न करें (यानी प्रकाशित नहीं किया जाना चाहिए)।

You add a folder and any item underneath which has workflow Folder has english version only

2) आप के साथ एक गहरी अपने वेब db पर प्रकाशित (मेरे सवाल में कोड का प्रयोग करके) फ़ोल्डर प्रकाशित: वाले फ़ोल्डर केवल एक ही भाषा (अंग्रेजी) में एक संस्करण है। इसके परिणामस्वरूप निम्नलिखित में जोड़ा गया है (फ़ोल्डर जोड़ा गया है, लेकिन ड्राफ्ट "टेस्ट वर्कफ़्लो आइटम" जोड़ा नहीं गया है)। यह व्यवहार की उम्मीद है - हाँ!

You publish the folder with a deep publish

3) एक अलग भाषा में फ़ोल्डर युक्त के लिए एक नया संस्करण जोड़ें।

Add a new version to the containing folder in a different language

4) अब है कि जापानी भाषा के रूप में चयन किया जाता है बच्चे आइटम की वर्कफ़्लो स्थिति की जाँच करें। ध्यान दें, गटर में यह अब नहीं कहता है कि यह ड्राफ्ट मोड में है, लेकिन जापानी में बिल्कुल कोई संस्करण नहीं है (जैसा कि दाईं ओर देखा गया है)।

Check the workflow state of the child item now that Japanese is selected as the language

5) प्रकाशित वेब डाटाबेस के लिए सभी भाषाओं में फ़ोल्डर युक्त, पहले की तरह बिल्कुल वैसा ही। अब ध्यान दें कि "परीक्षण वर्कफ़्लो आइटम" प्रकाशित किया गया है, लेकिन बिना किसी संस्करण के। यह वही है, हमारे प्रकाशित के साथ हुआ बहुत जड़ सामग्री नोड जिसका अर्थ यह अनगिनत आइटम प्रकाशित किया गया है कि

Publish again using the exact same code

प्रकाशित किया गया है नहीं करना चाहिए अब से सिवाय है, क्यों हमारे जड़ सामग्री नोड जापानी में एक संस्करण है एक पूर्ण रहस्य है, लेकिन कम से कम हमने यह पता लगाया है कि हमारे ड्राफ्ट आइटम क्यों प्रकाशित हुए हैं ताकि हम भविष्य में इसे रोक सकें। मुझे संदेह है कि साइटकोर को अपग्रेड करने के साथ इसका कुछ संबंध है क्योंकि जापानी में 2 संस्करण हैं जो लगभग 2 वर्षों में अपग्रेड तिथियों के अनुरूप हैं।

+0

अच्छी तरह से प्रलेखित उत्तर। यह वास्तव में व्यवहार की अपेक्षा की जाती है, और एक कारण यह है कि आइटम को जांचना महत्वपूर्ण है। सामग्री प्रस्तुत करने से पहले अपने कोड में वर्जन। काउंटर> 0। एक शून्य जांच पर्याप्त नहीं है। – techphoria414

+2

इसके लिए धन्यवाद। एक ही मुद्दे में भागो। डिफ़ॉल्ट "सामग्री" नोड में जापानी, जर्मन और डेनिश संस्करण थे ... बिल्ली क्या है? अंग्रेजी से अलग सिस्टम/भाषा में परिभाषित कोई अन्य भाषा नहीं। पूरी तरह से और पूरी तरह असहमत है कि मुझे स्पष्ट रूप से जांच करनी चाहिए कि आइटम क्या है। संस्करण। गणना> 0 हर बार जब मैं कुछ प्रस्तुत करता हूं। हास्यास्पद! विशेष रूप से जब वे संस्करण सामग्री संपादक में दिखाई नहीं देते हैं! – Bryan

14

संभावना मुद्दा यह है कि अपने वेब सेवा एक साइट संदर्भ कि कार्यप्रवाह सक्षम किया हो नहीं चल रहा है है

। अपने कोड के भीतर ऐसा करने के लिए सबसे आसान तरीका है

एक SiteContextSwitcher उपयोग करने के लिए "खोल" साइट के लिए बदलने के लिए है

using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("shell"))) 
{ 
    //do your publish 
} 

संस्करणों के बिना प्रकाशित मदों के लिए के रूप में:। सिद्धांत रूप में, कि अभी भी नियमित रूप से प्रकाशन के साथ क्या होगा वर्कफ़्लो आइटम संस्करणों के प्रकाशन को सीमित करता है, न कि आइटम स्वयं। आपके कोड में, आइटमों को फिर से चालू करते समय अन्य मामलों में, आपको यह जांचने की आवश्यकता है कि item.Versions.Count > 0 प्रतिपादन से पहले।

+0

+1। मेरे पास एक ही समस्या थी और समस्या यह थी कि मेरा कोड "शेड्यूलर" साइट संदर्भ के तहत चल रहा था जिसमें वर्कफ़्लो नहीं है। इससे भी बदतर, 'item.Publishing.IsPublishable()' विधि सही हो जाएगी यदि कोई आइटम का वर्कफ़्लो अनुपलब्ध हो। इसे कठिन तरीके से मिला ... मेरे बेहतर दिनों में से एक नहीं। –

+0

बहुत बहुत धन्यवाद - यह पूरी तरह से व्यवहार्य लगता है क्योंकि यह एक डब्ल्यूसीएफ सेवा है। मैं यह देखने के लिए जल्द ही इसे जाने जा रहा हूं कि यह काम करता है और मैं आपसे वापस आऊंगा। मैंने देखा कि अजीब बात यह भी है कि लाइव डेटाबेस पर देखे जाने वाले ड्राफ्ट आइटम फ़ील्ड या मेटा डेटा के मामले में साइटकोर डेस्कटॉप में बिल्कुल कुछ नहीं दिखा रहे थे। वे एक चेतावनी भी दिखा रहे थे कि "वर्तमान आइटम में" अंग्रेजी: अंग्रेजी "में कोई संस्करण नहीं है। – theyetiman

+0

सिद्धांत रूप में, यह अभी भी नियमित प्रकाशन के साथ भी होगा। वर्कफ़्लो आइटम संस्करणों के प्रकाशन को सीमित करता है, न कि आइटम स्वयं। आपका कोड, आइटम को पुन: सक्रिय करते समय और अन्य मामलों में, आपको यह जांचने की आवश्यकता होती है कि क्या आइटम। संस्करण। गणना> 0 प्रतिपादन से पहले – techphoria414

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

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