internal dynamic Search(Navigation_DTO_Search dto) { //The ExecuteReaderProcedure method requires that the parameters be contained in a List<ADO_inputParams> List <ADO_inputParams> paramList = new List <ADO_inputParams>() { new ADO_inputParams() { name = "@LngIsoCode", value = dto.LngIsoCode } }; ADO_inputParams param = new ADO_inputParams() { name = "@Search", value = dto.SearchTerms }; param.typeName = "KeyValueVarcharAttribute"; paramList.Add(param); //We need a count of search terms (ignoring duplicates caused by singularisation) //Call the stored procedure ADO_readerOutput output = ado.ExecuteReaderProcedure("System_Navigation_Search", paramList); return(output.data); }
/// <summary> /// Checks for a given Privilege Code if there are at least one account with that privilege /// </summary> /// <param name="ado"></param> /// <param name="prvCode"></param> /// <returns></returns> internal bool EnoughPrivilegesInAccounts(ADO ado, string prvCode) { ADO_inputParams param = new ADO_inputParams(); param.name = "@PrvCode"; param.value = prvCode; List <ADO_inputParams> paramList = new List <ADO_inputParams>(); paramList.Add(param); // A return parameter is required for the operation ADO_returnParam retParam = new ADO_returnParam(); retParam.name = "return"; retParam.value = 0; ado.ExecuteNonQueryProcedure("Security_Account_PrivilegeCount", paramList, ref retParam);; if (retParam.value > 1) { //There is more than one of the privilege in the account table return(true); } else { //There is one or fewer of the privileges in the account table return(false); } }
internal dynamic ReadSearchResults(DataTable dtMatrixResults, string lngIsoCode) { List <ADO_inputParams> paramList = new List <ADO_inputParams>() { new ADO_inputParams() { name = "@LngIsoCode", value = lngIsoCode }, new ADO_inputParams() { name = "@DefaultLngIsoCode", value = Configuration_BSO.GetCustomConfig(ConfigType.global, "language.iso.code") } }; ADO_inputParams param = new ADO_inputParams() { name = "@Result", value = dtMatrixResults }; param.typeName = "KeyValueVarcharAttribute"; paramList.Add(param); //Call the stored procedure ADO_readerOutput output = ado.ExecuteReaderProcedure("System_Navigation_Search_Read", paramList); return(output.data); }
/// <summary> /// Reads Group and Account information for a supplied list of Group Codes /// </summary> /// <param name="ado"></param> /// <param name="groups"></param> /// <returns></returns> internal ADO_readerOutput ReadMultiple(ADO ado, List <string> groups) { ADO_readerOutput output = new ADO_readerOutput(); List <ADO_inputParams> paramList = new List <ADO_inputParams>(); DataTable dt = new DataTable(); //dt.Columns.Add("K_VALUE"); //dt.Columns.Add("Key"); dt.Columns.Add("Value"); //We can now add each search term as a row in the table foreach (string group in groups) { var row = dt.NewRow(); //row["K_VALUE"] = word; //row["Key"] = null; row["Value"] = group; dt.Rows.Add(row); } ADO_inputParams param = new ADO_inputParams() { name = "@GroupList", value = dt }; param.typeName = "ValueVarchar"; paramList.Add(param); //Call the stored procedure output = ado.ExecuteReaderProcedure("Security_GroupAccount_ReadMultiple", paramList); //Read the result of the call to the database if (output.hasData) { Log.Instance.Debug("Data found"); } else { //No data found Log.Instance.Debug("No data found"); } //return the list of entities that have been found return(output); }
/// <summary> /// Gets Data parameters based on column and parameter /// </summary> /// <param name="aList"></param> /// <param name="columnName"></param> /// <param name="paramName"></param> /// <param name="paramType"></param> /// <returns></returns> internal ADO_inputParams GetDataTableParam(IList <string> aList, string columnName, string paramName, string paramType) { DataTable dt = new DataTable(); dt.Columns.Add(columnName); foreach (string item in aList) { var row = dt.NewRow(); row[columnName] = item; dt.Rows.Add(row); } ADO_inputParams param = new ADO_inputParams() { name = paramName, value = dt, typeName = paramType }; return(param); }
/// <summary> /// Search method /// </summary> /// <param name="dto"></param> /// <returns></returns> internal ADO_readerOutput Search(Classification_DTO_Search dto) { var inputParams = new List <ADO_inputParams>(); DataTable dt = new DataTable(); dt.Columns.Add("Value"); List <string> searchList = new List <string>(dto.Search.Split(' ')); foreach (var s in searchList) { var row = dt.NewRow(); row["Value"] = s; dt.Rows.Add(row); } ; ADO_inputParams param = new ADO_inputParams() { name = "@Search", value = dt }; param.typeName = "ValueVarchar"; inputParams.Add(param); if (dto.LngIsoCode != null) { inputParams.Add(new ADO_inputParams() { name = "@LngIsoCode", value = dto.LngIsoCode }); } var reader = ado.ExecuteReaderProcedure("Data_Classification_Search", inputParams); return(reader); }
/// <summary> /// Gets ADO parameters based on column names /// </summary> /// <param name="aList"></param> /// <param name="keyValueColumnNames"></param> /// <param name="paramName"></param> /// <param name="paramType"></param> /// <returns></returns> private ADO_inputParams GetDataTableParam(IList <KeyValuePair <string, string> > aList, KeyValuePair <string, string> keyValueColumnNames, string paramName, string paramType) { DataTable dt = new DataTable(); dt.Columns.Add(keyValueColumnNames.Key); dt.Columns.Add(keyValueColumnNames.Value); foreach (var item in aList) { var row = dt.NewRow(); row[keyValueColumnNames.Key] = item.Key; row[keyValueColumnNames.Value] = item.Value; dt.Rows.Add(row); } ADO_inputParams param = new ADO_inputParams() { name = paramName, value = dt, typeName = paramType }; return(param); }
/// <summary> /// Search method /// </summary> /// <param name="dto"></param> /// <returns></returns> internal dynamic Search(Navigation_DTO_Search dto) { //Get a keyword extractor. The keyword extractor should, if possible, correspond to the supplied LngIsoCode //If an extractor is not found for the supplied LngIsoCode then a basic default extractor is supplied. Keyword_BSO_Extract kbe = new Keyword_BSO_Extract(dto.LngIsoCode); // IKeywordExtractor extractor = kbe.GetExtractor(); //Get a list of keywords based on the supplied search term List <string> searchList = new List <string>(); List <string> searchListInvariant = new List <string>(); int searchTermCount = 0; if (dto.Search != null) { //Get a singularised version of each word searchList = kbe.ExtractSplitSingular(dto.Search); //We need a count of search terms (ignoring duplicates caused by singularisation) searchTermCount = searchList.Count; //Some words will not be searched for in their singular form (flagged on the table), so we need those as well searchListInvariant = kbe.ExtractSplit(dto.Search); //Eliminate duplicates from the list searchList = searchList.Union(searchListInvariant).ToList(); } //The list of keywords must be supplied to the search stored procedure //In order to do this, we pass a datatable as a parameter //First we create the table DataTable dt = new DataTable(); dt.Columns.Add("Key"); dt.Columns.Add("Value"); dt.Columns.Add("Attribute"); //Gather any synonyms and include them in the search, in the synonyms column foreach (string word in searchList) { var hitlist = kbe.extractor.SynonymList.Where(x => x.match == word.ToLower()); if ((kbe.extractor.SynonymList.Where(x => x.match == word.ToLower())).Count() > 0) { foreach (var syn in hitlist) { var row = dt.NewRow(); row["Key"] = syn.lemma; row["Value"] = syn.match; row["Attribute"] = Configuration_BSO.GetCustomConfig("search.synonym-multiplier"); dt.Rows.Add(row); } } else { var row = dt.NewRow(); row["Key"] = word; row["Value"] = word; row["Attribute"] = Configuration_BSO.GetCustomConfig("search.synonym-multiplier"); dt.Rows.Add(row); } //The main search term must be included along with the synonyms, i.e. a word is a synonym of itself //But with a higher search priority, which goes into the Attribute column var keyrow = dt.NewRow(); if (dt.Select("Key = '" + word + "'").Count() == 0) { keyrow["Key"] = word; keyrow["Value"] = word; keyrow["Attribute"] = Configuration_BSO.GetCustomConfig("search.search-word-multiplier"); dt.Rows.Add(keyrow); } } //Sort the search terms to ensure invariant word order in the search dt.DefaultView.Sort = "Key,Value asc"; dt = dt.DefaultView.ToTable(); //The ExecuteReaderProcedure method requires that the parameters be contained in a List<ADO_inputParams> List <ADO_inputParams> paramList = new List <ADO_inputParams>() { new ADO_inputParams() { name = "@LngIsoCode", value = dto.LngIsoCode } }; ADO_inputParams param = new ADO_inputParams() { name = "@Search", value = dt }; param.typeName = "KeyValueVarcharAttribute"; paramList.Add(param); //We need a count of search terms (ignoring duplicates caused by singularisation) paramList.Add(new ADO_inputParams() { name = "@SearchTermCount", value = searchTermCount }); if (dto.MtrCode != null) { paramList.Add(new ADO_inputParams() { name = "@MtrCode", value = dto.MtrCode }); } if (dto.MtrOfficialFlag != null) { paramList.Add(new ADO_inputParams() { name = "@MtrOfficialFlag", value = dto.MtrOfficialFlag }); } if (dto.SbjCode != default(int)) { paramList.Add(new ADO_inputParams() { name = "@SbjCode", value = dto.SbjCode }); } if (dto.PrcCode != null) { paramList.Add(new ADO_inputParams() { name = "@PrcCode", value = dto.PrcCode }); } if (dto.CprCode != null) { paramList.Add(new ADO_inputParams() { name = "@CprCode", value = dto.CprCode }); } if (dto.RlsExceptionalFlag != null) { paramList.Add(new ADO_inputParams() { name = "@RlsExceptionalFlag", value = dto.RlsExceptionalFlag }); } if (dto.RlsReservationFlag != null) { paramList.Add(new ADO_inputParams() { name = "@RlsReservationFlag", value = dto.RlsReservationFlag }); } if (dto.RlsArchiveFlag != null) { paramList.Add(new ADO_inputParams() { name = "@RlsArchiveFlag", value = dto.RlsArchiveFlag }); } if (dto.RlsAnalyticalFlag != null) { paramList.Add(new ADO_inputParams() { name = "@RlsAnalyticalFlag", value = dto.RlsAnalyticalFlag }); } //We store from the ADO because the search terms may have been changed by keyword rules MemCachedD_Value cache = MemCacheD.Get_ADO("PxStat.System.Navigation", "System_Navigation_Search", paramList); // if (cache.hasData) { return(cache.data.ToObject <List <dynamic> >()); } //Call the stored procedure ADO_readerOutput output = ado.ExecuteReaderProcedure("System_Navigation_Search", paramList); MemCacheD.Store_ADO <dynamic>("PxStat.System.Navigation", "System_Navigation_Search", paramList, output.data, new DateTime(), Resources.Constants.C_CAS_NAVIGATION_SEARCH); //return the list of entities that have been found return(output.data); }