2016-04-05 14 views
2

Ich habe eine Anforderung, die JournalArticle mit Struktur und Template zu erstellen. Während JournalArticle erstellen die Methode erwartet die StructureId und TemplateId aber diese werden von Liferay.So von generiert Name wie kann ich IDs von beiden bekommen.Wie bekomme ich die Struktur/Template ID nach Struktur/Template Name

+0

Eine Möglichkeit besteht darin, alle Strukturen und Vorlagen abzurufen, sie zu durchlaufen und die erforderliche Struktur/Vorlage basierend auf der Namensüberprüfung aufzufüllen. Eine andere Möglichkeit besteht darin, "DynamicQuery" an die "xxxLocalServiceUtil" -Methode "dynamicQuery" zu übergeben, die Ihnen eine Ergebnisliste zurückgibt. –

+0

1. [*** Hol alle ***] (http://stackoverflow.com/questions/25603742/get-content-of-structure-liveray) 2. [*** Dynamic Query ***] (https : //www.limeray.com/community/wiki/-/wiki/Main/Queries+2%3A+DynamicQuery+API) –

+1

Nicht anders .. @ Romeo –

Antwort

0

Sie können StructureId (genannt DDMStructure) mit diesem Code erhalten

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

Und TemplateID (genannt DDMTemplate) mit diesem Code

DDMTemplate ddmTemplate = DDMTemplateLocalServiceUtil.getTemplate(groupId, classNameIdDDMStructure, "ddmTemplateName"); 
+2

Dies wird nicht mit Namen, sondern von templateKey. –

+0

Tatsächlich kann der Strukturschlüssel/templateKey _could_ als ein Name betrachtet werden. Wenn Sie in die Tabelle "ddmstructure" schauen, finden Sie dort sogar reguläre Namen für einige _predefined_ Strukturen (anstelle von generierten Zahlen). Leider ist Liferay API darüber nicht klar, Sie werden wahrscheinlich auch keine Dokumentation darüber finden. Alles das man sicher weiß, kann man diese "Schlüssel" -Werte nicht über die GUI ändern ... –

2

eine DynamicQuery erstellen und auszuführen, wie so (nur Template ersetzen mit Structure, um Strukturen zu erhalten):

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

Sie haben like da die Namen der Strukturen verwenden/Vorlagen werden wie so gespeichert:

<?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> 

Es können verschiedene Namen für verschiedene Schauplätze sein.

+0

Hallo, nur ein kleiner Verbesserungsvorschlag: Um zu vermeiden, Strukturen auszuwählen, deren Name nur _starts_ mit "YOUR NAME" heißt, du sollte besser den Code '.like ("% YOUR NAME% ") zu' .like ("%> YOUR NAME <%") '' ändern. –