2016-12-17 9 views
0

Моего сайта имеет такую ​​структуру:Как получить доступ вложения документов из иерархического преобразования

Products 
    category 1 
     item 1 
      item 1 attachments 
    category 2 
     item 2 
      item 2 attachments 

я успешно написал иерархическое преобразование, которое показывает данные на странице на верхнем уровне. Однако я не могу понять, как получить доступ к вложениям для каждого документа.

У кого-нибудь есть идеи?

ответ

0

Предположим, вы имеете в виду несортированные вложения, которые вы добавляете в Свойства -> Раздел вложений. В этом случае ЮО может зарегистрировать следующий контроль в вашей трансформации:

<%@ Register Src="~/CMSInlineControls/DocumentAttachments.ascx" TagName="DocumentAttachments" TagPrefix="cms" %> 

И использовать его как это:

<cms:DocumentAttachments ID="ucDocAttachments" runat="server" TransformationName="cms.root.attachment" Path='<%# Eval("NodeAliasPath") %>' /> 
1

Если говорить о привязанности группы (это когда у вас есть поле на странице введите Вложения), затем для доступа к вложениям внутри вашего преобразования вам нужно написать либо custom macro (при использовании преобразования текста/XML), либо custom transformation. Оба можно сделать очень легко. Сам код, который получает вас вложение может быть такой:

public ObjectQuery<AttachmentInfo> GetAttachmentsFromField(string className, int documentID, string attachmentColumnName) 
{ 
    // get class info  
    var classInfo = new FormInfo(DataClassInfoProvider.GetDataClassInfo(className).ClassFormDefinition); 
    if (classInfo != null) 
    { 
     // get attachment field definition    
     var attachmentsField = classInfo.GetFormField(attachmentColumnName); 
     if (attachmentsField != null) 
     { 
      // get attachments strored in the field by GUID 
      var attachments = AttachmentInfoProvider.GetAttachments() 
       .WhereEquals("3CCC6E6C-56F3-42EB-8385-979973D99C55", attachmentsField.Guid) 
       .And() 
       .WhereEquals("AttachmentDocumentID", documentID); 

      return attachments; 
     } 
    } 
    return null; 
} 

При этом очень важно учитывать, что этот код вводит несколько других запросов SQL против базы данных и, следовательно, она должна быть оптимизирована с помощью кэширования надлежащего ,

0

Я написал pretty detailed blog post на этом некоторое время назад. Он описывает очень похожие атрибуты для ответа Энна, но дает подробные сведения о том, почему вы делаете определенные вещи.