public void FindMetersBySubstation(string substationLocation) { AFElementTemplate elemTemplate = _database.ElementTemplates["MeterBasic"]; AFAttributeTemplate attrTemplate = elemTemplate.AttributeTemplates["Substation"]; AFAttributeValueQuery[] query = new AFAttributeValueQuery[1]; query[0] = new AFAttributeValueQuery(attrTemplate, AFSearchOperator.Equal, substationLocation); AFNamedCollectionList<AFElement> foundElements = AFElement.FindElementsByAttribute( searchRoot: null, nameFilter: "*", valueQuery: query, searchFullHierarchy: true, sortField: AFSortField.Name, sortOrder: AFSortOrder.Ascending, maxCount: 100); string[] meterNames = new string[foundElements.Count]; int i = 0; foreach (AFElement element in foundElements) { meterNames[i++] = element.Name; } Console.WriteLine(string.Join(", ", meterNames)); }
private AFAttributeValueQuery GetAfAttributeValueQuery(string templateName, string attributeName, object value) { AFAttributeTemplate attributeTemplate = _afDatabase.ElementTemplates[templateName].AttributeTemplates[attributeName]; var afAttributeValueQuery = new AFAttributeValueQuery(attributeTemplate, AFSearchOperator.Equal, value); return(afAttributeValueQuery); }
private static List <AFEventFrame> FindEventFramesByAttribute(string elementName, AFAttributeValueQuery afAttributeValueQuery, int page = 0, int maxCount = Int32.MaxValue) { return(AFEventFrame.FindEventFramesByAttribute( null, // Search root AFSearchMode.Inclusive, // Search mode AFTime.MinValue, // Start time AFTime.MaxValue, // End time null, // Name filter elementName, // Referenced name filter null, // Duration query new[] { afAttributeValueQuery }, // Value query true, // Search full hierarchy AFSortField.ID, // Sort field AFSortOrder.Ascending, // Sort order page * pagesize, // Start index maxCount).ToList()); // Max count }
static AFEventFrameCriteria queryToCriteria(OSIsoft.AF.Search.AFEventFrameSearch query) { AFEventFrameCriteria criteria = new AFEventFrameCriteria(); criteria.Database = query.Database; IList <AFSearchToken> starts; query.TryFindSearchTokens(OSIsoft.AF.Search.AFSearchFilter.Start, out starts); IList <AFSearchToken> ends; query.TryFindSearchTokens(OSIsoft.AF.Search.AFSearchFilter.End, out ends); AFSearchToken templatename; query.TryFindSearchToken(OSIsoft.AF.Search.AFSearchFilter.Template, out templatename); IList <AFSearchToken> values; query.TryFindSearchTokens(OSIsoft.AF.Search.AFSearchFilter.Value, out values); if (values.Count != 0) { AFAttributeValueQuery[] queries = new AFAttributeValueQuery[values.Count]; criteria.AttributeValueQueries = new AFAttributeValueQuery[values.Count]; criteria.TemplateName = templatename.Value; for (int i = 0; i < values.Count; i++) { AFSearchToken value = values[i]; string attributeName = value.Path.TrimStart(new char[] { '|' }); AFElementTemplate template = query.Database.ElementTemplates[templatename.Value]; AFAttributeTemplate templateAttribute = template.AttributeTemplates[attributeName]; queries[i] = new AFAttributeValueQuery(templateAttribute, value.Operator, value.Value, templateAttribute.DefaultUOM); criteria.AttributeValueQueries[i] = new AFAttributeValueQuery(templateAttribute, value.Operator, value.Value, templateAttribute.DefaultUOM); } //criteria.AttributeValueQueries = queries; //criteria.ValueQueryString = value.ToString(); //criteria. } if (ends.Count == 2) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.EndingBetween; criteria.StartTime = ends[0].Value; criteria.EndTime = ends[1].Value; } else if (starts.Count == 2) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.StartingBetween; criteria.StartTime = starts[0].Value; criteria.EndTime = starts[1].Value; } else if (starts.Count == 1 && ends.Count == 1) { AFSearchToken start = starts[0]; AFSearchToken end = ends[0]; if (start.Operator == AFSearchOperator.LessThanOrEqual && end.Operator == AFSearchOperator.GreaterThanOrEqual) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.ActiveBetween; criteria.StartTime = end.Value; criteria.EndTime = start.Value; } else if (start.Operator == AFSearchOperator.GreaterThanOrEqual && end.Operator == AFSearchOperator.LessThanOrEqual) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.EntirelyBetween; criteria.StartTime = start.Value; criteria.EndTime = end.Value; } } else if (starts.Count == 1) { AFSearchToken start = starts[0]; if (start.Operator == AFSearchOperator.GreaterThanOrEqual) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.StartingAfter; } else { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.StartingBefore; } criteria.AFStartTimeString = start.Value; } else if (ends.Count == 1) { AFSearchToken end = ends[0]; if (end.Operator == AFSearchOperator.GreaterThanOrEqual) { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.EndingAfter; } else { criteria.SearchType = OSIsoft.AF.UI.Search.AFBaseEventFrameCriteria.EventFrameSearchType.EndingBefore; } criteria.AFStartTimeString = end.Value; } criteria.LastFullSearchString = stripTokens(query); return(criteria); }