鉴赏:
首先,我要感谢您对此问题的关心,
概述:
问题是在内置功能和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内部使用内置功能创建内容时,行为将是相同的
注意:不要测试内置模型中的问题,否则行为将不会再出现。
我在等你的回复。
感谢您的帮助,我们非常感谢所有回复。
穆罕默德·阿姆 高级系统开发人员 数码系列公司答案 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);