2

Мне нужно создать структуру и шаблон с помощью 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()); 'вместо жестко запрограммированных идентификаторов. –

ответ

3

Есть несколько проблем с вашей Код:

  1. Вы не установить все необходимые свойства, как groupId, companyId, classNameId, structureKey, dates т.д.

  2. Существует не setName и setDescription метод DDMStructure или DDMTemplate принимать String аргумент (Liferay 6.2 GA2). Вместо этого существуют только setNameMap и setDescriptionMap методы для принятия Map<Locale, String>.

  3. Используйте динамические идентификаторы (structureId и templateId) вместо жестко закодированных идентификаторов, как следующее: 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 от него. Также установите new Date() для createDate и modifiedDate.

+0

Большое спасибо за ваше время и терпение. Я установил некоторые вещи, но я не обновлялся здесь. Вы здесь очень хорошо объяснили и поняли очень четко и узнали некоторые из лучших практик. –

+0

Добро пожаловать, счастливое кодирование! –

+0

Я могу установить все, но что касается структурного ключа, поскольку он ожидает Stirng. Как избежать жесткого кодирования этого. –

 Смежные вопросы

  • Нет связанных вопросов^_^