2014-12-28 2 views
0

На самом деле, я пытаюсь получить файлы из текущей задачи во флигеле, но не могу найти никакого дескриптора того, как получить текущий узел. Я обнаружил, что я могу получить все дочерние nodeRefs мне нужно с помощью этого:Как получить компаниюHome для nodeService.getChildAssocs в Alfresco?

List<ChildAssociationRef> children = nodeService.getChildAssocs(companyHome) 

но here я только вижу, что мне нужно NodeRef nodeRef, QNamePattern typeQNamePattern, QNamePattern qnamePattern это по крайней мере 3 параметров один из них также NodeRef и получается что мне нужен NodeRef для получения NodeRef. Насколько я понимаю, последний nodeRef похож на родительскую папку, но как ее получить, я тоже не знаю. Кроме того, можно получить 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 может работать на любом сервере или друг. Также можно получить NodeRef с помощью Lucene, как таким образом:

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

Но это вернет мне все узлы, существующие в Alfresco. Возможно, есть возможность улучшить один из этих методов, чтобы достичь моих желаний? Или, может быть, есть другой способ?

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

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

+0

Можете ли вы разрабатывающих ниже вещи 1. «один из них также NodeRef и получается, что мне нужно, чтобы получить NodeRef NodeRef.» 2.Для этого названия «Как получить компаниюДомой для nodeService.getChildAssocs в Alfresco». Я скажу приложение: companyhome вернется в lucene, вернет companyhome. 3.Actually Я пытаюсь получить файлы из текущей задачи в alfresco, но не могу найти никакого описания того, как получить текущий узел .--> Очень запутанно –

+0

NodeRef = Файл, не так ли? для выполнения любых действий с файлами, прикрепленными к созданию задачи, мне нужны эти файлы. и я не могу понять, как их получить. Все примеры отрезаны от контекста, и невозможно, как получить параметры для этих методов –

+0

все еще не в состоянии понять? Можете ли вы поместить весь код Java? Все то, что вы создали. –

ответ

3

Попробуйте так:

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

Таким образом, вы приобрели NodeRef программно из CompanyHome узла и через него вы попали в список дочерних узлов под компании 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; 
+0

выглядит хорошо, но что такое сеанс и какой контекст здесь?и eclipce также говорит, что метод getNode (String) не определен для типа Node –