开发者

follow for "Nodes sometimes searched and others not seen ?"

开发者 https://www.devze.com 2023-03-25 13:58 出处:网络
Appreciate: Firstly, i would to thank you for your cares with this problem, Overview: THE PROBLEM IS TESTED IN THE BUILT-IN FUNCTIONALITY AND BY JAVA CODE AND THE RESULTS ARE THE SAME

Appreciate:

Firstly, i would to thank you for your cares with this problem,

Overview:

THE PROBLEM IS TESTED IN THE BUILT-IN FUNCTIONALITY AND BY JAVA CODE AND THE RESULTS ARE THE SAME NODES WILL NOT BE DISPLAYED ONCE THE ALFRESCO SERVER DOWN AND STARTED AGAIN EXCEPT I PASS TO COMPANY HOME FOLDER.

Problem:

I have a new content model, new dialogs. The main content model is the organization model which extends from cm:content and have two properties one for organization name and other for organization description.

From the admin console i click in a new link called create organization and the create organization dialog will be invoked correctly and once i fill the data and i click the create/ finish button the organization will be created correctly.

Case 1:

now,all things are passed properly but once i shutdown the alfresco and start it up again, and once i go directly toward the node browser without passing on "company home" folder the node browser will not be able to see my new nodes.

Case 2:

now, all things are passed properly but once i shut down the alfresco and start it up again, and once i enter the company home folder and return back to the node browser the nodes created will be shown.

Technical Details

My Content Model:

<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>
            &开发者_运维技巧lt;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>


My Java Code:

my java code will create the organization in two steps

The first step will create the organization node as without any metadata to give the user chance enter the user chance for enter the meta data for the organization from the dialog.

First Step:

    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 "";
        }
    };

Second Step:

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

NOTE: WITHOUT JAVA CODE, THE BEHAVIOR WILL BE THE SAME WHEN YOU CREATE CONTENT FROM CUSTOM MODEL USING BUILT-IN FUNCTIONALITY WITHIN ALFRESCO

NOTE: DO NOT TEST THE PROBLEM IN THE BUILT-IN MODEL CAUSE THE BEHAVIOR WILL NOT BE SHOWN ANYMORE.

I'm waiting your replies.

Thanks for your help and all replies are highly appreciated.

Mohammed Amr Senior System Developer Digital Series Co.


I think you're creating a node with no meta-data. That's why you can't search for it.

Try the following:

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

The important part is that you are giving the cm:name meta-data to the node and providing the childname.

This is my code to create a node:

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

精彩评论

暂无评论...
验证码 换一张
取 消