2

次のコードスニペットを使用して、構造とテンプレートをprogrmatically 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

コード:あなたがgroupId, companyId, classNameId, structureKey, datesなど

  • のようにすべての必要なプロパティを設定していない

    1. DDMStructureまたはDDMTemplateString引数(Liferay 6.2 GA2)を受け入れるための任意のsetNamesetDescription方法はありません。代わりに、Map<Locale, String>を受け入れるための方法はsetNameMapsetDescriptionMapのみです。

    2. ハードコードされたIDの代わりに

      使用ダイナミックIDS(structureIdtemplateId)は、以下の通り:classNameIdについては DDMStructure ddmStructure = DDMStructureUtil.create(CounterLocalServiceUtil.increment());DDMTemplate ddmTemplate = DDMTemplateUtil.create(CounterLocalServiceUtil.increment());

    3. 、あなたはそれが価値だ使用してそれを得ることができ、同様:
      ClassName className = ClassNameLocalServiceUtil.getClassName("com.liferay.portlet.journal.model.Journ‌​alArticle"); long classNameId = className.getClassNameId();

    4. また、追加する代わりにupdateを入力したほうがよいでしょう。 DDMStructureUtil.update(ddmStructure);DDMTemplateUtil.update(ddmTemplate);

    あなたはThemeDisplayオブジェクトへのアクセス権を持っている場合はさらに、あなたはそれからgroupId, companyId, userId, userFullNameを得ることができます。また、createDatemodifiedDateプロパティにはnew Date()を設定します。

  • +0

    ありがとうあなたの時間と忍耐力。私はいくつかの事を設定しましたが、私はここで更新しませんでした。あなたはここで非常によく説明し、非常に明確に理解し、ベストプラクティスのいくつかを学びました。 –

    +0

    あなたはハッピーコーディングを歓迎します! –

    +0

    Stirng.Howを期待しているので、私はすべてのものを設定することができますが、どのような構造キーについては、この1つのハードコーディングを避けるために。 –

    関連する問題