2017-10-28 7 views
0
のLiferay 7.私は雑誌記事

Liferay 7のカスタムモジュールでWebコンテンツのメタデータのカテゴリとタグの情報を取得する方法は?

addArticle(長いuserIdを、長いのgroupId、長いフォルダID、長いclassNameIdのサービスラッパーのフックをオーバーライドする必要が にカスタムモジュールでのWebContentメタデータカテゴリに&タグ情報を取得する方法

、長いclassPK、 文字列情報でarticleID、ブールautoArticleId、ダブルバージョン、地図titleMap、 地図descriptionMap、文字列の内容、文字列ddmStructureKey、文字列ddmTemplateKey、 文字列layoutUuid、int型displayDateMonth、int型displayDateDay、int型displayDateYear、int型displayDateHour、 int型displayDateMinute、int型expirationDateMonth、int expirationDateDay、int expirationDateYear、 int型expirationDateHour、int型expirationDateMinute、ブールneverExpire、int型reviewDateMonth、 int型reviewDateDay、int型reviewDateYear、int型reviewDateHour、int型reviewDateMinute、ブールneverReview、 ブール刃先交換式、ブールsmallImage、文字列smallImageURL、smallImageFileファイル、 地図画像、文字列articleURL、ServiceContextのこのメソッドのメタデータ情報のパラメータは、ジャーナル記事のメタデータ情報を取得する方法はありません。

+0

を参照してください? –

+0

私はそのIDに応じてカテゴリIDを取得する必要があります。サブスクリプションユーザに通知メールを送信する必要があります –

+0

ウェブコンテンツが作成または更新されると、カテゴリを読んでメールを送信する必要がありますか? –

答えて

0

これには2つの方法があります。モデルリスナーの呼び出し後に、アーティクルとカテゴリの関連付けが確立されるため、モデルリスナーの方法はややこしいことです。 idは既に割り当てられています(article.getId())が、これを克服するためにいくつかのトリッキーが必要です。

簡単なアプローチは、サービスラッパーを作成し、元のコードを呼び出してから、サービスコンテキストを使用してさらにアクションを決定することです。

Liferayメッセージバスを介して非同期メッセージを使用してメールを送信するコードのデカプリングを検討してください。

LiferayでSMTPサーバーを設定した場合は、MailServiceを使用してポータルから電子メールを送信することもできます。

は、あなたが何をすべきかをしようとしているサンプルコード

@Component(immediate = true, property = {}, service = 
ServiceWrapper.class) 
public class MailServiceWrapper extends JournalArticleServiceWrapper { 

    private static final Log _log = LogFactoryUtil.getLog(MailServiceWrapper.class); 

    @Reference 
    private MailService mailService; 

    @Reference 
    private AssetCategoryService assetCategoryService; 


    @Override 
    public JournalArticle addArticle(long groupId, long folderId, long classNameId, long classPK, String articleId, boolean autoArticleId, Map<Locale, String> titleMap, Map<Locale, String> descriptionMap, String content, String ddmStructureKey, String ddmTemplateKey, String layoutUuid, int displayDateMonth, int displayDateDay, int displayDateYear, int displayDateHour, int displayDateMinute, int expirationDateMonth, int expirationDateDay, int expirationDateYear, int expirationDateHour, int expirationDateMinute, boolean neverExpire, int reviewDateMonth, int reviewDateDay, int reviewDateYear, int reviewDateHour, int reviewDateMinute, boolean neverReview, boolean indexable, String articleURL, ServiceContext serviceContext) throws PortalException { 
    JournalArticle journalArticle = super.addArticle(groupId, folderId, classNameId, classPK, articleId, autoArticleId, titleMap, descriptionMap, content, ddmStructureKey, ddmTemplateKey, layoutUuid, displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, expirationDateMonth, expirationDateDay, expirationDateYear, expirationDateHour, expirationDateMinute, neverExpire, reviewDateMonth, reviewDateDay, reviewDateYear, reviewDateHour, reviewDateMinute, neverReview, indexable, articleURL, serviceContext); 
    sendNotification(serviceContext.getAssetCategoryIds(), journalArticle); 
    return journalArticle; 
    } 


    @Override 
    public JournalArticle addArticle(long groupId, long folderId, long classNameId, long classPK, String articleId, boolean autoArticleId, Map<Locale, String> titleMap, Map<Locale, String> descriptionMap, String content, String ddmStructureKey, String ddmTemplateKey, String layoutUuid, int displayDateMonth, int displayDateDay, int displayDateYear, int displayDateHour, int displayDateMinute, int expirationDateMonth, int expirationDateDay, int expirationDateYear, int expirationDateHour, int expirationDateMinute, boolean neverExpire, int reviewDateMonth, int reviewDateDay, int reviewDateYear, int reviewDateHour, int reviewDateMinute, boolean neverReview, boolean indexable, boolean smallImage, String smallImageURL, File smallFile, Map<String, byte[]> images, String articleURL, ServiceContext serviceContext) throws PortalException { 
    JournalArticle journalArticle = super.addArticle(groupId, folderId, classNameId, classPK, articleId, autoArticleId, titleMap, descriptionMap, content, ddmStructureKey, ddmTemplateKey, layoutUuid, displayDateMonth, displayDateDay, displayDateYear, displayDateHour, displayDateMinute, expirationDateMonth, expirationDateDay, expirationDateYear, expirationDateHour, expirationDateMinute, neverExpire, reviewDateMonth, reviewDateDay, reviewDateYear, reviewDateHour, reviewDateMinute, neverReview, indexable, smallImage, smallImageURL, smallFile, images, articleURL, serviceContext); 
    sendNotification(serviceContext.getAssetCategoryIds(), journalArticle); 
    return journalArticle; 
    } 

    private void sendNotification(long[] assetCategoryIds, JournalArticle journalArticle) throws PortalException { 
    // send mail 

    } 
} 
+0

@Override \t public void onAfterCreate(JournalArticle model)throws ModelListenerException { AssetCategoryService assetCategoryService = null; リスト assetCategories = null; \t \t試み{ \t \t \t assetCategories =のassetCategoryService.getCategories( "com.liferay.journal.model.JournalArticle"、 \t \t \t \t \t model.getClassPK())。 \t \t} catch(PortalException e){ \t \t \t \t e。printStackTrace(); \t \t}(AssetCategory assetCategory:assetCategories)用 \t \t { \t \t \tのSystem.out.println( ">>>>>>" + assetCategory.getName())。 \t \t} \t \t super.onAfterCreate(モデル)。 \t}その上映のNullPointerException。 –

+0

あなたはサービス '' '@ReferenceプライベートAssetCategoryService assetCategoryService''' –

+0

一覧 assetCategories =ヌルを注入する必要があります。 \t \t試み{ \t \t \t assetCategories =のassetCategoryService.getCategories(model.getClassName()、 \t \t \t \t \t model.getClassPK())。 \t \t \t \t \t \t \t \t \tのSystem.out.println( "assetCategoriesのサイズ:::::::::::::::::::" + assetCategories.size())。 \t \t \t \t \t}キャッチ(PortalException電子){ \t \t \t // TODO自動生成されたcatchブロック \t \t \t e.printStackTrace(); \t \t} \t私はAssetCategoryServiceへの参照を変更しました。 assetCategory \tの結果リストは0(ゼロ)になります。 model.getclassPKを確認しながら... WebContentの作成中に複数のカテゴリを選択している()0 –

関連する問題