следуйте за "Узлы иногда искали, а другие не видели?" - PullRequest
0 голосов
/ 01 августа 2011

Цените:

Во-первых, я хотел бы поблагодарить вас за заботу об этой проблеме,

Обзор:

ПРОБЛЕМА ИСПЫТАНА В ВСТРОЕННОЙ ФУНКЦИОНАЛЬНОСТИ И КОДЕКСОМ JAVA, И РЕЗУЛЬТАТЫ ТО ЖЕ Узлы не будут отображаться после того, как сервер ALFRESCO будет запущен и снова, за исключением того, что я перехожу к домашней папке компании.

Проблема:

У меня новая модель контента, новые диалоги. Основной моделью контента является модель организации, которая расширяется от cm: content и имеет два свойства: одно для названия организации, а другое для описания организации.

В консоли администратора я щелкаю новую ссылку под названием «Создать организацию», и диалоговое окно «Создать организацию» будет запускаться правильно, а после заполнения данных и нажатия кнопки «Создать / завершить» организация будет создана правильно.

Дело 1:

Теперь все проходит правильно, но как только я выключаю Alfresco и снова запускаю его, и как только я иду прямо к браузеру узла, не передавая папку "home" компании, браузер узла не сможет увидеть мой новый узлы.

Дело 2:

Теперь все проходит правильно, но как только я выключу работу на свежем воздухе и снова запустю его, а когда войду в домашнюю папку компании и вернусь в браузер узлов, будут показаны созданные узлы.

Технические подробности

Моя модель содержимого:

<description>Security Content Model</description>
<author>MOHAMMED AMR</author>
<version>1.0</version>

<imports>
    <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
    <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm" />
    <import uri="http://www.alfresco.org/model/system/1.0" prefix="sys" />
    <import uri="http://www.alfresco.org/model/user/1.0" prefix="usr"/>
</imports>

<namespaces>
    <namespace uri="www.ds.alfresco.security.extension.com" prefix="sec" />
</namespaces>


<types>

    <type name="sec:organizationSequence">
        <title>Organization Sequence</title>
        <parent>cm:content</parent>
         <mandatory-aspects>
            <aspect>sec:sequencable</aspect>
         </mandatory-aspects>   
    </type>

    <type name="sec:positionSequence">
        <title>Position Sequence</title>
        <parent>cm:content</parent>
         <mandatory-aspects>
            <aspect>sec:sequencable</aspect>
         </mandatory-aspects>           
    </type>     

    <type name="sec:position">
        <title>Position</title>
        <parent>cm:content</parent>
        <properties>
            <property name="sec:positionId">
                <title>Position ID</title>
                <type>d:int</type>
            </property>
            <property name="sec:positionName">
                <title>Position Name</title>
                <type>d:text</type>
            </property>
            <property name="sec:positionDescription">
                <title>Position Description</title>
                <type>d:text</type>
            </property>
        </properties>               
        <associations>
            <child-association name="sec:suborindatesPositions">
                <source>
                    <mandatory>true</mandatory>
                    <many>false</many>
                </source>
                <target>
                    <class>sec:position</class>
                    <mandatory>false</mandatory>
                    <many>true</many>
                </target>
                <duplicate>false</duplicate>
                <propagateTimestamps>true</propagateTimestamps>
            </child-association>
        </associations>
    </type> 

    <type name="sec:organization">
        <title>Organization</title>
        <parent>cm:content</parent>
        <properties>
            <property name="sec:organizationId">
                <title>Organization ID</title>
                <type>d:int</type>
            </property>
            <property name="sec:organizationName">
                <title>Organization Name</title>
                <type>d:text</type>
            </property>
            <property name="sec:organizationDescription">
                <title>Organization Description</title>
                <type>d:text</type>
            </property>             
            <property name="sec:rootPosition">
                <title>Root Position</title>
                <type>d:noderef</type>
            </property>
        </properties>
    </type> 
</types>

<aspects>
    <aspect name="sec:sequencable">
        <title>Capable To Have a Sequence</title>
        <parent>cm:content</parent>
        <properties>
            <property name="sec:sequenceId">
                <title>Sequence</title>
                <type>d:int</type>
            </property>
            <property name="sec:sequenceName">
                <title>Sequence Name</title>
                <type>d:text</type>
            </property>
        </properties>
    </aspect>
</aspects>


Мой код Java:

мой код Java создаст организацию в два этапа

На первом шаге будет создан узел организации без метаданных, чтобы дать пользователю возможность ввести пользовательский шанс для ввода метаданных для организации из диалогового окна.

