/// <summary> /// This object is passed to the OMS class to request data for the contained tables. /// </summary> /// <param name="beforeDate">The date on of before which the data is desired.</param> /// <param name="attributes">A unique list of Attribute Stores required to perform the simulation</param> public AssetRequestOMSDataStore(DateTime beforeDate, List <AttributeStore> attributes, OMSAssetConditionIndexStore conditionIndex) { _beforeDate = beforeDate; _conditionIndex = conditionIndex; _tables = new List <AssetRequestOMSTableStore>(); if (attributes != null && attributes.Count > 0) { _assetTypeName = attributes[0].AssetType; foreach (AttributeStore attribute in attributes) { if (!attribute.IsConditionCategory && attribute.AttributeField != "AGE")//Ignore AGE which is calculated in DecisionEngine and ConditionIndices which are got with different. { int index = Tables.FindIndex(delegate(AssetRequestOMSTableStore art) { return(art.TableName == attribute.OmsTable); }); if (index < 0) { string foreignKey = null; string primaryKey = null; string foreignKeyTable = null; AssetRequestOMSTableStore table = new AssetRequestOMSTableStore(attribute.OmsTable); table.Columns.Add(new AssetRequestOMSColumnStore(attribute.AttributeField.ToString(), attribute.OmsObjectUserIDHierarchy.ToString(), attribute.AttributeField)); OMS.GetPrimaryKeyForLookups(attribute.OmsOIDHierarchy, out primaryKey, out foreignKey, out foreignKeyTable); table.PrimaryKeyColumn = primaryKey; table.ForeignKeyColumn = foreignKey; table.ForeignKeyTable = foreignKeyTable; _tables.Add(table); } else { Tables[index].Columns.Add(new AssetRequestOMSColumnStore(attribute.AttributeField.ToString(), attribute.OmsObjectUserIDHierarchy.ToString(), attribute.AttributeField)); } } } } }
/// <summary> /// Parses a DecisionEngine WHERE clause into a display element. /// </summary> public void ParseCriteria(string criteria, List <ConsequenceStore> consequences) { if (criteria != null) { criteria = RemoveDoubleWhiteSpace(criteria); _whereClause = criteria; List <string> listCriteria = new List <string>();//List of omsExpressions int lastOpen = -1; int i = 0; while (i < _whereClause.Length)//Find all expressions { if (_whereClause[i] == '(') { lastOpen = i; } if (_whereClause[i] == ')' && lastOpen >= 0) { string expression = _whereClause.Substring(lastOpen, i - lastOpen + 1); if (expression.Contains("[")) { byte numberExpressions = (byte)listCriteria.Count; string placeHolder = numberExpressions.ToString("x2"); listCriteria.Add(expression); _whereClause = _whereClause.Replace(expression, placeHolder); i = 0; } lastOpen = -1; } else { i++; } } OMSAssetConditionIndexStore oci = OMS.GetAssetConditionIndex(_assetName); _conditionIndexes = new List <ActivityConditionIndex>(); foreach (OMSConditionIndexStore ci in oci.ConditionIndexes) { List <string> conditionExpressions = new List <string>(); for (int j = 0; j < listCriteria.Count; j++) { string expression = listCriteria[j]; if (expression != null) { string attribute = "[__" + ci.AttributeDE + "]"; if (expression.Contains(attribute)) { conditionExpressions.Add(expression); //Remove expression from criteria to get non-condition index criteria criteria = criteria.Replace("AND " + expression, ""); criteria = criteria.Replace(expression, ""); listCriteria[j] = null; } } } ActivityConditionIndex activityConditionIndex = new ActivityConditionIndex(ci, conditionExpressions, consequences); _conditionIndexes.Add(activityConditionIndex); } //Pickup OverallConditionIndex List <string> OCIExpressions = new List <string>(); for (int j = 0; j < listCriteria.Count; j++) { string expression = listCriteria[j]; if (expression != null) { string attribute = "[OverallConditionIndex]"; if (expression.Contains(attribute)) { OCIExpressions.Add(expression); //Remove expression from criteria to get non-condition index criteria criteria = criteria.Replace("AND " + expression, ""); criteria = criteria.Replace(expression, ""); listCriteria[j] = null; } } } ActivityConditionIndex activityOCI = new ActivityConditionIndex(OCIExpressions, consequences); _conditionIndexes.Add(activityOCI); _criteria = criteria.Trim(); if (_criteria.Length > 3 && _criteria.Substring(0, 3) == "AND") { _criteria = _criteria.Substring(3); } } }