Document Paging (Python)

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