Свойства из аспектов, не установленных в CMIS 1.1

У нас есть проблема с объектом Folder и пользовательскими аспектами:

...
properties.put(PropertyIds.OBJECT_TYPE_ID, "F:sd:folderDocument,P:sd:info");
properties.put("sd:cause", "asdfg");
Folder stDocument = folder.createFolder(properties);
...

Содержимое sd:cause — «ничего» в CMIS 1.1, но в CMIS 1.0 работает нормально.

НЕ РАБОТА!

params.put(SessionParameter.ATOMPUB_URL, "http://localhost:8084/alfresco/api/-default-/public/cmis/versions/1.1/atom");

РАБОТАЙ!

params.put(SessionParameter.ATOMPUB_URL, "http://localhost:8084/alfresco/api/-default-/public/cmis/versions/1.0/atom");

Нам нужна работа в версии 1.1


person Fernando González    schedule 04.03.2020    source источник


Ответы (2)


В CMIS 1.1 вы добавляете аспект, добавляя идентификатор типа аспекта к свойству cmis:secondaryObjectTypeIds. Вот пример: https://gist.github.com/jpotts/7242070

Убедитесь, что вы НЕ используете фабрику объектов alfresco из проекта расширений CMIS при использовании CMIS 1.1.

person Jeff Potts    schedule 05.03.2020
comment
Объект является настраиваемой папкой, но не обновляет свойство аспекта. - person Fernando González; 06.03.2020
comment
Хорошо, Джефф. Я обнаружил эту проблему в свойстве расширения Alfresco, и теперь все работает нормально! Спасибо! - person Fernando González; 09.03.2020

Модульный тест с cmis:secondaryObjectTypeIds:

    @Test
    public void createStDocumentWithCMIS11() {
        String folderId = "workspace://SpacesStore/03de40f1-e80d-4e0d-8b67-67e93f6e30a1";

        // Connection and session to CMIS 1.1
        HashMap<String, String> params = new HashMap<>();
        params.put(SessionParameter.ATOMPUB_URL, "http://localhost:8084/alfresco/api/-default-/cmis/versions/1.1/atom");
        params.put(SessionParameter.USER, "admin");
        params.put(SessionParameter.PASSWORD, "admin");
        params.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
        params.put(SessionParameter.OBJECT_FACTORY_CLASS, "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl");

        SessionFactory factory = SessionFactoryImpl.newInstance();
        Session session = factory.getRepositories(params).get(0).createSession();

        // Find root folder
        Folder folder = (Folder) session.getObject(folderId);
        assertNotNull(folder);

        // Properties for type
        Map<String, Object> properties = new HashMap<>();
        properties.put(PropertyIds.NAME, "Test CMIS folder type stDocument");
        properties.put(PropertyIds.OBJECT_TYPE_ID, "F:sd:structDocument");
        properties.put("sd:situation", "situation");

        // Create folder
        Folder stDocument = folder.createFolder(properties);
        assertNotNull(stDocument);

        // Add secondary objects (Aspects)
        List<Object> aspects = stDocument.getProperty("cmis:secondaryObjectTypeIds").getValues();
        aspects.add("P:sd:additionalInfo");
        HashMap<String, Object> props = new HashMap<>();
        props.put("cmis:secondaryObjectTypeIds", aspects);
        stDocument.updateProperties(props);

        // Add aspect's property
        HashMap<String, Object> propsAspects = new HashMap<>();
        propsAspects.put("sd:cause", "test");
        stDocument.updateProperties(propsAspects);

        assertEquals("test", stDocument.getProperty("sd:cause").getValueAsString());
    }

Но не работает... :(

Ошибка в JUnit

Поле пусто

person Fernando González    schedule 06.03.2020
comment
Я не понимаю, я использую объект Folder из химии, а не AlfrescoFolder и другие. - person Fernando González; 09.03.2020