public bool addSystemViewFilter(SystemViewPropFilterDefinition FilterDefinition, ICswNbtMetaDataDefinitionObject MatchObj = null)
 {
     return(_addSystemViewFilterRecursive(SystemView.Root.ChildRelationships, FilterDefinition, MatchObj));
 }
        private bool _addSystemViewFilterRecursive(IEnumerable <CswNbtViewRelationship> Relationships, SystemViewPropFilterDefinition FilterDefinition, ICswNbtMetaDataDefinitionObject MatchObj = null)
        {
            bool Ret = false;
            ICswNbtMetaDataDefinitionObject ExpectedObjectClass = MatchObj ?? _EnforceObjectClassRelationship;

            foreach (CswNbtViewRelationship PotentialSystemViewRelationship in Relationships)
            {
                if (null == ExpectedObjectClass || PotentialSystemViewRelationship.SecondMatches(MatchObj))
                {
                    Ret = true;
                    if (null != FilterDefinition.ObjectClassProp)
                    {
                        SystemView.AddViewPropertyAndFilter(PotentialSystemViewRelationship,
                                                            FilterDefinition.ObjectClassProp,
                                                            FilterDefinition.FilterValue,
                                                            FilterMode: FilterDefinition.FilterMode,
                                                            SubFieldName: FilterDefinition.SubFieldName,
                                                            ShowInGrid: FilterDefinition.ShowInGrid);
                    }
                    else if (FilterDefinition.FieldType == CswEnumNbtFieldType.Barcode)
                    {
                        ICswNbtMetaDataObject Object = PotentialSystemViewRelationship.SecondMetaDataDefinitionObject();
                        SystemView.AddViewPropertyByFieldType(PotentialSystemViewRelationship, Object, FilterDefinition.FieldType);
                    }
                }
                if (PotentialSystemViewRelationship.ChildRelationships.Count > 0)
                {
                    Ret = Ret || _addSystemViewFilterRecursive(PotentialSystemViewRelationship.ChildRelationships, FilterDefinition, MatchObj);
                }
            }
            return(Ret);
        }