Foren

Importação de Web Content

thumbnail
Guillermo Rodolfo Mangieri, geändert vor 8 Jahren.

Importação de Web Content

Regular Member Beiträge: 166 Beitrittsdatum: 10.09.12 Neueste Beiträge
Boa Noite,

Como cita o sábio ditado popular: A esperança é a última que morre

A minha esperança é que a "Comunidade Liferay em Portugues" me de uma sugestão de conserto de algo que deve estar evidente mas, não se enxerga.

Fiz uma query dos conteudos que preciso trazer de um universo liferay para minha instância liferay.

Fiz um método de processamento de informações e os registros foram incluidos nas tabelas AssetEntry e JournalArticle, identificando DDMTemplate e DDMStrcture. Os registros estão no banco, mas, quando pego um publicador de conteudos sem filtragem alguma eles não aparecem.

Agradecerei se alguem participa fornecendo sugestões.

Pular da ponte já foi sugerido pela minha ex esposa e não deu o resultado por mim desejado.
thumbnail
Thiago Leão Moreira, geändert vor 8 Jahren.

RE: Importação de Web Content

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Boa noite Guillermo,

Você já revisou as configurações do campos status do JournalArticle? Compartilhe conosco o código que faz a importação para um melhor diagnóstico.

Abraço
thumbnail
Guillermo Rodolfo Mangieri, geändert vor 8 Jahren.

RE: Importação de Web Content

Regular Member Beiträge: 166 Beitrittsdatum: 10.09.12 Neueste Beiträge
thiago...

No dia de hoje vou "debugar" mais meu código...

Qual foi a lógica??? teve que fazer um statement/resultset do banco mysql. Passo para uma lista de Beans que vou tratar depois. Passo essa lista para uma iteração da lista onde a cada passagem faz JournalArticleServiceUtil.addArticle e AssetPublisherUtil.addAndStoreSelection.

O Código está no final desta reza (nem parece mais um mail).

O problema é que a minha structure tem campos personalizados e pelo que vi meu campo content não foram tratados CDATA dentro de labels do XML.

Exemplo de registro digitado por painel de controle:

<?xml version="1.0"?>

