实际上,我正在尝试从露天的当前任务中获取文件,但找不到任何有关如何获取当前节点的解密。我发现我可以使用以下方法获取我需要的所有子节点引用:
List<ChildAssociationRef> children = nodeService.getChildAssocs(companyHome)
但是here我只看到我需要NodeRef nodeRef, QNamePattern typeQNamePattern, QNamePattern qnamePattern
这些至少有 3 个参数,其中一个也是 NodeRef,事实证明我需要一个 NodeRef 来获取 NodeRef。据我了解,最后一个 nodeRef 类似于父文件夹,但我也不知道如何获取它。也可以通过 PATH 获取 NodeRef,如下所示:
StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "SpacesStore");
ResultSet rs = searchService.query(storeRef, SearchService.LANGUAGE_LUCENE, "PATH:\"/app:company_home/app:user_homes/sys:boris/cm:mypics\"");
NodeRef companyHomeNodeRef = null;
try
{
if (rs.length() == 0)
{
throw new AlfrescoRuntimeException("Didn't find Company Home");
}
companyHomeNodeRef = rs.getNodeRef(0);
}
finally
{
rs.close();
}
但我无法对路径进行硬编码,因为 Alfresco 可以在服务器或其他服务器上的任何位置运行。 也可以像这样使用 Lucene 获取 NodeRef:
SearchParameters sp = new SearchParameters();
sp.addStore(getStoreRef());
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery("TYPE:\"{http://www.alfresco.org/model/content/1.0}content\"");
ResultSet results = null;
try
{
results = serviceRegistry.getSearchService().query(sp);
for(ResultSetRow row : results)
{
NodeRef currentNodeRef = row.getNodeRef();
...
}
}
finally
{
if(results != null)
{
results.close();
}
}
但这将返回露天中存在的所有节点。 也许有可能改进其中一种方法来达到我的愿望?或者还有其他方法吗?
UPD:这是我想要获取和使用节点的代码部分:
NodeService nodeService = getServiceRegistry().getNodeService();
ContentService contentService = getServiceRegistry().getContentService();
List<ChildAssociationRef> children = nodeService.getChildAssocs(companyHome);
if (children.isEmpty()) {
throw new AlfrescoRuntimeException("Workflow bpm_package does not contain any files");
}
for(ChildAssociationRef childAssoc: children){
NodeRef childNodeRef = childAssoc.getChildRef();
FileBinary = getFileBinary(childNodeRef, contentService);
接下来我将执行文件转换。希望这能让我们了解一些情况。
最佳答案
试试这个方法:
ServiceRegistry serviceRegistry = (ServiceRegistry) context.getBean("ServiceRegistry");
Node rootNode = session.getRootNode();
//obtaining root node company home
Node companyHome = rootNode.getNode("app:company_home");
// getting noderef of company home node
NodeRef companyHomeRef = JCRNodeRef.getNodeRef(companyHome);
List<ChildAssociationRef> children = nodeService.getChildAssocs(companyHomeRef);
for (ChildAssociationRef childAssoc : children) {
NodeRef childNodeRef = childAssoc.getChildRef();
// Use childNodeRef here.
}
通过这种方式,您可以通过编程方式获取 CompanyHome 节点的 NodeRef,并通过它获得 Company Home 下的子节点列表。
使用这些导入:
import org.alfresco.jcr.api.JCRNodeRef;
import org.alfresco.service.ServiceRegistry;
import javax.jcr.Node;
import javax.jcr.Session;
import org.springframework.context.ApplicationContext;
关于java - 如何在 Alfresco 中获取 nodeService.getChildAssocs 的 companyHome ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27678049/