사용자 배포자를 사용하여 저장 용량 확장 테이블을 성공적으로 채울 수있게되었습니다. 이제 사용자가 퍼블리시하면 내 레코드가 완벽하게 표시됩니다. 모든 페이지.Tridion 페이지를 게시 취소하는 동안 Hibernate를 사용하여 테이블을 업데이트하는 방법
는 지금은 게시 취소 부분을 처리하는, 그래서, 아래의 샘플 코드를 참조하십시오 사용자 정의 페이지 undeployer를 작성했습니다 :
위의 코드에서@SuppressWarnings({ "rawtypes" })
public void process(TransportPackage data) throws ProcessingException
{
ProcessorInstructions instructions = data.getProcessorInstructions();
try
{
for (Iterator iterator = instructions.getArguments(); iterator.hasNext();)
{
Object argument = iterator.next();
if (argument instanceof PageKey)
{
PageKey pageKey = (PageKey)argument;
TCDURI pageMetaURI = new TCDURI(pageKey.getId().getPublicationId(), 1168231104576L, pageKey.getId().getItemId());
PageMeta pageMeta = this.pageMetaHome.findByPrimaryKey(pageMetaURI.getPublicationId(),
(int)pageMetaURI.getItemId());
if (pageMeta == null)
{
DeploymentHandler.undeploy(pageMetaURI);
}
else
{
PublishAction publishAction = new PublishAction();
publishAction.setAction("DEL");
long id = publishAction.getId();
PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
publishAction = publishActionDAO.findByPrimaryKey(id);
if (publishAction == null)
{
log.debug("FindByPrimaryKey: cannot retrieve object with primary key:" + id);
}
else
{
publishAction = publishActionDAO.update(publishAction);
log.debug("SearchPageUndeployer Updated bean -" + publishAction);
}
}
}
}
}
catch (Exception e)
{
throw new ProcessingException("SearchPageUndeployer: Could not undeploy page", e);
}
super.process(data);
}
당신이 내 새로운 스토리지 확장을 업데이트하려고 볼 수 있습니다 "PublishAction", 그러나 수정하려는 레코드의 테이블에서 ID를 가져 오려고 할 때 테이블에서 ID를 가져올 수 없기 때문에 항상 ID가 0으로 표시됩니다.
내 DAO에서 업데이트해야 할 레코드의 ID를 가져 오려면 구현해야 할 것을 제안하십시오.
감사합니다.
안녕 다니엘, 답장을 보내 주셔서 감사합니다! 위의 쿼리를 사용하여 내 경우처럼 여러 레코드를 얻을 수 있습니다. 사용자가 새 페이지를 게시하면 ACTION 필드에 "ADD"가 포함 된 레코드를 추가하고 사용자가 동일한 페이지를 게시하면 ACTION 필드에 "UPD"가 새 레코드로 추가됩니다 사용자가 동일한 페이지를 게시 취소하면 ACTION에 DEL로 새 레코드가 테이블에 새 레코드로 추가됩니다. 이제이 경우 동일한 tcmuri 및 게시 ID가있는 테이블에 여러 항목이 있습니다. 여기에 대한 제안은 –
안녕하세요. 테이블에서 여러 항목이 필요한 경우 executeQuerySingleResult 대신 executeQueryListResult를 사용하고 메서드가 List을 반환하는지 확인할 수 있습니다. 그런 다음 루프를 반복하고 비즈니스 로직을 실행할 수 있습니다. –