Ask a questionAsk a question
 

AnswerSpecificFinder error from Business Data Item web part

  • Thursday, October 29, 2009 12:55 PMckoppang Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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

  • Thursday, October 29, 2009 2:53 PMckoppang Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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

  • Thursday, October 29, 2009 1:54 PMAtWorksLLC Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    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
  • Thursday, October 29, 2009 2:53 PMckoppang Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    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
    •