2013-02-15 1 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를 오버라이드 (override) 할 필요가

답변

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

당신은 그것을 열거 형 등 을이 아마 어떤 종류의 헬퍼 클래스에 있어야 지원하기 위해 여분의 비트를 할 수 있습니다.