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。

謝謝。

回答

3

您可以在您的DAO中創建類似findByTCMURI的方法來根據頁面tcm uri搜索您的發佈操作。該代碼將是這樣的:

public PublishAction findByTCMURI(String tcmURI) throws StorageException { 
    StringBuilder queryBuilder = new StringBuilder(); 
    queryBuilder.append("from PublishAction pa where pa.tcmuri = :tcmuri"); 

    Map<String, Object> queryParams = new HashMap<String, Object>(); 
    queryParams.put("tcmuri", tcmURI); 

    return executeQuerySingleResult(queryBuilder.toString(), queryParams); 
} 

應該做的伎倆。 希望這有助於。

+0

嗨丹尼爾,感謝您的回覆!使用上面的查詢,我們可以得到多個記錄,如果用戶發佈新頁面,它將在ACTION字段中添加一個帶有「ADD」的記錄,並且用戶再次發佈相同的頁面,它將在ACTION字段中添加「UPD」作爲新記錄並且如果用戶取消發佈相同的頁面,則會在ACTION中添加新記錄,並將其作爲表中的新記錄。現在在這種情況下,我將在表中有多個條目與相同的tcmuri和發佈ID,對此 –

+1

的任何建議您好。如果需要表中的多個條目,則可以使用executeQueryListResult而不是executeQuerySingleResult,並確保您的方法返回List 。然後,您可以循環遍歷它們並執行您的業務邏輯。 –

相關問題