これには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
}
}
を参照してください? –
私はそのIDに応じてカテゴリIDを取得する必要があります。サブスクリプションユーザに通知メールを送信する必要があります –
ウェブコンテンツが作成または更新されると、カテゴリを読んでメールを送信する必要がありますか? –