Liferay - 远程创建的 JournalArticle 在发布之前无法显示

Liferay - Remotely created JournalArticle not available for display until Published

我一直致力于在远程门户中创建 JournalArticle。我成功地创建了文章。但是当我尝试通过 Web 内容显示搜索它时,它不可用。

只有在我手动去远程门户发布文章后才可用。

有没有办法让文章可以显示而无需手动发布?

请按照下图进行说明。

New Title1 是我在远程 portlet 中创建的 JournalArticle。下图是刚刚创建好的文章。

我尝试select这篇文章到网页内容展示。

正如你在上面看到的,我找不到这篇文章。 我回去手动发布文章

然后我就可以在网页内容搜索中找到这篇文章了。

这真的很痛苦,因为我们需要在门户中创建期刊后立即找到它。有谁知道为什么会出现这个问题?解决方案是什么?

编辑:添加了在远程门户中创建 JournalArticle 的代码。

journalArticleSoap = journalSoap.addArticle(
    remoteGroupId,
    journalFolderSoap.getFolderId(),
    article.getClassNameId(),
    article.getClassPK(),
    "",
    true,
    LocalizationUtil.getAvailableLanguageIds(article.getTitle()),
    titleMapValues.toArray(new String[titleMapValues.size()]),
    LocalizationUtil.getAvailableLanguageIds(article.getDescription()),
    descriptionMapValues.toArray(new String[descriptionMapValues.size()]),
    content,
    article.getType(),
    article.getStructureId(),
    remoteTemplateKey,
    article.getLayoutUuid(),
    displayDate.get(Calendar.MONTH),
    displayDate.get(Calendar.DAY_OF_MONTH),
    displayDate.get(Calendar.YEAR),
    displayDate.get(Calendar.HOUR),
    displayDate.get(Calendar.MINUTE),
    0, 0, 0, 0, 0, //expirationDate
    article.getExpirationDate() == null,
    0, 0, 0, 0, 0,
    true,
    article.isIndexable(),
    article.getUrlTitle(),
    serviceContext);

journalSoap 是远程门户的 JournalArticleServiceSoap 对象。 remoteGroupId 是远程门户的全局组标识 journalFolderSoap 是在远程创建的文件夹的 JournalFolderSoap 对象。 article 是本地门户中的JournalArticle。 remoteTemplateKey为创建的远程模板的templateKey

试试这个:

journalArticleSoap = journalSoap.addArticle(
    //your code
);

journalSoap.updateStatus(journalArticleSoap.getGroupId(),
    journalArticleSoap.getArticleId(), 1, WorkflowConstants.STATUS_APPROVED, 
    journalArticleSoap.getUrlTitle(), serviceContext);

我不明白为什么会出现这个问题。但是当我在管理控制面板下执行 "Reindex all search indexes" 时,我看到问题得到了解决。

所以我写了一个代码来自动执行这个,如下所示。

try {
    String[] companyIdArray = new String[1];
    companyIdArray[0] = ""+PortalUtil.getDefaultCompanyId();
    Indexer indexer=IndexerRegistryUtil.getIndexer(JournalArticle.class);
    indexer.reindex(companyIdArray);
} catch (PortalException e) {
    e.printStackTrace();
} 

我在远程 portlet 控制器中提供了以上代码并对其进行了 REST 调用。创建 JournalArticle 后在远程环境中执行此操作修复了问题。