2

我正在尝试在 Tridion 2011 中编写存储扩展,我将在其中扩展JPAComponentPresentationDAO和实现ComponentPresentationDAO.

public void create(ComponentPresentation itemToCreate, ComponentPresentationTypeEnum componentPresentationType) throws StorageException 
{
    super.create(itemToCreate,componentPresentationType);   
    String tcmURI = Integer.toString(itemToCreate.getComponentId());
    Component compObject // I want Component object to get the schema ID 
    PublishActionDAO publishActionDAO = (PublishActionDAO) StorageManagerFactory.getDefaultDAO("PublishAction");
    PublishAction publishAction = new PublishAction();
    publishAction.setAction("ADD"); 
    publishAction.setTcmUri(tcmURI);
    publishActionDAO.store(publishAction);
}

在上面的示例代码中,我想使用itemToCreate.getComponentId()获取组件 ID 的位置创建 Component 对象,这样我就可以将一些有用的细节传递给我的实体类,该实体类会将这些数据存储在我的数据库表中。

4

1 回答 1

6

您将能够获取ComponentMeta从 ItemMeta 继承的 Schema Id。首先你需要ItemDAO从中获取StorageManagerFactory,然后findByPrimaryKey将给 ComponentMeta。这仅在您super.create应该将组件持久保存到代理数据库之后才有效。试试这个。

示例片段:

ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(pubid,StorageTypeMapping.COMPONENT_META);
ComponentMeta meta = (ComponentMeta) item.findByPrimaryKey(pubid,compid);
int schemaID = meta.getSchemaId() ;

注意:您需要从您的 itemToCreate tcmURI 传递 pubid、compid

于 2013-01-10T20:28:57.983 回答