2013-02-15 11 views
6

मुझे ऑर्चर्ड 1.6:
में आयात निर्यात मॉड्यूल में कोई समस्या है। मैं एक कस्टम प्रकार को उस हिस्से के साथ निर्यात करना चाहता हूं जिसमें संपत्ति है। निर्यात एक्सएमएल में टाइटलपार्ट, कॉमनपार्ट, बॉडीपार्ट और ऑटोरआउटपार्ट से डेटा होता है, हालांकि मेरे अपने हिस्से से डेटा वहां नहीं है।निर्यात भाग में लापता कस्टम भाग गुण 1.6

क्या मुझे कुछ भी करना चाहिए जो मुझे इंटरफेस को लागू करने या मेरे हिस्से पर कुछ ओवरराइड करने जैसा करना चाहिए ताकि यह निर्यात एक्सएमएल में निहित हो? निर्यात मॉड्यूल के विस्तार बिंदु (यदि कोई हैं) क्या हैं? मेरे पास मॉड्यूल का स्रोत है लेकिन इसे नहीं मिला।

विशेष निर्यात मॉड्यूल के module.txt है:
नाम: आयात निर्यात
पथ: Importexport
AntiForgery: सक्षम
लेखक: ऑर्चर्ड टीम
वेबसाइट: http://orchardproject.net
संस्करण: 1.6
ऑर्चर्डवर्सन: 1.4
विवरण: सामग्री आइटम डेटा आयात और निर्यात क्षमता प्रदान करता है।
FeatureDescription: आयात और निर्यात सामग्री आइटम डेटा
श्रेणी: सामग्री

अग्रिम धन्यवाद :)

उत्तर

7

आप/theExporting ओवरराइड करने के लिए अपनी सामग्री हिस्सा ड्राइवर में तरीकों का आयात की जरूरत है। यहाँ Orchard.Core.Title.Driver.TitlePartDriver से एक सरल उदाहरण है:

protected override void Importing(TitlePart part, ImportContentContext context) { 
    var title = context.Attribute(part.PartDefinition.Name, "Title"); 
    if (title != null) { 
     part.Title = title; 
    } 
} 

protected override void Exporting(TitlePart part, ExportContentContext context) { 
    context.Element(part.PartDefinition.Name).SetAttributeValue("Title", part.Title); 
} 

ImportExportContext वर्ग उत्पादन दस्तावेज़ उत्पन्न करने के लिए इस्तेमाल किया अंतर्निहित XML संरचना तक पहुँच प्रदान करता है, तो आप यह System.Xml.Linq, XDocument आदि का उपयोग तब किया जाता है, तो सभी परिचित लगेंगे।

Orchard.Core.Common.Drivers.CommonPartDriver, Orchard.Users.Drivers.UserPartDriver, और Orchard.Comments.Drivers.CommentPartDriver में उपयोग के कुछ अन्य उदाहरण हैं।

+0

धन्यवाद @ एमडीएम। यह पूरी तरह से काम करता है और वही है जो मुझे चाहिए था – Ytrog

0

आप प्रतिबिंब का उपयोग करने की कोशिश कर सकते:

 string[] notRequiredExportProperties = new string[] 
      { 
       "Record", 
       "ContentItem", 
       "Zones", 
       "Id", 
       "TypeDefinition", 
       "TypePartDefinition", 
       "PartDefinition", 
       "Settings", 
       "Fields" 
      }; 

     protected override void Importing(ContactPart part, Orchard.ContentManagement.Handlers.ImportContentContext context) 
     { 
      var contactRecordType = part.Record.GetType(); 
      var allProps = contactRecordType.GetProperties(); 
      foreach (PropertyInfo p in allProps) 
      { 
       if (Array.FindIndex(notRequiredExportProperties, i => i == p.Name) > -1) 
        continue; 

       var importValue = context.Attribute(part.PartDefinition.Name, p.Name); 
       var import = Convert.ChangeType(importValue, p.PropertyType); 
       if (p.PropertyType.IsSubclassOf(typeof(Enum))) 
        continue; 
       p.SetValue(part.Record, import, null); 
      } 
     } 

     protected override void Exporting(ContactPart part, Orchard.ContentManagement.Handlers.ExportContentContext context) 
     { 
      var contactPartType = part.GetType(); 
      var allProps = contactPartType.GetProperties(); 
      foreach(PropertyInfo p in allProps) 
      { 
       if (Array.FindIndex(notRequiredExportProperties, i => i == p.Name) > -1) 
        continue; 

       var propVal = p.GetValue(part, null); 
       context.Element(part.PartDefinition.Name).SetAttributeValue(p.Name, propVal); 
      } 
     } 

आप इसे Enums आदि का समर्थन यह शायद किसी प्रकार की एक सहायक कक्षा में किया जाना चाहिए बनाने के लिए थोड़ा अतिरिक्त करना पड़ सकता है।

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