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)