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));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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
 }
Beispiel #4
0
        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);
        }