Как получить идентификатор структуры/шаблона по имени структуры/шаблона

У меня есть требование: нужно создать JournalArticle со структурой и шаблоном. При создании JournalArticle метод ожидает StructureId и TemplateId, но они генерируются Liferay. Итак, по имени, как я могу получить идентификаторы обоих.


person Kona Laxman Deepak    schedule 05.04.2016    source источник
comment
Один из способов — получить все структуры и шаблоны, перебрать их и заполнить требуемую структуру/шаблон на основе проверки имени. Другой способ - передать DynamicQuery методу dynamicQuery xxxLocalServiceUtil, который вернет вам список результатов.   -  person Parkash Kumar    schedule 05.04.2016
comment
1. Выбрать все 2. Динамический запрос   -  person Parkash Kumar    schedule 05.04.2016
comment
Не иначе..@Ромео   -  person Kona Laxman Deepak    schedule 05.04.2016


Ответы (2)


Создайте и выполните DynamicQuery вот так (просто замените Template на Structure, чтобы получить структуру):

DynamicQuery q = DynamicQueryFactoryUtil.forClass(DDMTemplate.class)
            .add(PropertyFactoryUtil.forName("name").like("%YOUR NAME%"));
List<DDMTemplate> templates = DDMTemplateLocalServiceUtil.dynamicQuery(q);

Вы должны использовать like, так как имена структур/шаблонов сохраняются так:

<?xml version='1.0' encoding='UTF-8'?>
<root available-locales="de_DE" default-locale="de_DE">
    <Name language-id="de_DE">YOUR NAME</Name>
</root>

Для разных локалей могут быть разные имена.

person Timo Türschmann    schedule 03.01.2017
comment
Привет, небольшое предложение по улучшению: чтобы избежать выбора структур, имя которых начинается только с ВАШЕГО ИМЯ, вам лучше изменить код .like("%YOUR NAME%") на .like("%>YOUR NAME<%"). - person Petr Bodnár; 16.08.2017

Вы можете получить StructureId (называемый DDMStructure) с помощью этого кода

long classNameIdJournalArticle = ClassNameLocalServiceUtil.getClassNameId(JournalArticle.class);
DDMStructure ddmStructure = DDMStructureLocalServiceUtil.getStructure(groupId, classNameIdJournalArticle, "myDDMStructureName");

И TemplateId (называемый DDMTemplate) с этим кодом

 DDMTemplate ddmTemplate = DDMTemplateLocalServiceUtil.getTemplate(groupId, classNameIdDDMStructure, "ddmTemplateName");
person fabballe    schedule 26.04.2016
comment
Это не по имени, а по templateKey. - person Timo Türschmann; 03.01.2017
comment
Фактически, frameworkKey/templateKey может рассматриваться как имя. Когда вы заглянете в таблицу ddmstructure, вы даже найдете там обычные имена для некоторых предопределенных структур (вместо сгенерированных чисел). К сожалению, Liferay API просто не знает об этом, вы, вероятно, не найдете никакой документации по этому поводу. Все, что известно наверняка, вы не можете изменить эти значения *Key через графический интерфейс... - person Petr Bodnár; 16.08.2017