如何以编程方式在Liferay 6中创建结构和模板

问题描述:

我需要通过java代码来编程创建结构和模板。我使用以下代码片段。如何以编程方式在Liferay 6中创建结构和模板

结构:

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"); 
    } 

模板:

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"); 
    } 

上面的片断,在正确执行任何异常,但无法在控制的内容部分,了解Panel.Suggest我如果有任何错误

+0

首先,你想创建什么样的结构或模板? –

+1

您并未设置所有必需的属性,如'classNameId','language'等 –

+2

另外,最好使用'DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment());'和 'DDMTemplate ddmTemplate = DDMTemplateUtil.create (CounterLocalServiceUtil.increment());'代替硬编码的ID。 –

有几个问题与您代码:

  1. 您没有设置所有所需的性能,如groupId, companyId, classNameId, structureKey, dates

  2. 没有为DDMStructureDDMTemplate接受String参数(Liferay 6.2 GA2)任何setNamesetDescription方法。相反,只有setNameMapsetDescriptionMap方法都接受Map<Locale, String>

  3. 使用的动态ID(structureIdtemplateId)代替硬编码的ID,如下: DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment());DDMTemplate ddmTemplate = DDMTemplateUtil.create(CounterLocalServiceUtil.increment());

  4. 对于classNameId,你可以把它用它的值,如:
    ClassName className = ClassNameLocalServiceUtil.getClassName("com.liferay.portlet.journal.model.Journ‌​alArticle"); long classNameId = className.getClassNameId();

  5. 此外,最好使用update而不是增加: DDMStructureUtil.update(ddmStructure);DDMTemplateUtil.update(ddmTemplate);

此外,如果您有机会获得ThemeDisplay对象,你可以从它那里得到groupId, companyId, userId, userFullName。另外,为createDatemodifiedDate属性设置new Date()

+0

非常感谢你的时间和耐心。我设置了一些东西,但我没有在这里更新。你在这里解释得非常好,并且非常清楚地理解并学习了一些最佳实践。 –

+0

不客气,快乐编码! –

+0

我能够设置所有的东西,但是结构关键字是什么,因为它期望Stirng。如何避免硬编码。 –