文書操作
Ploneのカタログを使う
Ploneにはカタログツールがあり、ポータルのコンテンツオブジェクトについてクエリすることができます。
このセクションでは searchResultsメソッドについて学びます。最初にこのツールの利用について説明し、その後によくある使い方の例を示します。
First, the use of it is going to be explained, and secondly, an example of its common usage is going to be shown.
searchResults(self, REQUEST=None, **kw)このメソッドはCMFCore.CatalogTool.CatalogTool クラスにあり、ZCatalog.searchResultsメソッドを呼びます。また、検索結果をユーザのパーミッションに従って制限するように引数が渡されます。このパラメータがカタログインスタンスへのクエリを決めますが、このクエリはkeywordやmapping、あるいはREQUESTオブジェクトなどによって決まります。カタログのインデクスは、キーワード名やマッピングキー、あるいはrecordオブジェクトのアトリビュートなどによって実行されます。- recordオブジェクトのアトリビュート
- query: オブジェクトのシークエンス、あるいはqueryとしてindexに渡される値です。
- operator: 検索結果のコンビネーションを指定します(デフォルトは
OR)。キーワードインデクスやパスインデクスについてはANDやORを、テキストインデクスについてはAND、OR。ANDNOT。NEARをとります。 - range: 検索範囲をしていします(デフォルトではoff)。クエリに大きな値を渡すような検索では
minを、逆の場合はmaxを指定するとよいでしょう。またminmaxを利用することもできます。 - level: パスインデクスについてのみ利用します。検索を始める辞書レベルをしていします(デフォルトは0です)。
- recordオブジェクトのアトリビュート
例7: IDによる降順でドキュメントをリストアップする
下記はポータルのすべてのドキュメントを降順でリストアップするスクリプトです。portal_typeによってコンテンツオブジェクトの種類を制限し、sort_onやsort_orderによって順番を決めています。
results = context.portal_catalog.searchResults(sort_on="id",
portal_type="Document",
sort_order="reverse")
print [i.getObject().id for i in results]
return printed
Plone 2.1.1ではタイトルによって並べるために、sort_onパラメータにsortable_titleを指定することもできます。
カタログから得られた結果に対してgetObjectメソッドが呼ばれていることにも注意してください。これはカタログの検索結果がコンテンツオブジェクトそのものではないためです。ご想像の通り、getObjectメソッドが実際のコンテンツオブジェクトを返しています。
例8: textoを含むプライベートオブジェクトをリストアップする
それぞれのコンテンツオブジェクトは、そのオブジェクトに含まれるどの情報が検索可能となるかが決まっています。SearchableTextパラメータはその情報を検索するものです。またreview_stateパラメータは状態によってオブジェクトをフィルタリングします。
results = context.portal_catalog.searchResults(SearchableText="texto",
review_state="private")
print [i.getObject().Title() for i in results]
return printed
例9: November, 30th, 2005以降にadminによって生成されたオブジェクトをリストアップする
下記のスクリプトはrecord objectがどのようにsearchResultsメソッドへ渡されるかを示しています。Dateパラメータは特定の日付以降に生成されたオブジェクトを、Creatorパラメータはadminユーザによって生成されたオブジェクトを選り分けています。
results = context.portal_catalog.searchResults
(Date={"query": DateTime("2005/11/30"), "range": "min"},
Creator="admin")
print [i.getObject().Title() for i in results]
return printed

