2013-02-15 5 views
6

オーチャード1.6のインポートエクスポートモジュールに問題があります。
プロパティを持つ部品でカスタムタイプをエクスポートしたいとします。エクスポートXMLには、TitlePart、CommonPart、BodyPart、AutoroutePartのデータが含まれていますが、自分自身のデータは存在しません。エクスポートオーチャード1.6でカスタムパーツプロパティが見つかりません

エクスポートXMLに含まれるように、インターフェイスを実装したり、自分の部品に何かを上書きしたりする必要がありますか?エクスポートモジュールの拡張ポイントとは何か(もしあれば)?私はモジュールのソースを持っていますが、それを見つけることはできません。

特定のエクスポートモジュールのmodule.txtは次のとおりです。
名:インポートエクスポート
パス:ImportExport
AntiForgery:オーチャードチーム
ウェブサイト::http://orchardproject.net
バージョン:1.6

著者を有効に OrchardVersion:1.4
説明コンテンツアイテムデータのインポートとエクスポートの機能を提供します。
FeatureDescription:インポートおよびエクスポートコンテンツアイテムデータ
カテゴリー:コンテンツ事前に

感謝:)あなたは、あなたのコンテンツの一部のドライバでメソッドをインポート/ theExportingをオーバーライドする必要が

答えて

7

。ここで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

ありがとう@mdm。これは完全に動作し、私が必要としていたものです – 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); 
      } 
     } 

あなたはそれが列挙型をサポートするために少し余分をしなければならないことなど これはおそらく、いくつかの並べ替えのヘルパークラスにする必要があります。

関連する問題