如何创建结构& Liferay 6中以编程方式运行的模板

时间:2016-04-06 05:48:13

标签: liferay liferay-6 liferay-theme liferay-aui liferay-velocity

我需要通过java代码以编程方式创建结构和模板。我使用了以下代码片段。

结构:

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

上述代码段正在执行但没有任何异常但无法在控制面板的内容部分看到。如果有任何错误,请告诉我

1 个答案:

答案 0 :(得分:3)

您的代码存在以下几个问题:

  1. 您没有设置所有必需的属性,例如groupId, companyId, classNameId, structureKey, dates等。

  2. setNamesetDescription接受DDMStructure参数(DDMTemplate)没有任何StringLiferay 6.2 GA2方法。相反,只有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);

  6. 此外,如果您有权访问ThemeDisplay对象,则可以从中获取groupId, companyId, userId, userFullName。另外,为new Date()createDate属性设置modifiedDate