Как получить объект Component в расширении хранилища Component Presentation

Я пытаюсь написать расширение хранения в 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() где я получаю идентификатор компонента, чтобы я мог передать некоторые полезные подробности моему классу сущностей, который будет хранить эти данные в моей таблице базы данных.

1 ответ

Решение

Вы сможете получить идентификатор схемы от ComponentMeta который унаследован от ItemMeta. Сначала вам нужно получить ItemDAO от StorageManagerFactory а потом findByPrimaryKey даст КомпонентМета. Это работает только после вашего super.create который должен сохранить компонент для брокера БД. Попробуйте это.

Образец фрагмента:

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

Примечание: вам нужно передать pubid, compid от вас itemToCreate tcmURI

Другие вопросы по тегам