protected void btnSearch_Click(object sender, EventArgs e) { var searchBuilder = new SearchBuilder(Search.FromManifest(MultiStepWizards.SearchResumeBank.SearchManifest)); MultiStepWizards.SearchResumeBank.SearchBuilder = searchBuilder; cfsSearchCriteria.Harvest(); MemberSuiteObject mso = cfsSearchCriteria.MemberSuiteObject; string keywords = tbKeywords.Text; if (!string.IsNullOrWhiteSpace(keywords)) { searchBuilder.AddOperation( new Keyword { FieldName = "File", ValuesToOperateOn = new List <object> { keywords } }, SearchOperationGroupType.And); } ParseSearchCriteria(targetCriteriaFields, mso, searchBuilder); string nextUrl = "~/careercenter/SearchResume_Results.aspx"; if (rblOutputFormat.SelectedValue == "zip") { nextUrl += "?output=zip"; } GoTo(nextUrl); }
protected void ParseSearchCriteria(List <FieldMetadata> targetCriteriaFields, MemberSuiteObject criteria, SearchBuilder sb) { foreach (var fieldMetadata in targetCriteriaFields) { string fieldName = Formats.GetSafeFieldName(fieldMetadata.Name); bool found = false; if (_isValidRange(criteria.SafeGetValue(fieldName + "__from"))) { // let's create a greater than sb.AddOperation(Expr.IsGreaterThanOrEqualTo(fieldMetadata.Name, criteria[fieldName + "__from"]), SearchOperationGroupType.And); found = true; } if (_isValidRange(criteria.SafeGetValue(fieldName + "__to"))) { // let's create a less than sb.AddOperation(Expr.IsLessThanOrEqual(fieldMetadata.Name, criteria[fieldName + "__to"]), SearchOperationGroupType.And); found = true; } if (found || !criteria.Fields.ContainsKey(fieldName)) { continue; } var fieldValue = criteria.Fields[fieldName]; if (fieldValue == null) { continue; } SearchOperation so = new Equals(); //default so.ValuesToOperateOn = new List <object> { fieldValue }; if (fieldValue is string) { string fieldValueAsString = (string)fieldValue; if (String.IsNullOrWhiteSpace(fieldValueAsString)) { continue; } if (fieldMetadata.DataType == FieldDataType.Boolean) { bool b = false; if (Boolean.TryParse(fieldValueAsString, out b)) { so.ValuesToOperateOn = new List <object>() { b } } ; } else { so = new Contains(); //string should use contains instead of equals so.ValuesToOperateOn = new List <object>() { fieldValueAsString.Trim() }; } } if (fieldValue is List <string> ) { List <string> fieldValueAsList = fieldValue as List <string>; if (fieldValueAsList.Count == 0) { continue; } so = new ContainsOneOfTheFollowing(); //Lists just look for one hit List <object> values = new List <object>(); values.AddRange(fieldValueAsList); so.ValuesToOperateOn = values; } so.FieldName = fieldMetadata.Name; sb.AddOperation(so, SearchOperationGroupType.And); } }