0
我已成功地使用自定義部署器填充存儲擴展表,現在我可以看到如果用戶發佈任何頁面。如何從表中使用Hibernate獲取主鍵ID,同時取消發佈Tridion頁面
現在我要處理的取消發佈的一部分,所以我寫的自定義頁面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設置爲0,因爲我無法從表中獲取ID。
請建議需要在我的DAO中實現什麼來獲取需要更新記錄的表的ID。
謝謝。
嗨丹尼爾,感謝您的回覆!使用上面的查詢,我們可以得到多個記錄,如果用戶發佈新頁面,它將在ACTION字段中添加一個帶有「ADD」的記錄,並且用戶再次發佈相同的頁面,它將在ACTION字段中添加「UPD」作爲新記錄並且如果用戶取消發佈相同的頁面,則會在ACTION中添加新記錄,並將其作爲表中的新記錄。現在在這種情況下,我將在表中有多個條目與相同的tcmuri和發佈ID,對此 –
的任何建議您好。如果需要表中的多個條目,則可以使用executeQueryListResult而不是executeQuerySingleResult,並確保您的方法返回List。然後,您可以循環遍歷它們並執行您的業務邏輯。 –