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()