Как получить объект 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