2015-05-08 2 views
0

Как получить имя документа из базы данных Alfresco (PostgreSQL)? Я пытаюсь получить список документов, созданных данным пользователем, например. admin, начиная с даты начала, например. 2015-05-03:Как получить имя документа в Alfresco с SQL?

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 

Как получить фактические документы, а не все элементы контента? Поскольку теперь он также отображает полные ссылки на узлы, и я просто хочу, чтобы имя пользователя было прочитано человеком. Какие-либо предложения?

Кстати, я работаю над фоновым (репозиторием), а не по Share. И я использую Alfresco 5.0.1.

+0

Я бы предложил добавить пространство имен, поскольку свойство 'content' могло бы поступать из разных пространств имен (если вы добавили пользовательские типы). Для этого вам нужно присоединиться к 'alf_namespace' на' uri'. В этом случае добавьте это в 'where':' и qname.ns_id = alf_namespace.id и alf_namespace.uri = 'http: // www.alfresco.org/model/content/1.0'' – streetturtle

+1

Мое я спрашиваю, почему на земле вы хотите это сделать? :) –

+0

Да, конечно. Пример реальной жизни: в проекте, над которым я работаю, у нас есть два сайта: один для кадровых документов и второй для финансовых документов. Поскольку это разные (пользовательские) типы документов, они (документы) имеют разные пространства имен: 'http: // www.mycomp.com/staff/content/1.0' и' http://www.mycomp.com/finance/content/1.0'. Поэтому, очевидно, имеет смысл фильтровать документы по типам. [Здесь] (http://ecmarchitect.com/alfresco-developer-series-tutorials/content/tutorial/tutorial.html) вы можете найти дополнительную информацию о пользовательских типах. – streetturtle

ответ

0

Основываясь на других anwsers я создал этот вопрос:

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.

Спасибо, Сэм, Gagravarr и streetturtle.

3

Я побежал этот SQL скрипт, чтобы найти эквивалентную QName идентификатор для этого свойства

select * from alf_qname where local_name='name'; 

Я получил 2 строки с идентификатором 21 и 29, но выяснил интересный один 29.

SELECT * FROM alf_node_properties where qname_id = '29'; 

Вы получите имя для любого узла не только файлов.

Вы можете найти полезные запросы http://streetturtle.ninja/2015/05/01/usefule-alfresco-queries/

Надеется, что это поможет

Успехов, Сэма

+0

Эти запросы в ссылке очень полезны. – Teysz

+0

Ссылка изменилась: http://pavelmakhov.com/2015/05/usefule-alfresco-queries – streetturtle

1

В Alfresco, название документа является свойством типа cm:name/http://www.alfresco.org/model/content/1.0:name

Итак, сначала найдите идентификатор этого qname. Он может варьироваться между установками 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) 

Теперь поиск документов по названию, используя идентификатор оттуда:

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

Это даст вам все узловые UUID, (основная часть noderef) вместе с их именами ,

При необходимости добавьте фильтры узлов!

+0

Мне не нужны UUID, и запрос по-прежнему показывает эти noderefs как имя, могут ли они также быть отфильтрованы? – Teysz

4

Обновлено

Так вот 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'; 
+0

Это работает, но я должен отметить, что моя версия использует qname_id 28. – Teysz

+0

Спасибо! Я изменю его. – streetturtle

Смежные вопросы