Document Search Criteria¶
Document Search Criteria¶
1ot = impact.gui.output_toolbox
2db = impact.active_database
3doc_settings = db.settings.document_settings
4
5
6def search_and_describe_results(search):
7 docs = search.execute()
8
9 if docs is not None:
10 ot.add("Search executed successfully")
11
12 ot.add("Document Count: " + str(docs.count))
13 ot.add("Using Paging: " + str(docs.using_paging))
14
15 if (docs.using_paging):
16 ot.add("Page Number: " + str(docs.page_number))
17 ot.add("Page Count: " + str(docs.page_count))
18 ot.add("Total Document Count: " + str(docs.total_count))
19
20 else:
21 ot.add("Search failed")
22
23
24ot.clear()
25
26
27if (not doc_settings.supports_searching) or (not doc_settings.supports_searching_file_size):
28 ot.add("Document searching or searching file size is not supported")
29
30else:
31 ot.add("Document searching is supported")
32
33 # This is the document search we are building expressed as an psuedo SQL where clause
34 # ipDocumentKnownColumn.dkcName like "ACME%" and (ipDocumentKnownColumn.dkcSize >= 1048576 or ipDocumentKnownColumn.dkcGroup in ("GroupA", "GroupB", "GroupC"))
35
36 ot.add("=== Searching using multiple criteria ===")
37
38 search = db.document_search
39
40 name_column = doc_settings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcName)
41 size_column = doc_settings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcSize)
42 group_column = doc_settings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcGroup)
43
44 # some columns may not exist so you should check them
45
46 name_criterion = search.add(name_column)
47
48 name_criterion.criterion_operator = ipDocumentCriterionOperator.dcoLike
49 name_criterion.string_search = ipDocumentStringSearch.dssBeginsWith
50 name_criterion.values = "ACME"
51
52 size_criterion = search.add(size_column)
53
54 size_criterion.criterion_operator = ipDocumentCriterionOperator.dcoGreaterThanOrEqual
55 size_criterion.values = 1048576 # 1 MB
56 size_criterion.operator = ipDocumentOperator.doAnd
57 size_criterion.brackets_before = 1
58
59 # the groups must exist
60 groups = doc_settings.groups
61
62 group_a = groups.item("GroupA")
63 group_b = groups.item("GroupB")
64 group_c = groups.item("GroupC")
65
66 group_criterion = search.add(group_column)
67
68 group_criterion.criterion_operator = ipDocumentCriterionOperator.dcoIn
69 group_criterion.values = [group_a.id, group_b.id, group_c.ID]
70 group_criterion.operator = ipDocumentOperator.doOr
71 group_criterion.brackets_after = 1
72
73 search_and_describe_results(search)