SharePoint Developer Center >
SharePoint Products and Technologies Forums
>
SharePoint - Business Data Catalog
>
SpecificFinder error from Business Data Item web part
SpecificFinder error from Business Data Item web part
- I am getting the following error when I try to use my SpecificFinder from the Business Data Item web part. I attached a simplified version of my ADF that repro's the issue below.
Could not find fields to insert all the Identifier Values to correctly execute a SpecificFinder MethodInstance with Name 'PersonSpecificFinderInstance'. Ensure input Parameters have TypeDescriptors associated with every Identifier defined for this Entity.
I am staring at this and I just don't see the problem. I checked all the TypeDescriptors and I think I have <IdentifierName> defined for the <Identifier>. This seems like one of the "too close to the code to see the obvious" issues.
Thanks,
curt
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<LobSystem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:schemaLocation="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog BDCMetadata.XSD" Type="Database" Version="1.0.0.0" Name="HimcoPeople" xmlns="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog" xsi:schemaLocation="http://schemas.microsoft.com/office/2006/03/BusinessDataCatalog \\ad1hfdhmc903\c$\PROGRA~1\MICROS~1\12.0\Bin\bdcmetadata.xsd">
<Properties>
<Property Name="WildcardCharacter" Type="System.String">%</Property>
</Properties>
<LobSystemInstances>
<LobSystemInstance Name="HimcoPeople">
<Properties>
<Property Name="DatabaseAccessProvider" Type="System.String">SqlServer</Property>
<Property Name="AuthenticationMode" Type="System.String">RevertToSelf</Property>
<Property Name="RdbConnection Data Source" Type="System.String">sqlDEVidpi\interactive</Property>
<Property Name="RdbConnection Initial Catalog" Type="System.String">WorkArea</Property>
<Property Name="RdbConnection Integrated Security" Type="System.String">SSPI</Property>
<Property Name="RdbConnection Pooling" Type="System.String">false</Property>
</Properties>
</LobSystemInstance>
</LobSystemInstances>
<Entities>
<Entity EstimatedInstanceCount="600" Name="Person">
<Properties>
<Property Name="Title" Type="System.String">DomainId</Property>
</Properties>
<Identifiers>
<Identifier Name="DomainId" TypeName="System.String"/>
</Identifiers>
<Methods>
<Method Name="GetPerson">
<Properties>
<Property Name="RdbCommandText" Type="System.String">
<![CDATA[
SELECT Name, DomainId
FROM People.[V_Person]
WHERE DomainId = @DomainId
]]>
</Property>
<Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
</Properties>
<FilterDescriptors>
<FilterDescriptor Type="Comparison" Name="DomainId" />
</FilterDescriptors>
<Parameters>
<Parameter Direction="In" Name="@DomainId" DefaultDisplayName="DomainId">
<TypeDescriptor TypeName="System.String" Name="DomainId" />
</Parameter>
<Parameter Direction="Return" TypeReflectorTypeName="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbTypeReflector" Name="Person">
<TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="PersonDataReader">
<TypeDescriptors>
<TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="PersonDataRecord">
<TypeDescriptors>
<TypeDescriptor TypeName="System.String" Name="Name">
<LocalizedDisplayNames>
<LocalizedDisplayName LCID="1033">Name</LocalizedDisplayName>
</LocalizedDisplayNames>
</TypeDescriptor>
<TypeDescriptor TypeName="System.String" Name="DomainId" IdentifierName="DomainId">
<LocalizedDisplayNames>
<LocalizedDisplayName LCID="1033">DomainId</LocalizedDisplayName>
</LocalizedDisplayNames>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>
<MethodInstances>
<MethodInstance Name="PersonSpecificFinderInstance" Type="SpecificFinder" ReturnParameterName="Person" ReturnTypeDescriptorName="PersonDataReader" ReturnTypeDescriptorLevel="0"/>
</MethodInstances>
</Method>
<Method Name="GetPersonList">
<Properties>
<Property Name="RdbCommandText" Type="System.String">
<![CDATA[
SELECT Name, DomainId
FROM People.[V_Person]
WHERE
DomainId LIKE @DomainId
]]>
</Property>
<Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
</Properties>
<FilterDescriptors>
<FilterDescriptor Name="DomainId" Type="Wildcard" />
</FilterDescriptors>
<Parameters>
<Parameter Name="@DomainId" Direction="In">
<TypeDescriptor Name="DomainId" TypeName="System.String" AssociatedFilter="DomainId" >
<DefaultValues>
<DefaultValue Type="System.String" MethodInstanceName="PersonFinderInstance" >%</DefaultValue>
</DefaultValues>
</TypeDescriptor>
</Parameter>
<Parameter Direction="Return" TypeReflectorTypeName="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbTypeReflector" Name="Person">
<TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="PersonDataReader">
<TypeDescriptors>
<TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="PersonDataRecord">
<TypeDescriptors>
<TypeDescriptor TypeName="System.String" Name="Name">
<LocalizedDisplayNames>
<LocalizedDisplayName LCID="1033">Name</LocalizedDisplayName>
</LocalizedDisplayNames>
</TypeDescriptor>
<TypeDescriptor TypeName="System.String" Name="DomainId" IdentifierName="DomainId">
<LocalizedDisplayNames>
<LocalizedDisplayName LCID="1033">DomainId</LocalizedDisplayName>
</LocalizedDisplayNames>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>
<MethodInstances>
<MethodInstance Name="PersonFinderInstance" Type="Finder" ReturnParameterName="Person" ReturnTypeDescriptorName="PersonDataReader" ReturnTypeDescriptorLevel="0"/>
</MethodInstances>
</Method>
<Method Name="GetPersonEnumerator">
<Properties>
<Property Name="RdbCommandText" Type="System.String"><![CDATA[SELECT DomainId FROM People.[V_Person]]]></Property>
<Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
</Properties>
<Parameters>
<Parameter Direction="Return" TypeReflectorTypeName="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbTypeReflector" Name="Person">
<TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="PersonDataReader">
<TypeDescriptors>
<TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="PersonDataRecord">
<TypeDescriptors>
<TypeDescriptor TypeName="System.String" IdentifierName="DomainId" Name="DomainId">
<LocalizedDisplayNames>
<LocalizedDisplayName LCID="1033">DomainId</LocalizedDisplayName>
</LocalizedDisplayNames>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</TypeDescriptors>
</TypeDescriptor>
</Parameter>
</Parameters>
<MethodInstances>
<MethodInstance Name="PersonIdEnumeratorInstance" Type="IdEnumerator" ReturnParameterName="Person" ReturnTypeDescriptorName="PersonDataReader" ReturnTypeDescriptorLevel="0"/>
</MethodInstances>
</Method>
</Methods>
</Entity>
</Entities>
</LobSystem>
Answers
- Found the issue. The TypeDescriptor for the in parameter was missing the IdentifierName attribute. Need it on both the input and output.
curt- Marked As Answer byckoppang Thursday, October 29, 2009 2:53 PM
All Replies
- Hi
I just spent a few seconds reading your post and it looks like your SELECT statement in the GetPerson method expects the @DomainID to be an integer type. Replace the DomainID = @DomainID with DomainID LIKE @DomainID.
Gilles - Found the issue. The TypeDescriptor for the in parameter was missing the IdentifierName attribute. Need it on both the input and output.
curt- Marked As Answer byckoppang Thursday, October 29, 2009 2:53 PM


