如何使用 SQL 在 Alfresco 中获取文档的名称?

How to get the name of a document in Alfresco with SQL?

如何从 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。

我 运行 这个 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/

希望对您有所帮助

祝你好运, 山姆

在 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 的主要部分)及其名称。

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

已更新

所以这是 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';

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

如果您有一些自定义类型的文档,假设 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';

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

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。