2012-05-24 18 views
7

मुझे ब्रोकर से एक साधारण सरल क्वेरी के आधार पर ब्रोकर से गतिशील घटक प्रस्तुति लोड करने में समस्या हो रही है, जहां मैं एक विशिष्ट कीवर्ड के साथ टैग किए जाने पर आधारित घटक लोड करने की कोशिश कर रहा हूं:ट्रिडियन 200 एसपी 1 ब्रोकर परिणाम वापस नहीं कर रहे

private string GetComponentPresentations() 
    { 
     Logger.Log.Info("Entered GetComponentPresentations"); 
     var publicationCriteria = new PublicationCriteria(_publicationId); 

     int schemaId = int.Parse(SchemaId.Split('-')[1]); 

     // Is it the correct content type (Schema) 
     var isSpecifedSchema = new ItemSchemaCriteria(schemaId); 

     // Type of the item is 16 (Component). 
     var isComponent = new ItemTypeCriteria(16); 

     // All of the above conditions must be true 
     Criteria isCorrectComponent = CriteriaFactory.And(isSpecifedSchema, isComponent); 

     var publicationAndIsComponent = CriteriaFactory.And(publicationCriteria, isCorrectComponent); 

     //Only get components tagged with the specified keyword 
     var keywordCriteria = new KeywordCriteria(_productsCategoryTcmId, ProductFilter, Criteria.Equal); 

     //Only get Components of the correct type from the correct publication 
     Criteria fullCriteria = CriteriaFactory.And(publicationAndIsComponent, keywordCriteria); 


     using (var query = new Query(fullCriteria)) 
     { 
      string[] results = query.ExecuteQuery(); 
      using (var cpf = new ComponentPresentationFactory(_publicationId)) 
      { 
       if(results != null) 
       { 
        var resultString = new StringBuilder(); 

        foreach (string componentTcmId in results) 
        { 
         Logger.Log.Info("Looping over results"); 

         int componentId = int.Parse(componentTcmId.Split('-')[1]); 

         int templateId = int.Parse(TemplateId.Split('-')[1]); 

         ComponentPresentation cp = cpf.GetComponentPresentation(componentId, templateId); 

         if (cp != null && !string.IsNullOrEmpty(cp.Content)) 
         { 
          resultString.Append(cp.Content); 
          Logger.Log.InfoFormat("Appended Content {0}",cp.Content); 
         } 
        } 

        Logger.Log.Info("Returning"); 
        return resultString.ToString(); 
       } 

       Logger.Log.Info("Results was null."); 
       return string.Empty; 
      } 
     } 

    } 

मैं कीवर्ड मैं उम्मीद के साथ ब्रोकर डेटाबेस में ITEMS_CATEGORIES_AND_KEYWORDS तालिका में आइटम देख सकते हैं और अगर मैं में क्वेरी बाहर टिप्पणी और हार्डकोड टीसीएम आईडी मैं मैन्युअल रूप से सी.पी. लोड कर सकते हैं।

मेरे पास है सुनिश्चित करें कि श्रेणी प्रकाशित है और सभी चर के मान सही हैं।

मैंने यह सुनिश्चित किया है कि कीवर्ड का मूल्य और उचित मूल्य पर एक महत्वपूर्ण सेट है।

मैं और क्या देख सकता हूं?

उत्तर

2

मैं निम्नलिखित कोड का उपयोग कर इस काम कर पाने में कामयाब रहे है

private string GetComponentPresentationsUsingFilter() 
    { 
     //RSL: Had to use the obsolete filtering API because could not get anything back from the Broker. 
     var filter = new SearchFilter("tcm:0-" + _publicationId + "-1"); 
     var query = new Query(); 

     string schemaId = SchemaId.Split('-')[1]; 
     query.AddCriteria("schema", "=", schemaId); 
     query.AddCustomMetaQuery(string.Format("KEY_NAME = 'product' AND CAST(KEY_STRING_VALUE as nvarchar(100)) = '{0}'", ProductFilter)); 
     string[] results = filter.Match(query, new Sorting("title=asc"), MaxItems); 

     if (results == null) 
     { 
      Logger.Log.Info("Results was null."); 
      return string.Empty; 
     } 

     using (var cpf = new ComponentPresentationFactory(_publicationId)) 
     { 
      var resultString = new StringBuilder(); 
      Logger.Log.InfoFormat("Got {0} Results", results.Length); 

      foreach (string componentTcmId in results) 
      { 

       int componentId = int.Parse(componentTcmId.Split('-')[1]); 
       Logger.Log.InfoFormat("Got componentId as {0}", componentId); 

       int templateId = int.Parse(TemplateId.Split('-')[1]); 
       Logger.Log.InfoFormat("Got templateId as {0}", templateId); 

       ComponentPresentation cp = cpf.GetComponentPresentation(componentId, templateId); 

       if (cp != null && !string.IsNullOrEmpty(cp.Content)) 
       { 
        resultString.Append(cp.Content); 
        Logger.Log.InfoFormat("Appended Content {0}", cp.Content); 
       } 
      } 

      return resultString.ToString(); 
     } 
    } 

कोई विचार क्यों मैं मानदंड एपीआई का उपयोग कर परिणाम इस तरह से लेकिन कुछ नहीं मिल सकता है?

2

क्या आपने क्वेरी पर SetCriteria विधि का उपयोग करने का प्रयास किया है? उदाहरण के लिए:

KeywordCriteria(java.lang.String categoryName, java.lang.String keyword, FieldOperator operator) 

करता _productsCategoryTcmId शायद सिर्फ यूआरआई के बजाय श्रेणी के नाम पर करने की आवश्यकता है:

query.SetCriteria(multipleCombinedFacetCriteria); 
String[] itemURIS = query.ExecuteQuery(); 
+0

क्वेरी में यह विधि प्रतीत नहीं होती है। मुझे यकीन नहीं है कि यह हमें क्या बताता है .. –

2

जब जावा एपीआई में देख मैं इस अधिभार देख सकते हैं?

+0

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

+0

क्या आपने ट्रिडियन के पुराने संस्करण से माइग्रेट किया है? शायद lib निर्देशिका में स्थित कुछ पुरानी जार फ़ाइलें अभी भी हैं? –

+0

नहीं, यह सामग्री डिलिवरी संचयी हॉटफिक्स के साथ 200 9 एसपी 1 का एक नया इंस्टॉलेशन है –

4

मैं सुझाव देता हूं कि प्रत्येक प्रश्न के एक मानदंड को एक-एक करके हटाएं और जांचें कि प्रत्येक के लिए कौन से परिणाम लौटाए जाते हैं।

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

+0

हटाते हैं तो क्या होता है मैंने कोशिश की और पता चला कि मैं डेटाबेस को मार नहीं रहा था। मुझे लगता है कि मैं गलत डीएलएल का संदर्भ दे रहा हूं लेकिन यह पता नहीं लगा सकता कि कौन सा सही है .. मुझे यह अप्रचलित फ़िल्टरिंग एपीआई के साथ काम कर रहा है लेकिन खुश नहीं है। –

2

क्या आपने जांच की है कि जिस श्रेणी पर आप पूछ रहे हैं वह प्रकाशित है? यदि आप नए 'मानदंड' तंत्र का उपयोग कर रहे हैं तो आपको ऐसा करने की आवश्यकता होगी। यह हमेशा मुझे वह मिलता है!

धन्यवाद, जोनाथन