Я пытаюсь создать свой собственный 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'
Я смущен этим, потому что кажется, что он жалуется на фильтр моего возвращаемого параметра, и я не определил фильтр для моего возвращаемого параметра. Что я облажался?