如何在 Liferay 7 的自定义模块中获取网页内容元数据类别和标签信息?

How to get web content meta-data categories & tags information in custom module in Liferay 7?

如何在 liferay 7 的自定义模块中获取网页内容元数据类别和标签信息。 我需要覆盖 Journal Article

的服务包装钩子

addArticle(long userId, long groupId, long folderId, long classNameId, long classPK, String articleId, boolean autoArticleId, double version, Map titleMap, 地图描述Map, String content, String ddmStructureKey, String ddmTemplateKey, 字符串 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, 布尔索引,布尔 smallImage,字符串 smallImageURL,文件 smallImageFile, 地图图片,String articleURL,ServiceContext serviceContext) throws PortalException { }

如何获取期刊文章的元数据信息,该方法中没有元数据信息参数。

有两种方法可以解决这个问题。 model listener 的方式有点tricky,因为Article 和categories 的关联是在调用model listener 之后建立的。 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

  }
}