2017-03-09 2 views
0

Wenn ich diese https://chemistry.apache.org/docs/cmis-samples/samples/properties/index.html#retrieving-properties lese, dachte ich, es wäre möglich, sekundäre Typen mit der Methode queryObjects abzurufen, tut dies aber nicht. Zum Beispiel versuche ich cm:author von Alfresco zu erhalten, es gibt null zurück. Hier ist mein Stück Code:session.queryObjects unterstützt keine sekundären Typen.

OperationContext oc = OperationContextUtils.createMaximumOperationContext(); 
ItemIterable<CmisObject> results = session.queryObjects(task.getCmisType(), where, false, oc); 

... 

Object value = cmisObject.getPropertyValue("cm:author"); 

Fehle ich etwas?

PS: Ich verwende Chemie 1.0.0, CMIS 1.1, Bindung: Browser

UPDATE:

Gut fand ich etwas interessantes, Um cm:author abzurufen, ich habe die nachzuladen cmisObject, damit es funktioniert:

results = session.queryObjects("cmis:document", "IN_FOLDER('" + folder.getId() + "')", false, oc); 
results.each { it -> 
    object = session.getObject(it.getId()); 
    author = object.getPropertyValue("cm:author"); 

    if(author != null) { 
     println object.getId() + " => " + author; 
    } 

Fehler?

+0

Haben Sie versucht, mithilfe der Chemistry Workbench genau zu sehen, welche Eigenschaften Sie zurück erhalten und welche Präfixe auf sie angewendet werden? – Gagravarr

+0

Hoffentlich wird [@ florian-müller] (http://stackoverflow.com/users/345826/florian-m%c3%bcbller) in Kürze beraten sein! – Gagravarr

+0

Repository-Anbieter, Version und Service-URL, bitte. –

Antwort

2

Zuerst stellen Sie sicher, cm: Autor ist, was Sie wollen. Das ist nicht die Person, die den Dokumentknoten in Alfresco erstellt hat. Dies ist eine editierbare Eigenschaft, die von jedem festgelegt werden kann. Standardmäßig ist sie null.

Wenn Sie den tatsächlichen Benutzernamen der Person angeben möchten, die den Dokumentknoten erstellt hat, sollten Sie cmis: createdBy verwenden, das der cm: creator -Eigenschaft von alfresco zugeordnet ist.

Angenommen cm: Autor ist definitiv, was Sie wollen, Sie haben zwei Möglichkeiten, wie Sie es bekommen. Zuerst können Sie es vom Objekt bekommen. Aber um es vom Objekt zu holen, müssen Sie zuerst das Objekt holen. Ihre Abfrage gibt QueryResult-Objekte zurück, nicht CmisObjects.

So sollten Sie so etwas wie:

ItemIterable<QueryResult> results = session.query(queryString, false); 
for (QueryResult qResult : results) { 
    String objectId = ""; 
    PropertyData<?> propData = qResult.getPropertyById("cmis:objectId"); 
    if (propData != null) { 
     objectId = (String) propData.getFirstValue(); 
    } 
    CmisObject obj = session.getObject(session.createObjectId(objectId)); 
    // Dump the object here 
    System.out.println("Author: " + obj.getPropertyValue("cm:author"); 
} 

zweite Möglichkeit den Eigenschaftswert aus dem Abfrageergebnis zu erhalten wäre. Ihre Fähigkeit, dies zu tun, hängt von der Abfrage ab, die Sie ausgeführt haben. Die Eigenschaft "Autor" ist für einen Aspekt definiert. Sie müssen also einen Join durchführen, um ihn zurückzuerhalten. Die Abfrage könnte in etwa so aussehen:

queryString = "select content.cmis:name, content.cmis:objectId, author.cm:author from cmis:document content JOIN cm:author author ON content.cmis:objectId = author.cmis:objectId WHERE content.cmis:objectId is not null AND author.cm:author = 'Jeff'"; 

Wenn Sie diese Abfrage verwenden, dann können Sie den Autor greifen die queryresult verwendet wird, wie folgt aus:

System.out.println("Author: " + qResult.getPropertyValueByQueryName("author.cm:author")); 

Hoffentlich, dass der Unterschied zwischen Abrufen des Wertes erklärt von ein Abfrageergebnis und Abrufen eines Eigenschaftswerts aus dem Objekt selbst.

+0

Danke Jeff, 1/Hier ist die URL: https://cmis.alfresco.com/api/-default-/public/cmis/versions/1.1/browser, der Rest ist bereits angezeigt 2/I ' m verwendet 'queryObjects()' Methode, die Ergebnisse sind eine Menge von 'CmisObject'. Siehe https://chemistry.apache.org/docs/cmis-samples/samples/queries/index.html Also, noch einmal, wie kommt es, dass ich das gleiche Objekt "neu laden" muss, indem ich diese "object = session" mache. getObject (it.getId()); '? – Rapster

+0

Wie gesagt, sieht aus wie 'query()' Methode bietet mehr Möglichkeiten, unterstützt es tatsächlich JOIN, so dass Sie Ihre Auswahl restriktiver machen können. Beispiel: 'SELECT * FROM cmis: Dokument D JOIN cm: Autor P ON P.cmis: objectId = D.cmis: Objekt-ID WHERE IN_FOLDER (D, '5be4b981-c2a7-48cf-8b89-a5bb99bc0f05') UND P.cm: Autor IS NOT NULL Ich glaube nicht, dass es möglich ist, das selbe mit 'queryObjects()' zu tun, außer eine Nachbehandlung in Java durchzuführen – Rapster

+0

Keine Ahnung, was das Problem angeht? :/ – Rapster

Verwandte Themen