Доступ к вложениям в дочерние страницы - Kentico - PullRequest
0 голосов
/ 09 января 2020

У меня есть следующая структура:

Страна A | _Questionnaire 1
| _Result 1
Страна B | _Questionnaire 3
| _Result 3
Страна C | _Questionnaire 5
| _Result 5

Страна? имеют тип страницы CMS.folder , и вопросник, и результат имеют тип страницы CMS.file и содержат одно вложение (PDF). Я пытаюсь получить доступ к сведениям вложения (имя, Guid, размер) в каждой публикации, доступной в папке.

Я пробовал следующее

            .Select(m => new
            {
                Country = m.DocumentName,
                questionnaire = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Questionnaire")).Select(s => s.GetValue("PDF")),
                result = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Result")).Select(s => s.GetValue("PDF"))    
            })
            .ToList();

Я могу получить GUID вложения доступны в файле анкеты для каждой папки, но я не могу получить значение результата, так как повторение WithAllData дважды предотвращает это. Как я могу также получить доступ к размеру и названию вложения? Я попытался включить AttachmentSize or AttachmentName, но у меня не было успеха с дочерними узлами текущего узла.

Как лучше всего делать то, что я пытаюсь сделать?

----- ----------- Обновление ------------------------------

Как и предлагалось Вот что я попробовал:

.Select(m => new
            {
                Country = m.DocumentName,
                questionnaire = GetDocs(m.Children.Where(w => w.DocumentName.Contains("Questionnaire")).FirstOrDefault()),
                result = GetDocs(m.Children.Where(w => w.DocumentName.Contains("Result")).FirstOrDefault())    
            })
            .ToList();

private PublicationSimpleDto GetDocs(TreeNode tree)
        {
            PublicationSimpleDto publication = null;
            if (tree != null)
            {
                foreach (DocumentAttachment attachment in tree.Attachments)
                {
                    publication = new PublicationSimpleDto()
                    {
                        Title = attachment.AttachmentTitle,
                        Extension = attachment.AttachmentExtension.Replace(".", "").ToUpper(),
                        AttachmentUrl = attachment.AttachmentGUID.ToString(),
                        Size = attachment.AttachmentSize
                    };
                }
            }
            return publication;
        }

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

questionnaire = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Questionnaire")).Select(s => s.GetValue("PDF")),
                result = m.Children.WithAllData.Where(w => w.DocumentName.Contains("Result")).Select(s => s.GetValue("PDF"))

Использование прямого GUID вложения вместо TreeNode страницы звучало проще, но я не могу это сделать.

1 Ответ

0 голосов
/ 09 января 2020

Пожалуйста, ознакомьтесь с этой статьей Kentico docs , объясняющей работу с вложениями.

Вы можете попробовать следующие варианты:

  • Получить вложение с помощью DocumentHelper.GetAttachment
  • Доступ к свойству document.Attachmets (у каждого типа страницы есть это свойство)

И тогда вы сможете посмотреть, например, на такой размер: вложение .AttachmentSize

...