Document Paging

Document Paging
  1ot = impact.gui.output_toolbox
  2db = impact.active_database
  3doc_settings = db.settings.document_settings
  4
  5
  6def describe_docs(docs):
  7    ot.add("Document Count: " + str(docs.count))
  8    ot.add("Using Paging: " + str(docs.using_paging))
  9
 10    if (docs.using_paging):
 11        ot.add("Page Size: " + str(docs.page_size))
 12        ot.add("Page Count: " + str(docs.page_count))
 13        ot.add("Page Number: " + str(docs.page_number))
 14        ot.add("Total Document Count: " + str(docs.total_count))
 15
 16    for doc in docs:
 17        ot.add("  Document: '" + doc.name + "', Modified: " + str(doc.modified_date_time))
 18
 19
 20ot.clear()
 21
 22
 23if (not doc_settings.supports_searching) or (not doc_settings.supports_paging):
 24    ot.add("Document searching or paging is not supported")
 25
 26else:
 27    ot.add("Document searching is supported")
 28
 29    name_column = doc_settings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcName)
 30    mod_time_column = doc_settings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcModifiedDateTime)
 31
 32    ot.add("Setting up document context")
 33
 34    context = db.document_context
 35
 36    # initial paging values
 37    context.documents_page_size = 3
 38    context.initial_page_number = 1
 39
 40    if doc_settings.supports_searching_all_versions:
 41        context.search_all_versions = True
 42
 43    # we intend to access each IDocument in the collection
 44    context.load_documents = True
 45
 46    # specify sort columns
 47    context.add_sort_column(mod_time_column, False, Empty)
 48    context.add_sort_column(name_column, True, Empty)
 49
 50    # specify statuses to respect
 51    context.include_status(ipDocumentStatus.dsNormal)
 52    context.include_status(ipDocumentStatus.dsDeleted)
 53
 54    ot.add("=== Searching using IDocumentContext ===")
 55
 56    search = db.document_search
 57
 58    name_criterion = search.add(name_column)
 59
 60    name_criterion.criterion_operator = ipDocumentCriterionOperator.dcoLike
 61    name_criterion.string_search = ipDocumentStringSearch.dssContains
 62    name_criterion.values = "ACME"
 63
 64    docs = search.execute()
 65
 66    if docs is not None:
 67        ot.add("Search executed successfully")
 68
 69        describe_docs(docs)
 70
 71        ot.add("=== Changing sort order ===")
 72
 73        context.add_sort_column(name_column, False, Empty)
 74        context.add_sort_column(mod_time_column, True, Empty)
 75
 76        docs.refresh()
 77        describe_docs(docs)
 78
 79        ot.add("=== Changing statuses ===")
 80
 81        context.include_status(ipDocumentStatus.dsNormal)
 82
 83        docs.refresh()
 84        describe_docs(docs)
 85
 86        ot.add("=== Changing page number forwards ===")
 87
 88        docs.page_number = docs.page_number + 1
 89        describe_docs(docs)
 90
 91        if not doc_settings.supports_paging_forward_only:
 92            ot.add("=== Changing page number backwards ===")
 93
 94            docs.page_number = docs.page_number - 1
 95            describe_docs(docs)
 96
 97        ot.add("=== Changing page size ===")
 98        docs.page_size = 10
 99        describe_docs(docs)
100
101    else:
102        ot.add("Search failed")