2013-02-15 6 views
6

Mam problem z modułem eksportu importu w Orchard 1.6:
Chcę wyeksportować niestandardowy typ z częścią, która ma w sobie właściwość. Eksportowany plik XML zawiera dane z TitlePart, CommonPart, BodyPart i AutoroutePart, jednak danych z mojej własnej części nie ma.Własne właściwości części brakuje w eksporcie Orchard 1.6

Czy jest coś, co powinienem zrobić, jak zaimplementować interfejs lub przesłonić coś z mojej strony, aby zawierało się w pliku XML eksportu? Jakie są (jeśli występują) punkty rozszerzenia modułu eksportu? Mam źródło modułu, ale nie mogę go znaleźć.

module.txt konkretnego modułu eksportu to:
Nazwa: Import Export
Ścieżka: ImportExport
zabezpieczającym: włączone
Autor: The Orchard Zespół
WWW: http://orchardproject.net
Wersja: 1.6
OrchardVersion: 1.4
Opis: Zapewnia możliwość importowania i eksportowania danych elementu treści.
FeatureDescription: Import i eksport danych poz zawartość
Kategoria: Zawartość

góry dzięki :)

Odpowiedz

7

Trzeba zastąpić theExporting/Importowanie metody w części kierowcy treści. Oto prosty przykład z 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); 
} 

Klasa ImportExportContext zapewnia dostęp do podstawowej struktury XML używane do generowania dokument wyjściowy, więc jeśli jesteś przyzwyczajony do korzystania System.Xml.Linq, XDocument etc następnie go wszystko wydaje się znajome.

Istnieje kilka innych przykładów użycia w Orchard.Core.Common.Drivers.CommonPartDriver, Orchard.Users.Drivers.UserPartDriver i Orchard.Comments.Drivers.CommentPartDriver.

+0

Dzięki @mdm. Działa to doskonale i jest dokładnie tym, czego potrzebowałem – Ytrog

0

można spróbować użyć refleksji:

 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); 
      } 
     } 

Być może trzeba będzie zrobić trochę dodatkowych aby wspierać wyliczenia itp Powinno to prawdopodobnie w klasie jakiegoś pomocnika.

Powiązane problemy