Creating Comparison and Wildcard Filters for BCS in Visual Studio 2010
-
Monday, August 20, 2012 2:42 AM
All Replies
-
Monday, August 20, 2012 10:37 AM
Hi Ebenezer,
Please take a look at this example:
BDC Model:
<?xml version="1.0" encoding="utf-8"?> <Model Name="BCSMetaManLobSystemModel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/windows/2007/BusinessDataCatalog"> <LobSystems> <LobSystem Name="BCSMetaManLobSystem" Type="DotNetAssembly"> <LobSystemInstances> <LobSystemInstance Name="BCSMetaManLobSystemInstance"> <Properties> <Property Name="ShowInSearchUI" Type="System.String"></Property> </Properties> </LobSystemInstance> </LobSystemInstances> <Entities> <Entity Name="Territories" Namespace="BCSMetaMan.Model" Version="1.0.0.1"> <Properties> <Property Name="OriginalTableName" Type="System.String">[dbo].[Territories]</Property> <Property Name="IsCustomCode" Type="System.Boolean">false</Property> <Property Name="Class" Type="System.String">BCSMetaMan.Model.TerritoriesEntityService, BCSMetaManLobSystem</Property> <Property Name="Title" Type="System.String">TerritoryID</Property> </Properties> <Identifiers> <Identifier Name="TerritoryID" TypeName="System.String" /> </Identifiers> <Methods> <Method Name="GetAllTerritoriesEntitys"> <FilterDescriptors> <FilterDescriptor Type="Wildcard" FilterField="TerritoryDescription" Name="MyWildcardFilter" /> </FilterDescriptors> <Parameters> <Parameter Name="TerritoryDescription" Direction="In"> <TypeDescriptor Name="TerritoryDescription" TypeName="System.String" AssociatedFilter="MyWildcardFilter"> <DefaultValues> <DefaultValue MethodInstanceName="GetAllTerritoriesEntitys" Type="System.String">A</DefaultValue> </DefaultValues> </TypeDescriptor> </Parameter> <Parameter Name="returnParameter" Direction="Return"> <TypeDescriptor Name="TerritoriesList" TypeName="System.Collections.Generic.IEnumerable`1[[BCSMetaMan.Model.GetAllTerritoriesEntitysProperties, BCSMetaManLobSystem]]" IsCollection="true"> <TypeDescriptors> <TypeDescriptor Name="Territories" TypeName="BCSMetaMan.Model.GetAllTerritoriesEntitysProperties, BCSMetaManLobSystem"> <TypeDescriptors> <TypeDescriptor Name="TerritoryID" TypeName="System.String" IdentifierName="TerritoryID" ReadOnly="true" /> <TypeDescriptor Name="TerritoryDescription" TypeName="System.String" /> <TypeDescriptor Name="RegionID" TypeName="System.Int32" /> </TypeDescriptors> </TypeDescriptor> </TypeDescriptors> </TypeDescriptor> </Parameter> </Parameters> <MethodInstances> <MethodInstance Name="GetAllTerritoriesEntitys" DefaultDisplayName="GetAllTerritoriesEntitys" Default="true" Type="Finder" ReturnParameterName="returnParameter" /> </MethodInstances> </Method> <Method Name="GetSingleTerritoriesEntityByID"> <Parameters> <Parameter Name="TerritoryID" Direction="In"> <TypeDescriptor Name="TerritoryID" TypeName="System.String" IdentifierName="TerritoryID" /> </Parameter> <Parameter Name="returnParameter" Direction="Return"> <TypeDescriptor Name="Territories" TypeName="BCSMetaMan.Model.GetSingleTerritoriesEntityByIDProperties, BCSMetaManLobSystem"> <TypeDescriptors> <TypeDescriptor Name="TerritoryID" TypeName="System.String" IdentifierName="TerritoryID" ReadOnly="true"> <Properties> <Property Name="RequiredInForms" Type="System.Boolean">true</Property> </Properties> </TypeDescriptor> <TypeDescriptor Name="TerritoryDescription" TypeName="System.String"> <Properties> <Property Name="RequiredInForms" Type="System.Boolean">true</Property> </Properties> </TypeDescriptor> <TypeDescriptor Name="RegionID" TypeName="System.Int32"> <Properties> <Property Name="RequiredInForms" Type="System.Boolean">true</Property> </Properties> </TypeDescriptor> </TypeDescriptors> </TypeDescriptor> </Parameter> </Parameters> <MethodInstances> <MethodInstance Name="GetSingleTerritoriesEntityByID" DefaultDisplayName="GetSingleTerritoriesEntityByID" Default="true" Type="SpecificFinder" ReturnParameterName="returnParameter" /> </MethodInstances> </Method> </Methods> </Entity> </Entities> </LobSystem> </LobSystems> </Model>
C# code:
namespace BCSMetaMan.Model { public class TerritoriesEntityIdentifiers { [BCSColumnName("TerritoryID"), BCSIsIdentifier(true)] public string TerritoryID { get; set; } } public class GetAllTerritoriesEntitysProperties : BCSMetaMan.Model.TerritoriesEntityIdentifiers { [BCSColumnName("TerritoryDescription")] public string TerritoryDescription { get; set; } [BCSColumnName("RegionID")] public int RegionID { get; set; } } public class GetSingleTerritoriesEntityByIDProperties : BCSMetaMan.Model.TerritoriesEntityIdentifiers { [BCSColumnName("TerritoryDescription")] public string TerritoryDescription { get; set; } [BCSColumnName("RegionID")] public int RegionID { get; set; } } }
using System.Linq; using System.Collections.Generic; using System; using System.Linq.Expressions; namespace BCSMetaMan.Model { [BCSDataSource(BCSDataSourceType.SqlServer)] public class TerritoriesEntityService { public const string ConnectionString = @"Persist Security Info=False; Integrated Security=SSPI; Server=perseus\sharepoint;Connect Timeout=30;Database=Northwind;"; [BcsMethodType(MethodType.Finder)] public IEnumerable<GetAllTerritoriesEntitysProperties> GetAllTerritoriesEntitys(string TerritoryDescription) { var dataContext = new NorthwindContext(ConnectionString); var records = from record in dataContext.Territories.Where(MatchesFilterMyWildcardFilter(TerritoryDescription)) select new GetAllTerritoriesEntitysProperties { TerritoryID = record.TerritoryID, TerritoryDescription = record.TerritoryDescription, RegionID = record.RegionID }; return records; } [BcsMethodType(MethodType.SpecificFinder)] public GetSingleTerritoriesEntityByIDProperties GetSingleTerritoriesEntityByID(string TerritoryID) { var dataContext = new NorthwindContext(ConnectionString); IEnumerable<GetSingleTerritoriesEntityByIDProperties> records = from record in dataContext.Territories where record.TerritoryID == TerritoryID select new GetSingleTerritoriesEntityByIDProperties { TerritoryID = record.TerritoryID, TerritoryDescription = record.TerritoryDescription, RegionID = record.RegionID }; return records.FirstOrDefault(); } public static Expression<Func<Territories, bool>> MatchesFilterMyWildcardFilter(string WildcardFilter) { // Remove the * to get inner text for filter comparision string filterText = WildcardFilter.Replace("*", ""); // Contains Method if (WildcardFilter.StartsWith("*") & WildcardFilter.EndsWith("*")) { return (Territories => Territories.TerritoryDescription.Contains(filterText)); } // Ends With else if (WildcardFilter.StartsWith("*")) { return (Territories => Territories.TerritoryDescription.EndsWith(filterText)); } // Starts With else if (WildcardFilter.EndsWith("*")) { return (Territories => Territories.TerritoryDescription.StartsWith(filterText)); } // Equals else { return (Territories => Territories.TerritoryDescription == filterText); } } } }
The result on the page:You can also try out the product provided by the company where I work for, and name of that product is BCS Meta Man . It will allow you to generate both Database model and C# code automatically as soon as you drag and drop database tables to the design surface.
It supports the filters for .net assembly model for various data sources.
Please look at this blog post Create BCS Filters using BCS Meta Man
Dmitry
Lightning
Tools Check out our SharePoint tools and web parts |
Lightning Tools Blog -
Monday, August 20, 2012 12:29 PMI am not sure what you are trying to do. To advertise the BCS Meta Man which I know off to me or help me understand how I can Implement Filter Descriptors. This example doesn't help me in any shape or form.
Ebenezer
-
Tuesday, August 21, 2012 11:46 AM
Hi Ebenezer,
I posted the example how to create .net assembly connector with Wildcard filter in Visual Studio. If it's unclear for you please ask here.
Dmitry
Lightning
Tools Check out our SharePoint tools and web parts |
Lightning Tools Blog
- Edited by Dmitry KaloshinMicrosoft Community Contributor Tuesday, August 21, 2012 11:47 AM
- Marked As Answer by denkyira Tuesday, August 21, 2012 3:05 PM
-
Tuesday, August 21, 2012 3:05 PMThanks I got it covered
Ebenezer

