none
Как получить все объекты конкретной компоненты (Feature)? RRS feed

  • Вопрос

  • Есть ли способ получить все объекты, которые включены в фичу на этапе проекта в Visual St.? Мы их видим в проекте на закладке Design в таблице Items in feature.

    К примеру, чтобы использовать этот перечень в каком-либо обработчике события (EventReceiver) этой компоненты.

    4 октября 2016 г. 10:07

Ответы

  • Можете попробовать получить объекты через Powershell, но информация будет немного краткой

    Пример кода

    $f = Get-SPFeature -Identity "Feature GUID" -Web "http://sp"
    $defs = $f.GetElementDefinitions([System.Globalization.CultureInfo]::CurrentCulture)

    В зависимости от scope вашей feature указываем -Web , -Site , -Farm или -WebApplication и url скоупа. В $defs будет результат. Но опять же, вы получите очень краткое описание объектов фичи, например то, что в фиче есть модуль или ресивер (без уточнения имени или типа ресивера).

    Предлагаю зайти в папку 15/TEMPLATE/FEATURES/имя вашей фичи. Там будет и Feature.xml с определением фичи и ее объектов, а также все подпапки фичи с их elements.xml

    • Предложено в качестве ответа Dmitrii Ermakov 6 октября 2016 г. 18:03
    • Помечено в качестве ответа Denis Prokofjev 7 октября 2016 г. 9:55
    6 октября 2016 г. 18:00
  • Не понимаю. Я имею в виду только ресивер самой фичи - FeatureActivated(). В нем я бы хотел иметь возможность перебрать все элементы, которые в эту фичу входят.

    Кстати, пока писал ответ, нашел и решение. Заострил внимание на XML определениях и вспомнил, что в бъекте SPFeature было свойтсво Definition. Посмотрел его детальнее, запустил проект, проверил - да, это свойство типа SPFeatureDefinition, в нем есть метод GetElementDefinitions(Culture):

    properties.Feature.Definition.GetElementDefinitions(System.Globalization.CultureInfo.CurrentCulture) внутри обработчика события фичи как раз и дает нам перечень входящих в нее элементов. Там есть и имя и тип (static свойство RootTag).

    В процессе обсуждения решение нашлось. Спасибо!

    • Помечено в качестве ответа Denis Prokofjev 7 октября 2016 г. 11:31
    7 октября 2016 г. 11:30

Все ответы

  • Можете попробовать получить объекты через Powershell, но информация будет немного краткой

    Пример кода

    $f = Get-SPFeature -Identity "Feature GUID" -Web "http://sp"
    $defs = $f.GetElementDefinitions([System.Globalization.CultureInfo]::CurrentCulture)

    В зависимости от scope вашей feature указываем -Web , -Site , -Farm или -WebApplication и url скоупа. В $defs будет результат. Но опять же, вы получите очень краткое описание объектов фичи, например то, что в фиче есть модуль или ресивер (без уточнения имени или типа ресивера).

    Предлагаю зайти в папку 15/TEMPLATE/FEATURES/имя вашей фичи. Там будет и Feature.xml с определением фичи и ее объектов, а также все подпапки фичи с их elements.xml

    • Предложено в качестве ответа Dmitrii Ermakov 6 октября 2016 г. 18:03
    • Помечено в качестве ответа Denis Prokofjev 7 октября 2016 г. 9:55
    6 октября 2016 г. 18:00
  • Большое спасибо, Дмитрий! Для меня полезный ответ. Однако я имел в ввиду возможность обойти в цикле все элементы, например в ее EventReceiver после активации, чтобы отработать действия над всеми внедренными элементами. И чтобы не менять код вручную при удалении/добавление элемента, а поставить это на автомат.

    Я предполагал, что такая информация могла бы храниться в объекте SPFeature...

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

    7 октября 2016 г. 10:02
  • Да, Денис, в файлах elements.xml, которые определяют event receiver, будет указано какой тип ресивера (например, ресивер на элементы списка), при каком событии он срабатывает (например, элемент изменен) и к какому объекту ресивер относится (например, шаблона "Задачи")
    7 октября 2016 г. 10:43
  • Не понимаю. Я имею в виду только ресивер самой фичи - FeatureActivated(). В нем я бы хотел иметь возможность перебрать все элементы, которые в эту фичу входят.

    Кстати, пока писал ответ, нашел и решение. Заострил внимание на XML определениях и вспомнил, что в бъекте SPFeature было свойтсво Definition. Посмотрел его детальнее, запустил проект, проверил - да, это свойство типа SPFeatureDefinition, в нем есть метод GetElementDefinitions(Culture):

    properties.Feature.Definition.GetElementDefinitions(System.Globalization.CultureInfo.CurrentCulture) внутри обработчика события фичи как раз и дает нам перечень входящих в нее элементов. Там есть и имя и тип (static свойство RootTag).

    В процессе обсуждения решение нашлось. Спасибо!

    • Помечено в качестве ответа Denis Prokofjev 7 октября 2016 г. 11:31
    7 октября 2016 г. 11:30