Ошибка с собственным определением сущности BDC SharePoint

Я пытаюсь создать свой собственный XML-файл определения приложения для BDC SharePoint, главным образом потому, что я хочу лучше ознакомиться с этими концепциями. Мое приложение использует внутреннюю базу данных Oracle и содержит только одну сущность, предназначенную для простого извлечения подмножества столбцов из одной таблицы базы данных. Сущность ("Аналитические спектры") содержит только один метод Finder с одним входным параметром, который также используется в качестве фильтра.

Вот моя сущность:

<Entity EstimatedInstanceCount="0" Name="CHEMREG.CHEMREG_SPECTRA" DefaultDisplayName="Analytical Spectra">
  <Identifiers>
    <Identifier TypeName="System.Decimal" Name="SPECTRA_ID" DefaultDisplayName="SPECTRA_ID" />
  </Identifiers>
  <Methods>
    <Method Name="GetSpectra">
      <Properties>
        <Property Name="RdbCommandText" Type="System.String">SELECT SPECTRA_ID,
                                                                    BATCH_ID,
                                                                    CREATED_BY,
                                                                    CREATED_DATE,
                                                                    FILE_NAME,
                                                                    COMMENTS,
                                                                    NOTEBOOK_REF,
                                                                    FINAL,
                                                                    PDF_PATH,
                                                                    CHEMIST 
                                                             FROM CHEMREG.CHEMREG_SPECTRA
                                                             WHERE NOTEBOOK_REF LIKE :Notebook_Ref                                                                       
        </Property>
        <Property Name="RdbCommandType" Type="System.Data.CommandType">Text</Property>
      </Properties>
      <FilterDescriptors>
        <FilterDescriptor Type="Wildcard" Name="Notebook Ref" />
      </FilterDescriptors>
      <Parameters>
        <Parameter Direction="In" Name=":Notebook_Ref">
          <TypeDescriptor TypeName="System.String"
                          Name="NOTEBOOK_REF"
                          AssociatedFilter="Notebook Ref">
          </TypeDescriptor>
        </Parameter>
        <Parameter Direction="Return" Name="CHEMREG_SPECTRA">
          <TypeDescriptor TypeName="System.Data.IDataReader, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" IsCollection="true" Name="CHEMREG_SPECTRADataReader">
            <TypeDescriptors>
              <TypeDescriptor TypeName="System.Data.IDataRecord, System.Data, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Name="CHEMREG_SPECTRADataRecord">
                <TypeDescriptors>
                  <TypeDescriptor TypeName="System.Decimal" Name="SPECTRA_ID" IdentifierName="SPECTRA_ID" DefaultDisplayName="Spectra ID" />
                  <TypeDescriptor TypeName="System.String" Name="BATCH_ID" DefaultDisplayName="Batch ID" />
                  <TypeDescriptor TypeName="System.String" Name="CREATED_BY" DefaultDisplayName="Created By"/>
                  <TypeDescriptor TypeName="System.String" Name="CREATED_DATE" DefaultDisplayName="Created Date" />
                  <TypeDescriptor TypeName="System.String" Name="FILE_NAME" DefaultDisplayName="File Name" />
                  <TypeDescriptor TypeName="System.String" Name="COMMENTS" DefaultDisplayName="Comments" />
                  <TypeDescriptor TypeName="System.String" Name="NOTEBOOK_REF" AssociatedFilter="Notebook Ref" DefaultDisplayName="Notebook Ref" />
                  <TypeDescriptor TypeName="System.Decimal" Name="FINAL" DefaultDisplayName="Final" />
                  <TypeDescriptor TypeName="System.String" Name="PDF_PATH" DefaultDisplayName="PDF Path" />
                  <TypeDescriptor TypeName="System.String" Name="CHEMIST" DefaultDisplayName="Chemist" />
                </TypeDescriptors>
              </TypeDescriptor>
            </TypeDescriptors>
          </TypeDescriptor>
        </Parameter>
      </Parameters>
      <MethodInstances>
        <MethodInstance Name="CHEMREG_SPECTRAFinder" Type="Finder" ReturnParameterName="CHEMREG_SPECTRA" ReturnTypeDescriptorName="CHEMREG_SPECTRADataReader" ReturnTypeDescriptorLevel="0" />
      </MethodInstances>
    </Method>
  </Methods>
</Entity>

Мое приложение может быть загружено в BDC очень хорошо (с предупреждением, что SpecificFinder не может быть найден, но я не думал, что это было большое дело... не так ли?). Когда я добавляю на страницу веб-часть списка бизнес-данных и выбираю для отображения свой объект "Аналитические спектры", в пользовательском интерфейсе появляется сообщение об ошибке:

Произошла ошибка при получении данных из Analytical Spectra. Администраторы, смотрите журнал сервера для получения дополнительной информации.

Журнал сервера содержит эту информацию, которая меня смущает:

Ошибка при создании экземпляра типа фильтра: Microsoft.Office.Server.ApplicationRegistry.Runtime.WildcardFilter ... Внутреннее исключение 1: System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова. ---> System.InvalidOperationException: невозможно создать экземпляр по умолчанию для параметра с DirectionType 'Out', 'Return' или 'SqlReturn'

Я смущен этим, потому что кажется, что он жалуется на фильтр моего возвращаемого параметра, и я не определил фильтр для моего возвращаемого параметра. Что я облажался?

1 ответ

Решение

Ах, ха. Проблема была в этой записи в определении типа возвращаемого значения:

<TypeDescriptor TypeName="System.String" 
                Name="NOTEBOOK_REF" 
                AssociatedFilter="Notebook Ref"
                DefaultDisplayName="Notebook Ref" />

Определение типа вывода не должно ссылаться на фильтр. Вместо этого дескриптор типа должен был быть:

<TypeDescriptor TypeName="System.String" 
                Name="NOTEBOOK_REF" 
                DefaultDisplayName="Notebook Ref" />

Работает как шарм после внесения этого изменения.

Другие вопросы по тегам