如何以编程方式在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我如果有任何错误
有几个问题与您代码:
您没有设置所有所需的性能,如
groupId, companyId, classNameId, structureKey, dates
等没有为
DDMStructure
或DDMTemplate
接受String
参数(Liferay 6.2 GA2
)任何setName
和setDescription
方法。相反,只有setNameMap
和setDescriptionMap
方法都接受Map<Locale, String>
。使用的动态ID(
structureId
和templateId
)代替硬编码的ID,如下:DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment());
和DDMTemplate ddmTemplate = DDMTemplateUtil.create(CounterLocalServiceUtil.increment());
对于
classNameId
,你可以把它用它的值,如:ClassName className = ClassNameLocalServiceUtil.getClassName("com.liferay.portlet.journal.model.JournalArticle"); long classNameId = className.getClassNameId();
此外,最好使用
update
而不是增加:DDMStructureUtil.update(ddmStructure);
和DDMTemplateUtil.update(ddmTemplate);
此外,如果您有机会获得ThemeDisplay
对象,你可以从它那里得到groupId, companyId, userId, userFullName
。另外,为createDate
和modifiedDate
属性设置new Date()
。
非常感谢你的时间和耐心。我设置了一些东西,但我没有在这里更新。你在这里解释得非常好,并且非常清楚地理解并学习了一些最佳实践。 –
不客气,快乐编码! –
我能够设置所有的东西,但是结构关键字是什么,因为它期望Stirng。如何避免硬编码。 –
首先,你想创建什么样的结构或模板? –
您并未设置所有必需的属性,如'classNameId','language'等 –
另外,最好使用'DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment());'和 'DDMTemplate ddmTemplate = DDMTemplateUtil.create (CounterLocalServiceUtil.increment());'代替硬编码的ID。 –