Первый шаг:

    public final RetryingTransactionCallback<String> CreateOrganizationCallback 
                = new RetryingTransactionCallback<String>() {
        public String execute() throws Throwable {
            // ACQUIRE THE FOLDER NODE REF
            Node organizationsFolder = new Node(NodeUtil
                    .acquireOrganizationsFolder(searchService));
            // CURRENT ORGANIZATION CREATION
            currentOrganization = new Node(
                    nodeService.createNode(
                                    organizationsFolder.getNodeRef(),
                                    ContentModel.ASSOC_CONTAINS,
                                    QName.createQName(
                                            Constants.DIGITAL_SERIES_SECURITY_MODEL_NAMEPSACE_PREFIX_STRING,
                                            Constants.TYPE_SEC_ORGANIZATION_STRING,namespacePrefixResolver),
                                    Constants.SecurityModelQNames.TYPE_SEC_ORGANIZATION,
                                    new HashMap<QName,Serializable>()).getChildRef());
            return "";
        }
    };

Второй шаг:

    public final RetryingTransactionCallback<String> CreateOrganizationCallback = new RetryingTransactionCallback<String>() {
        public String execute() throws Throwable {

            // PREPARE ORGANIZATION SEQUENCE ID
            Node organizationSeq = new Node(SequenceUtil.prepareSequence(
                    SequenceUtil.ORGANIZATION_SEQUENCE_NODE_NAME_STRING,
                    nodeService, searchService));

            // LOCK ORGANIZATION SEQUENCE
            if(!organizationSeq.isLocked()){
                lockService.lock(organizationSeq.getNodeRef(), LockType.NODE_LOCK);
                // GET THE NEXT SEQUENCE
                SequenceUtil.addCurrentSequence(organizationSeq.getNodeRef(), nodeService);
            }

            // PREPARE ORGANIZATION PROPERTIES
            Map<QName, Serializable> orgProps = new HashMap<QName, Serializable>();

            // UPDATE ORGANIZATION SEQUENCE ID
            orgProps.put(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_ID,
                            SequenceUtil.getCurrentSequence(
                                    organizationSeq.getNodeRef(), nodeService));
            // UPDATE ORGANIZATION/CONTENT NAME PROPERTY
            orgProps.put(ContentModel.PROP_NAME, 
                    NodeUtil.extractNodeProperty(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_NAME, 
                            currentOrganization).toString() + 
                    "_"+orgProps.get(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_ID)); 
            // UPDATE ORGANIZATION NAME PROPERTY
            orgProps.put(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_NAME, 
                    NodeUtil.extractNodeProperty(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_NAME, 
                            currentOrganization).toString());
            // UPDATE ORGANIZATION DESCRIPTION
            orgProps.put(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_DESCRIPTION, 
                    NodeUtil.extractNodeProperty(Constants.SecurityModelQNames.PROP_SEC_ORGANIZATION_ORGANIZATION_DESCRIPTION, 
                            currentOrganization).toString());
            // UPDATE THE PROPERTIES TO AN ORGANIZATION NODE
            nodeService.setProperties(currentOrganization.getNodeRef(), orgProps);
            // UNLOCK 
            lockService.unlock(organizationSeq.getNodeRef());

            return TO_ADMIN_CONSOLE_PAGE;
        }
    };

ПРИМЕЧАНИЕ: БЕЗ JAVA-КОДА ПОВЕДЕНИЕ БУДЕТ ЖЕ, КОГДА ВЫ СОЗДАЕТЕ СОДЕРЖАНИЕ ИЗ ТАМОЖЕННОЙ МОДЕЛИ, ИСПОЛЬЗУЯ ВСТРОЕННУЮ ФУНКЦИОНАЛЬНОСТЬ В РАМКАХ ALFRESCO

ПРИМЕЧАНИЕ: НЕ ИСПЫТЫВАЙТЕ ПРОБЛЕМУ ВСТРОЕННОЙ МОДЕЛИ, ПОЧЕМУ ПОВЕДЕНИЕ НЕ БУДЕТ ПОКАЗАНО БОЛЬШЕ.

Я жду ваших ответов.

Спасибо за вашу помощь, и все ответы приветствуются.

Мохаммед Амр Старший системный разработчик Digital Series Co.

1 Ответ

1 голос
/ 01 августа 2011

Я думаю, что вы создаете узел без метаданных.Вот почему вы не можете найти его.

Попробуйте выполнить следующее:

    Map<QName, Serializable> props = new HashMap<QName, Serializable>(10);
    props.put(ContentModel.PROP_NAME, "Testfile");

currentOrganization = new Node(
                    nodeService.createNode(
                                    organizationsFolder.getNodeRef(),
                                    ContentModel.ASSOC_CONTAINS,
                                    QName.createQName(Constants.DIGITAL_SERIES_SECURITY_MODEL_NAMEPSACE_PREFIX_STRING,                                    Constants.TYPE_SEC_ORGANIZATION_STRING,namespacePrefixResolver),
                                    Constants.SecurityModelQNames.TYPE_SEC_ORGANIZATION,
                                    props);

Важная часть заключается в том, что вы передаете метаданные cm: name узлу и предоставляете дочернее имя.

Этомой код для создания узла:

Map<QName, Serializable> props = new HashMap<QName, Serializable>(10);
                props.put(ContentModel.PROP_NAME, logFileName);
                ChildAssociationRef logRef = getNodeService().createNode(downloadFolder, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, logFileName), ContentModel.TYPE_CONTENT, props);
...