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());'代替硬編碼的ID。 –

回答

3

有幾個問題與您代碼:

  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。如何避免硬編碼。 –

相關問題