<root available-locales="pt_BR" default-locale="pt_BR">
<dynamic-element name="Titulo" type="text" index-type="keyword" index="0">
<dynamic-content language-id="pt_BR"><![CDATA[teste de nova noticia apos importação]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Fonte" type="text" index-type="keyword" index="0">
<dynamic-content language-id="pt_BR"><![CDATA[gui]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Autor" type="text" index-type="keyword" index="0">
<dynamic-content language-id="pt_BR"><![CDATA[gui]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Corpo" type="text_area" index-type="keyword" index="0">
<dynamic-content language-id="pt_BR"><![CDATA[lkj lkj lkj lkj lkj lkjlkjlkjlk jlkjlkjlkj lkjlkjlkj lkjlkjlkj lkjl kjjpojo i poi pi poi poi poi poi poi poipo ipoi poipo ipoipo ipoi&nbsp;]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Imagem_de_Destaque" type="image" index-type="keyword" index="0">
<dynamic-content language-id="pt_BR"></dynamic-content>
</dynamic-element>
</root>

Exemplo de campo importado:

<?xml version="1.0"?>

<root>
<dynamic-element instance-id="fB2p8n59" name="Titulo" type="text" index-type="">
<dynamic-content/>
</dynamic-element>
<dynamic-element instance-id="8VjWt94B" name="Fonte" type="text" index-type="">
<dynamic-content/>
</dynamic-element>
<dynamic-element instance-id="cEXxDMZc" name="Autor" type="text" index-type="">
<dynamic-content/>
</dynamic-element>
<dynamic-element instance-id="SywVKPeK" name="Corpo" type="ddm-text-html" index-type="">
<dynamic-content/>
</dynamic-element>
<dynamic-element instance-id="moxnutMw" name="Imagem_de_Destaque" type="wcm-image" index-type="">
<dynamic-content/>
</dynamic-element>
</root>

Código:

@ProcessAction(name="addAssetEntry")
public void addAssetEntry(ActionRequest actionRequest, ActionResponse actionResponse) throws Exception {

UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);

long groupId = ParamUtil.getLong(uploadPortletRequest, "groupId");
long classNameId = 0;
long classPK = 0;
String articleId = "";
boolean autoArticleId = true;
String type = ParamUtil.getString(uploadPortletRequest, "type");

DDMStructure ds = DDMStructureLocalServiceUtil.getStructure(Long.parseLong(structureId));
DDMTemplate dt = null;

List<DDMTemplate> templates = DDMTemplateServiceUtil.getTemplatesByStructureClassNameId(groupId, ds.getClassNameId(), 0, 99999999, null);

for (DDMTemplate ddmTemplate : templates) {
if (ddmTemplate.getClassPK()==Long.parseLong(structureId)) {
dt = ddmTemplate;
}
}

classNameId = ds.getClassNameId();

Document xsdDoc = SAXReaderUtil.read(ds.getXsd());
String layoutUuid = null;

int expirationDateMonth =0;
int expirationDateDay =0;
int expirationDateYear = 0;
int expirationDateHour =0;
int expirationDateMinute = 0;
boolean neverExpire = true;

int reviewDateMonth =0;
int reviewDateDay = 0;
int reviewDateYear =0;
int reviewDateHour = 0;
int reviewDateMinute = 0;
boolean neverReview = true;
boolean indexable = true;
boolean smallImage = false;
String smallImageURL = "";
File smallFile = uploadPortletRequest.getFile("smallFile");
Map<String, byte[]> images = new HashMap<String, byte[]>();
String articleURL ="";

ServiceContext serviceContext = ServiceContextFactory.getInstance(JournalArticle.class.getName(), actionRequest);
serviceContext.setAddGuestPermissions(true);

String description ="";
Map<Locale, String> descriptionMap = new HashMap<Locale, String>();

String defaultLanguageId = "pt_BR";
Locale defaultLocale = LocaleUtil.fromLanguageId(defaultLanguageId);
descriptionMap.put(defaultLocale, description);

List<AssetBean> assets = processFile(uploadPortletRequest);
List<AssetBean> assetsNaoImportados = new ArrayList<AssetBean>();
for (AssetBean asset: assets){

if (asset.isValid()){
Calendar cal = Calendar.getInstance();
Date date = asset.getPublishDateAsJUtilDate();
cal.setTime(date);

int displayDateMonth = cal.get(Calendar.MONTH);
int displayDateDay = cal.get(Calendar.DAY_OF_MONTH);
int displayDateYear = cal.get(Calendar.YEAR);
int displayDateHour = cal.get(Calendar.HOUR_OF_DAY);
int displayDateMinute = cal.get(Calendar.MINUTE);

Map<Locale, String> titleMap = new HashMap<Locale, String>();
String title = asset.getTitle();
String content = format(xsdDoc.getRootElement(),asset.getText());

titleMap.put(defaultLocale, title);
JournalArticle article = JournalArticleServiceUtil.addArticle(
groupId, Long.parseLong("0") , classNameId, classPK, articleId,
autoArticleId, titleMap, descriptionMap, content, type,
ds.getStructureKey(), dt.getTemplateKey(), 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
);

AssetPublisherUtil.addAndStoreSelection(
actionRequest, JournalArticle.class.getName(),
article.getResourcePrimKey(), -1);

}else{
assetsNaoImportados.add(asset);
}

}
SessionMessages.add(actionRequest, "successful");
actionRequest.setAttribute("noticiasNaoImportadas", assetsNaoImportados);
actionResponse.setRenderParameter("jspPage","/html/telas/view.jsp");

//
}

Continuo combatendo o dragão... "nois vá vencer!!!! em nome de Jesus!!!"
thumbnail
Thiago Leão Moreira, geändert vor 8 Jahren.

RE: Importação de Web Content

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Olhando rapidamente o código sugiro revisar os valores classPk e classNameId, pois a princípio eles não podem ser zero. Caso não seja esse o caso sugiro você realizar num banco de dados limpo a inserção de uma structure + template + web content via interface web e comparar com uma inserção via código dessa forma achando as diferenças e corrigindo as mesmas.

Abraço
thumbnail
Guillermo Rodolfo Mangieri, geändert vor 8 Jahren.

RE: Importação de Web Content

Regular Member Beiträge: 166 Beitrittsdatum: 10.09.12 Neueste Beiträge
Bom dia,

Eu já fiz esse teste de importado versus digitado.... até fiz uma publicação à respeito sobre o conteudo do campo content....

No caso de digitado ambos os campos que voce cita estão em zero.... Na importação, no banco acaba recebendo um dado que não lembro de cabeça se é o StructKey do DDMStructure e o outro 0.

Estou trabalhando sobre o xml que recebe content....

Se encontrar o jeito, apresentarei novos capitulos desta novela
thumbnail
Guillermo Rodolfo Mangieri, geändert vor 8 Jahren.

RE: Importação de Web Content

Regular Member Beiträge: 166 Beitrittsdatum: 10.09.12 Neueste Beiträge
Nobre Thiago e "prezada comunidade liferay do Brasil"...

Até hoje tinha meus registros dentro do meu banco, mas, eles não apareciam no front-end e nem no back-end do portal...

Só faltou entrar na configuração de servidor e clicar em reindexar buscas.

Na realidade o registro está na tabela, mas, não no index...

Nem sei se vou investir tempo para dar o comando de reindex no final do meu portlet... se alguem tiver a dica de como fazer, agradecerei... mas, não tenho muita esperança de sucesso nisso... porque estou pensando diretamente clicar no reindexar do painel de controle...

Meu cronograma está chegando ao limite e agora tenho que partir para a migração de midias.

Desde já agradeço a quem deu algum tipo de comentário para poder superar o desafio
thumbnail
Guillermo Rodolfo Mangieri, geändert vor 8 Jahren.

RE: Importação de Web Content

Regular Member Beiträge: 166 Beitrittsdatum: 10.09.12 Neueste Beiträge
Boa tarde...

Nobre Thiago e "comunidade" em geral...

A migração funcionou!!!!

Só que eis-me aqui documentando coisas para quem se interessar ou tiver que migrar de outro ambiente...

Após usar esse método que citei em publicações anteriores, verifiquei que o camplo visible na tabela AssetEntry estava em 0 e deve estar em 1, o campo displayDate na tabela JournalArticle estava em null e coloquei a data corrente com um horario anterior ao processamento de portlet e o campo classNameID na tabela JournalArticle eu tinha informado o key do className de JournalArticle e somente apareceu no painel de controle para administração quando passei para 0 (zero). Após todas essas atividades E SOMENTE APÓS ISSO (!!!!!) entrei no painel de controle > configurar > Administração do Servidor > Reindexar todos índices de busca.

Foram dias de pesquisa, reza brava e foco... imagino que na nossa comunidade alguem pode precisar e espero que façam bom uso e comentários agregando valor.

Agora a novela vai ser migrar o repositório de arquivos...

Grato, grato, grato nobre thiago
thumbnail
Thiago Leão Moreira, geändert vor 8 Jahren.

RE: Importação de Web Content

Liferay Legend Beiträge: 1449 Beitrittsdatum: 10.10.07 Neueste Beiträge
Ótimo Guillermo! Em teoria a execução da reindexação não deveria ser necessária pois o Liferay faz isso automaticamente. Se persistir acho que vale a pena uma investigação mais a fundo.

Abraço