Searching Documents (Python)

Searching Documents (Python)
 1ot = impact.gui.output_toolbox
 2db = impact.active_database
 3docSettings = db.settings.document_settings
 4
 5def SearchAndDescribeResults(search):
 6    docs = search.execute()
 7
 8    if not docs.isNone():
 9
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
17            ot.add("Page Number: " + str(docs.page_number))
18            ot.add("Page Count: " + str(docs.page_count))
19            ot.add("Total Document Count: " + str(docs.total_count))
20
21    else:
22
23        ot.add("Search failed")
24
25if (not docSettings.supports_searching) or (not docSettings.supports_searching_file_size):
26
27    ot.add("Document searching or searching file size is not supported")
28
29else:
30
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    search = db.document_search
38    nameColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcName)
39    sizeColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcSize)
40    groupColumn = docSettings.types.default_document_type.columns.known_item(ipDocumentKnownColumn.dkcGroup)
41
42    # some columns may not exist so you should check them
43    nameCriterion = None
44    try:
45        nameCriterion = search.add(nameColumn)
46    except Exception as exc:
47        pass
48    impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
49
50    nameCriterion.criterion_operator = ipDocumentCriterionOperator.dcoLike
51    nameCriterion.string_search = ipDocumentStringSearch.dssBeginsWith
52    nameCriterion.values = "ACME"
53    sizeCriterion = None
54    try:
55        sizeCriterion = search.add(sizeColumn)
56    except Exception as exc:
57        pass
58    impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
59
60    sizeCriterion.criterion_operator = ipDocumentCriterionOperator.dcoGreaterThanOrEqual
61    sizeCriterion.values = 1048576  # 1 MB
62    sizeCriterion.operator = ipDocumentOperator.doAnd
63    sizeCriterion.brackets_before = 1
64
65    # the groups must exist
66    groups = docSettings.groups
67    groupA = None
68    try:
69        groupA = groups.item("GroupA")
70    except Exception as exc:
71        pass
72    impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
73    groupB = None
74    try:
75        groupB = groups.item("GroupB")
76    except Exception as exc:
77        pass
78    impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
79    groupC = None
80    try:
81        groupC = groups.item("GroupC")
82    except Exception as exc:
83        pass
84    impact.gui.output_toolbox.add(f"Failed to create object via groups.item(): {exc}")
85    groupCriterion = None
86    try:
87        groupCriterion = search.add(groupColumn)
88    except Exception as exc:
89        pass
90    impact.gui.output_toolbox.add(f"Failed to create object via search.add(): {exc}")
91
92    groupCriterion.criterion_operator = ipDocumentCriterionOperator.dcoIn
93    groupCriterion.values = Array(groupA.ID, groupB.ID, groupC.ID)
94    groupCriterion.operator = ipDocumentOperator.doOr
95    groupCriterion.brackets_after = 1
96
97    SearchAndDescribeResults(search)
98
99ot.clear()