2016-09-13 8 views
0

alfrescoでCMISを使用して一括更新することは可能ですか?CMISを使用してAlfrescoで一括更新を行う方法

私は異なるドキュメントタイプを持ち、すべてのドキュメントタイプはアルフレコリポジトリに複数のドキュメントを持っています。

私の要件は、ドキュメントの単一のプロパティを更新する場合は、同じタイプのすべてのドキュメントに反映する必要があります。

私はこれをCMISを使って行うことはできますか?

「はい」の場合は、これを実行するための手順とサンプルコードを入力してください。私は、更新をたくさん行う目的で行うことを提案する解決策は、同じタイプのオブジェクトを選択するために、CMISクエリを使用することであるアドバンス

+1

さらに詳しい情報が必要な場合ドキュメントタイプどういう意味ですか?いくつかの例を挙げてください。 –

+0

ドキュメントタイプは自分のカスタムコンテンツタイプを意味します。私はまた、異なるドキュメントタイプの異なるプロパティページを作成しました。 –

答えて

5

難しい方法は、ドキュメントをクエリし、それぞれのプロパティを設定することです。しかし、実際にはCMISの仕様がより良い方法を提供します:一括更新。私はパスで各ドキュメントをつかんいますが、もちろん、あなたがクエリを実行し、その方法だけでなく、あなたのリストを構築することができ、私の例では

ArrayList<CmisObject> docList = new ArrayList<CmisObject>(); 
Document doc1 = (Document) getSession().getObjectByPath("/bulk/bulktest1.txt"); 
docList.add(doc1); 
Document doc2 = (Document) getSession().getObjectByPath("/bulk/bulktest2.txt"); 
docList.add(doc2); 
Document doc3 = (Document) getSession().getObjectByPath("/bulk/bulktest3.txt"); 
docList.add(doc3); 

HashMap<String, Object> props = new HashMap<String, Object>(); 
props.put("cmis:description", "description set in bulk"); 
List<BulkUpdateObjectIdAndChangeToken> updatedIds = getSession().bulkUpdateProperties(docList, props, null, null); 

System.out.println("Updated " + updatedIds.size() + " docs."); 

:ここ

は、コードは次のようになります。

Alfrescoでこれを使用するには、CMIS 1.1とブラウザバインディングを使用する必要があります。サービスURLがhttp://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/browserであることを確認してください。

+0

あなたのソリューションと私の間に大きな違いはないと言っているのは間違っていますか? –

+1

@ YagamiLightこのソリューションは、一括更新で「大量」の部分を処理しています。あなたはそうではありません。 – Akah

+2

私のソリューションとあなたの違い(検索セットの結果を繰り返し、各検索結果のプロパティを設定する)は、個々のドキュメントにプロパティを設定するたびにサーバーへのアクセスとなることです。私の解決策では、クライアントはサーバーに「これらのすべてのドキュメントでこれらの変更を行う」と指示します。その場合、サーバーはすべての変更を効率的に行います。 –

1

おかげで(documentfolder ...)あなたはより多くを学ぶことができますそれについてCmis Query

まずステップと

String query; 
query = "SELECT * FROM cmis:document WHERE IN_FOLDER('" + objectId + "')"; 

と目的のテストのために私は、このクエリで特定のフォルダ内

第二ステップ今

for (QueryResult qr : resultList) { 

String idDocument = qr.getPropertyByQueryName("cmis:objectId").getFirstValue().toString(); 
Document doc = (Document) session.getObject(idDocument); 

} 

あるすべての文書を選択したことを、すべての子ども

ItemIterable<QueryResult> resultList = session.query(query, false); 

注意を取得します私は私のプロパティを更新するすべてのドキュメントを取得するために私のクエリを使用します。

あなたを助けた希望。

+0

@deepsは動作しますか? –

関連する問題