2012-04-05 61 views
0

我想在我的java类中获取上传到默认根目录的文件的节点ref。我试过this链接。alfresco - 获取上传文件的noderef

但它返回空结果集。我如何编写搜索查询来获取特定的文件节点。或者有没有什么办法可以在java类中创建节点ref。

我的代码:

NodeRef companyHomeNodeRef = null; 
      StoreRef storeRef = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, 
        "SpacesStore"); 

      ResultSet rs = searchService.query(storeRef, 
        SearchService.LANGUAGE_LUCENE, "\\\"/app:company_home/app:user_homes/sys:boris/cm:mypics\\"); 

      try { 
       System.out.println("length :" + rs.length()); 
       if (rs.length() == 0) { 
        // throw new Exception("Didn't find Company Home"); 
       } else { 
        companyHomeNodeRef = rs.getNodeRef(0); 
       } 
      } finally { 
       rs.close(); 
      } 

感谢

回答

0

我已经解决了这个问题。以下是从节点ref字符串创建文件的节点引用并更新文件内容的代码。

  AuthenticationUtil.runAs(new RunAsWork<String>() { 

       @Override 
       public String doWork() throws Exception { 

        NodeRef nodeRef = new NodeRef("workspace://SpacesStore/f1a5e908-80cb-4c6e-b919-cc80fe53b835"); 
        if(contentService != null) { 
         ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true); 
         if(writer != null) { 
          writer.putContent(new ByteArrayInputStream("updated content".getBytes())); 
         } 
        } 
        return null; 
       } 

      }, AuthenticationUtil.getSystemUserName()); 
+0

我不明白,magic noderef字符串是从哪里出现的? – Gagravarr 2012-04-12 08:55:23

+0

我使用这段代码的页面,我有节点ref字符串。由于我是新来的户外,早些时候我正在努力创建文件的节点参考。此外,我的原始代码无法正常工作,甚至尝试在查询浏览器中测试查询。 – mahesh 2012-04-13 08:38:06

2

你Lucene搜索语法不正确。如果你想要上传图片的文件夹,你可以使用: PATH:“/ app:company_home/app:user_homes/cm:boris/cm:mypics”

如果你想让对象坐在那文件夹,你可以使用: PATH:“/ app:company_home/app:user_homes/cm:boris/cm:mypics/*”

如果你想在该文件夹中有一个特定的对象, : PATH: “/应用程序:company_home /应用:user_homes /厘米:鲍里斯/厘米:mypics /厘米:test.png”

测试您的查询,一个好的工具是节点浏览器,可在这两个露天Explorer和Alfresco分享。一定要选择“Lucene”作为搜索语法,然后尝试查询。一旦他们返回你正在寻找的对象,将其插入到你的Java代码中。

+0

感谢您的回复以及您编写的所有教程。这些从一开始就非常有帮助。我的文件位于repository/sites/mysite/documentlibrary/myfolder/myfile。我正在尝试PATH:“/ app:company_home/app:user_homes/cm:mysite/cm:doclib/cm:myfolder/cm:myfile”。但对我而言并没有任何结果。查询“PATH:”/ app:company_home/app:user_homes/cm:mysite“显示的是cm:doclib节点,我是否错过了一些内容?一个,我在层次结构中的任何地方都看不到这个目录。 – mahesh 2012-04-06 09:27:41

+0

Jeff,上面的java代码正在为此“PATH:”/ app:company_home“查询返回空结果集。节点浏览器也一样。我是否需要更新java代码?实际上,我的目标是获取文件的节点ref并从java代码更新它的内容。有没有更好的选择来做到这一点? – mahesh 2012-04-06 10:04:43

+1

mahesh,如果你还没有这样做,去看节点浏览器。在Alfresco Explorer中,它位于管理控制台中。在Share中,它位于“More,Application”下面。节点浏览器将帮助您理解回购的层次结构。例如,如果您的文件位于repository/sites/mysite/documentlibrary/myfolder/myfile下,则路径将为/ app:company_home/st:sites/cm:mysite/cm:documentLibrary/cm:myfolder/cm:myfile。 – 2012-04-09 16:16:02