2010-06-08 6 views
4

J'écris une application basée sur OpenCMIS, qui extrait des données d'Alfresco 3.3.Obtenir des propriétés d'extension Alfresco avec OpenCMIS

Il fonctionne très bien avec propriétés standard CMIS tels que cmis:name ou cmis:contentStreamMimeType; cependant, je ne peux pas accéder aux propriétés qui Alfresco spécifique dans sont présents sur l'alimentation CMIS AtomPub comme « extensions » Alfresco:

<cmisra:object> 
    <cmis:properties> 
    <cmis:propertyString propertyDefinitionId="cmis:name" displayName="Name" queryName="cmis:name"> 
     <cmis:value>test document</cmis:value> 
    </cmis:propertyString> 
    <cmis:propertyString propertyDefinitionId="cmis:contentStreamMimeType" displayName="Content Stream MIME Type" queryName="cmis:contentStreamMimeType"> 
     <cmis:value>text/html</cmis:value> 
    </cmis:propertyString> 
    ... 
    <alf:aspects> 
     ... 
     <alf:properties> 
     <cmis:propertyString propertyDefinitionId="cm:description" displayName="Description" queryName="cm:description"> 
      <cmis:value>This is just a test document</cmis:value> 
     </cmis:propertyString> 
     </alf:properties> 
    </alf:aspects> 
    </cmis:properties> 
</cmisra:object> 

Est-il possible où je peux obtenir la valeur de cm:descripcion, avec OpenCMIS? Je suppose que j'ai besoin d'utiliser l'interface DocumentType au lieu de Document, puis d'appeler sa méthode getExtensions(). Mais je ne sais pas comment obtenir une instance de DocumentType.

Toute aide serait vraiment appréciée.

Cordialement


Edit: barbante réponse de Florian a déjà travaillé pour moi, je viens de réaliser que je peux obtenir les valeurs de ces propriétés avec CMIS SQL aussi:

select d.*, t.*, a.* 
from cmis:document d 
join cm:titled t on d.cmis:objectid = t.cmis:objectid 
join cm:author a on d.cmis:objectid = a.cmis:objectid 
where t.cm:description like ... 

Répondre

3

Je crains que l'API de haut niveau OpenCMIS ne puisse pas encore accéder à toutes les extensions. C'est sur notre liste de choses à faire. Pour l'instant, vous devez utiliser l'API de bas niveau. Quelque chose comme ça devrait fonctionner:

ObjectData doc = session.getBinding().getObjectService().getObject(...); 
org.w3c.dom.Node domNode = (org.w3c.dom.Node) doc.getProperties().getExtensions().get(0); // <alf:aspects> 
domNode.getFirstChild() ... 
+0

Merci beaucoup pour votre réponse, Florian. Oui cela fonctionne. C'est presque ce que j'ai fait hier dans ma dernière tentative: session.getBinding(). GetObjectService(). GetProperties(). GetExtensions() ... J'essayais juste la réponse (Liste ) en tant que chaînes au lieu de Nodes. ----- Heureux de savoir que l'API de haut niveau peut probablement accéder à des extensions dans une prochaine version. ----- Merci encore et salutations – AJPerez

Questions connexes