【问题标题】:How to get the name of a document in Alfresco with SQL?如何使用 SQL 在 Alfresco 中获取文档的名称?
【发布时间】:2015-05-12 20:29:44
【问题描述】:

如何从 Alfresco 数据库 (PostgreSQL) 中检索文档的名称?我正在尝试获取给定用户创建的文档列表,例如管理员,从开始日期开始,例如2015-05-03:

SELECT child.child_node_name, node.audit_created
FROM alf_child_assoc child, alf_node node, alf_node_properties prop, alf_qname qname
WHERE child.child_node_id = node.id
AND node.id = prop.node_id
AND prop.qname_id = qname.id
AND qname.local_name = 'content'
AND node.audit_creator = 'admin'
AND node.audit_created > '2015-05-03'
ORDER BY node.audit_created

如何获取实际文档而不是所有内容项? 因为现在它还显示完整的节点引用,我只想要文档的人类可读名称。有什么建议吗?

顺便说一句,我正在处理后端(存储库),而不是共享。我正在使用 Alfresco 5.0.1。

【问题讨论】:

  • 我建议添加一个命名空间,因为属性content 可能来自不同的命名空间(如果您添加了自定义类型)。为此,您需要在uri 上加入alf_namespace。在您的情况下,将此添加到 where: and qname.ns_id = alf_namespace.id and alf_namespace.uri = 'http://www.alfresco.org/model/content/1.0'
  • 我问你到底为什么要这样做? :)
  • 是的,当然。现实生活中的例子:在我正在进行的项目中,我们有两个站点:一个用于人事文件,第二个用于财务文件。由于它是不同(自定义)类型的文档,它们(文档)具有不同的命名空间:http://www.mycomp.com/personnel/content/1.0http://www.mycomp.com/finance/content/1.0。所以显然按类型过滤文档是有意义的。 Here你可以找到更多关于自定义类型的信息。
  • 那么,为什么不在露天使用 search.luceneSearch 方法 docs.alfresco.com/5.0/references/API-JS-luceneSearch.html 运行一个简单的脚本,然后在日志文件或带有要读取的 json 对象的 webscript 中提取您需要的所有信息?我不确定当您在顶部安装 Solr 和 Lucene 以询问存储库中的所有数据时,为什么人们会询问 Alfresco db。
  • 对不起,我忘了编辑我的评论:在这里你可以使用 alfresco JS:@cm\:creator:"admin" 和 @cm\:created:"[2003\-12\- 16T00:00:00 TO MAX]" 和 TYPE:"cm:content" 把它放在 luceneSearch 方法中,你就已经准备好了:)

标签: postgresql alfresco


【解决方案1】:

更新

所以这里是你需要使用的SQL,这个为cm:content输入:

select nd.audit_creator as creator, 
       np.string_value as document_name, 
       nd.audit_created as created_on
  from alf_node as nd, alf_node_properties as np, 
       alf_namespace ns, alf_qname qn, alf_qname qn1
 where nd.id=np.node_id
   and qn.ns_id = ns.id
   and nd.type_qname_id = qn.id
   and ns.uri = 'http://www.alfresco.org/model/content/1.0'
   and qn.local_name = 'content'
   and qn1.ns_id = ns.id
   and np.qname_id = qn1.id
   and qn1.local_name = 'name'
   and nd.audit_created > '2015-05-06 14:59:00';

它将返回人类可读的文档名称、创建者的用户名和创建此文档的日期。

如果您有一些自定义类型的文档,比如说ep:content 和命名空间http://www.mycomp.com/model/epersonnel/1.0,这个查询就可以完成工作:

select nd.audit_creator as creator, 
       np.string_value as document_name, 
       nd.audit_created as created_on
  from alf_node as nd, alf_node_properties as np, 
       alf_namespace ns, alf_namespace ns1, alf_qname qn, alf_qname qn1
 where nd.id=np.node_id
   and qn.ns_id = ns.id
   and nd.type_qname_id = qn.id
   and ns.uri = 'http://www.mycomp.com/model/epersonnel/1.0'
   and qn.local_name = 'content'
   and ns1.uri = 'http://www.alfresco.org/model/content/1.0'
   and np.qname_id = qn1.id
   and qn1.ns_id = ns1.id
   and qn1.local_name = 'name'
   and nd.audit_created > '2015-05-06 14:59:00';

【讨论】:

  • 它有效,但我应该注意我的版本使用 qname_id 28。
  • 谢谢!我会改的。
【解决方案2】:

我运行了这个 SQL 脚本来找到这个属性的等效 qname id

select * from alf_qname where local_name='name';

我得到了 2 行,id 为 21 和 29,但发现有趣的是 29。

SELECT * FROM alf_node_properties where qname_id = '29';

您将获得任何节点的名称,而不仅仅是文件。

你可以找到有用的查询http://streetturtle.ninja/2015/05/01/usefule-alfresco-queries/

希望有帮助

祝你好运, 山姆

【讨论】:

【解决方案3】:

在 Alfresco 中,文档的名称是 cm:name / http://www.alfresco.org/model/content/1.0:name 类型的属性

所以,首先,找到那个 qname 的 ID。根据安装过程中添加的顺序,Alfresco 安装之间可能会有所不同,但对于 Alfresco 存储库来说它将是不变的。查询是:

=> select * from alf_qname where ns_id IN 
     (select ns.id from alf_namespace as ns 
     where ns.uri='http://www.alfresco.org/model/content/1.0') 
   and local_name='name';
 id | version | ns_id | local_name 
----+---------+-------+------------
 29 |       0 |     6 | name
(1 row)

现在,使用那里的 ID 按名称搜索文档:

select uuid, string_value AS name from alf_node 
   inner join alf_node_properties on (id=node_id) 
   where qname_id = 29;

这将为您提供所有节点 UUID(noderef 的主要部分)及其名称。

根据需要添加更多节点过滤器!

【讨论】:

  • 我不需要 UUID 并且查询仍然将这些 noderefs 显示为名称,是否也可以过滤它们?
【解决方案4】:

基于我创建此查询的其他答案:

SELECT string_value AS document_name, audit_created AS creation_date
FROM alf_node node
INNER JOIN alf_node_properties ON (id=node_id)
INNER JOIN alf_qname ON (qname_id=alf_qname.id)
WHERE ns_id IN
(SELECT ns.id FROM alf_namespace AS ns
WHERE ns.uri='http://www.alfresco.org/model/content/1.0')
AND local_name='name'
AND audit_creator = 'admin'
AND audit_created > '2015-05-06'
ORDER BY audit_created;

这样您就不必知道 qname_id。

谢谢 Sam、Gagravarr 和 streetturtle。

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多