2017-03-09 1 views
0

これを読んで、https://chemistry.apache.org/docs/cmis-samples/samples/properties/index.html#retrieving-propertiesを読んで、私はqueryObjectsメソッドを使ってセカンダリタイプを取得することができると考えましたが、そうではありません。たとえば、アルフレコからcm:authorを取得しようとしていますが、nullを返します。ここに私のコードがあります:session.queryObjectsはセカンダリタイプをサポートしていません

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

... 

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

私には何かが欠けていますか?

PS:私は、バインディング、化学1.0.0、CMIS 1.1を使用しています:ブラウザを

UPDATE:

私はcm:authorを取得するためには、私がリロードする必要があり、何か面白いものを見つけましたオーケーcmisObjectを有効にするには:

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; 
    } 

バグ?

+0

ケミストリーワークベンチを使用して戻ってきたプロパティと、それらに適用されているプレフィックスは何ですか? – Gagravarr

+0

うまくいけば、[@ florian-müller](http://stackoverflow.com/users/345826/florian-m%c3%bcller)はちょっとアドバイスしてくれるでしょう! – Gagravarr

+0

リポジトリベンダー、バージョン、サービスURLをご記入ください。 –

答えて

2

最初に、cm:authorが必要なものであることを確認してください。これは、Alfrescoにドキュメントノードを作成した人物ではありません。これは誰でも何でも設定できる編集可能なプロパティで、デフォルトではnullです。

ドキュメントノードを作成した人物の実際のユーザ名が必要な場合は、alfrescoのcm:creatorプロパティにマップされているcmis:createdByを使用する必要があります。

cmと書いてありますが、著者は間違いなくあなたが望むものです。あなたはそれを得る方法に関して2つの選択肢があります。まず、オブジェクトから取得できます。しかし、オブジェクトからそれを取得するには、最初にオブジェクトをフェッチする必要があります。クエリーでは、CmisObjectsではなくQueryResultオブジェクトが返されます。

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"); 
} 

あなたの目のオプションは、クエリ結果からプロパティ値を取得するには、次のようになりますように

だから、何かを行う必要があります。これを行う能力は、実行したクエリによって異なります。著者プロパティはアスペクト上で定義されているため、戻すには結合を行う必要があります。

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

から値をフェッチの違いを説明してうまくいけば、このように、あなたはそのクエリを使用している場合、あなたはQueryResultではを使用して、著者をつかむことができ

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'"; 

:クエリは次のようになります照会結果とオブジェクト自体からプロパティ値を取得します。

+0

ありがとうございますJeff、 1/URLはhttps://cmis.alfresco.com/api/-default-/public/cmis/versions/1.1/browser、残りは既に表示されています 2/I ' 'queryObjects()'メソッドを使用すると、結果は 'CmisObject'の集合になります。 https://chemistry.apache.org/docs/cmis-samples/samples/queries/index.htmlを参照してください。 もう一度、この「オブジェクト=セッション」を実行して同じオブジェクトを「再読み込み」する必要があります。 getObject(it.getId()); '? – Rapster

+0

'query()'メソッドはより多くの可能性を提供していますが、JOINを実際にサポートしているため、より厳しい選択をすることができます。たとえば、次のようになります。 'SELECT * FROM cmis:document D JOIN cm:author P ON P.cmis:objectId = D.cmis:objectId IN_FOLDER(D、 '5be4b981-c2a7-48cf-8b89-a5bb99bc0f05')AND P.cm:作者IS NOT NULL '私は、' queryObjects() 'を使って同じことをすることはできないと思っています。ただし、Javaで事後処理をする以外は – Rapster

+0

問題については考えていませんか? :/ – Rapster

関連する問題