2

erstellen Ich muss die Struktur und Vorlage progrmatisch durch Java-Code erstellen.Ich verwendete folgende Code-Schnipsel.Wie Sie Struktur und Vorlage programmatisch in Liferay 6

Struktur:

public void createStructure(String userName,long userId){ 
     log_.info("Inside create structure "); 
     long structureId=115203; 
     DDMStructure ddmStructure=DDMStructureLocalServiceUtil.createDDMStructure(structureId); 
     ddmStructure.setName("MigrationStructure"); 
     ddmStructure.setDescription("This Structure created programatically"); 
     ddmStructure.setUserId(userId); 
     ddmStructure.setUserName(userName); 
     File fXmlFile = new File("D:/FilesDataMigration/structure.xml");   
     try {   
      Document document = SAXReaderUtil.read(fXmlFile); 
      ddmStructure.setDocument(document); 
      DDMStructureLocalServiceUtil.addDDMStructure(ddmStructure); 
     }catch (DocumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SystemException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     log_.info("Inside create structure done"); 
    } 

Vorlage:

public void createTemplate(String userName,long userId){ 
     log_.info("Inside create template "); 
     long templateId=12504; 
     DDMTemplate ddmTemplate=DDMTemplateLocalServiceUtil.createDDMTemplate(templateId); 
     ddmTemplate.setName("MigrationTemplate"); 
     ddmTemplate.setDescription("This Template created programatically"); 
     ddmTemplate.setUserId(userId); 
     ddmTemplate.setUserName(userName); 

     try { 
      BufferedReader br = new BufferedReader(new FileReader("D:/FilesDataMigration/template.txt")); 
      StringBuilder sb = new StringBuilder(); 
      String line = br.readLine(); 

      while (line != null) { 
       sb.append(line); 
       sb.append(System.lineSeparator()); 
       line = br.readLine(); 
      } 
      String script = sb.toString(); 
      ddmTemplate.setScript(script); 
      DDMTemplateLocalServiceUtil.addDDMTemplate(ddmTemplate); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } catch (SystemException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     log_.info("Inside create template done"); 
    } 

Der oben genannte Schnipsel ausgeführt werden richtig aus irgendwelchen Ausnahmen aber nicht in der Lage im Inhaltsbereich der Kontrolle zu sehen Panel.Suggest mich wenn etwas falsch ist

+0

Zunächst, welche Art von Strukturen oder Vorlagen möchten Sie erstellen? –

+1

Sie setzen nicht alle erforderlichen Eigenschaften, wie 'classNameId',' language' usw. –

+2

Außerdem sollten Sie 'DDMStructure ddmStructure = DDMSstructureUtil.create (CounterLocalServiceUtil.increment());' und 'DDMTemplate ddmTemplate = DDMTemplateUtil.create verwenden (CounterLocalServiceUtil.increment()); 'anstelle von fest codierten IDs. –

Antwort

3

Es gibt einige Probleme mit Ihrem Code:

  1. Sie nicht alle erforderlichen Eigenschaften festgelegt werden, wie groupId, companyId, classNameId, structureKey, dates usw.

  2. Es gibt keine setName und setDescription Methode für DDMStructure oder DDMTemplate Annahme String Argument (Liferay 6.2 GA2). Stattdessen gibt es nur setNameMap und setDescriptionMap Methoden für die beide Map<Locale, String> akzeptieren.

  3. Verwendung dynamische IDs (structureId und templateId) anstelle von ids hartcodiert, wie folgend: DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment()); und DDMTemplate ddmTemplate = DDMTemplateUtil.create(CounterLocalServiceUtil.increment());

  4. Für classNameId, man kann es es Wert bekommen mit, wie:
    ClassName className = ClassNameLocalServiceUtil.getClassName("com.liferay.portlet.journal.model.Journ‌​alArticle"); long classNameId = className.getClassNameId();

  5. auch besser update über besiedeltes Objekt an seinem Platz zu verwenden hinzuzufügen: DDMStructureUtil.update(ddmStructure); und DDMTemplateUtil.update(ddmTemplate);

Wenn Sie darüber hinaus Zugriff auf das ThemeDisplay Objekt haben, können Sie groupId, companyId, userId, userFullName von ihm zu bekommen. Stellen Sie auch new Date() für createDate und modifiedDate Eigenschaften ein.

+0

Vielen Dank für Ihre Zeit und Geduld. Ich habe einige der Dinge eingestellt, aber ich habe hier nicht aktualisiert. Sie haben hier sehr gut erklärt und sehr klar verstanden und einige der besten Praktiken gelernt. –

+0

Gern geschehen, Happy Coding! –

+0

Ich bin in der Lage, alle Dinge zu setzen, aber was ist mit Struktur Schlüssel, wie es Stirn erwartet. Wie man harte Codierung dieses zu vermeiden. –