关注“有时搜索的节点和其他未见的节点?”

时间:2011-08-01 11:33:37

标签: alfresco

鉴赏:

首先,我要感谢您对此问题的关心,

概述:

问题是在内置功能和JAVA代码中测试的,结果是相同的 除非我通过公司家庭文件夹,否则不会在ALFRESCO服务器上显示节点并再次启动节点。

问题:

我有一个新的内容模型,新的对话框。主要内容模型是从cm:content扩展的组织模型,有两个属性,一个用于组织名称,另一个用于组织描述。

在管理控制台中,我点击一个名为create organization的新链接,将正确调用创建组织对话框,一旦我填写数据,我点击创建/完成按钮,组织将被正确创建。

案例1:

现在,一切都正常通过,但一旦我关闭露天并再次启动它,一旦我直接进入节点浏览器而不传递“公司主页”文件夹,节点浏览器将无法看到我的新节点

案例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内部使用内置功能创建内容时,行为将是相同的

注意:不要测试内置模型中的问题,否则行为将不会再出现。

我在等你的回复。

感谢您的帮助,我们非常感谢所有回复。

穆罕默德·阿姆 高级系统开发人员 数码系列公司

1 个答案:

答案 0 :(得分:1)

我认为您正在创建一个没有元数据的节点。这就是你无法搜索它的原因。

尝试以下方法:

    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);