Использование веб-службы корпоративного поиска SharePoint (search.asmx) и клиентской объектной модели бок о бок - разные названия документов - PullRequest
2 голосов
/ 20 мая 2011

Я нахожусь в процессе разработки приложения Silverlight, которое требует от пользователя возможности выполнять полнотекстовый поиск документов в библиотеке документов, для которой я использую веб-сервис search.asmx.Кроме того, пользователю разрешен поиск по определенным ограничениям метаданных.Например, каждый документ имеет поле «Язык» в своей записи списка.Я выполняю это, выполняя рекурсивный Caml Query для библиотеки документов.

К сожалению, у меня возникла небольшая проблема: заголовок документов, возвращаемых файлом search.asmx, является заголовком фактического документа, где заголовок документов, возвращаемых объектной моделью клиента.это содержимое поля «Заголовок», хранящееся в списке SharePoint.Можно ли каким-либо образом заставить объектную модель клиента вернуть истинное название документа или получить значение всех возвращенных документов в поле «Заголовок» из веб-службы корпоративного поиска sharepoint?Я искал и не могу найти способ сделать это.

Спасибо.

Пример пакета запроса веб-службы search.asmx:

<QueryPacket>
    <Query>
     <Context>
        <QueryText type='MSSQLFT'>
            SELECT Name, Title, Path, Description, Write, Rank, Size FROM SCOPE() WHERE FREETEXT('something') AND CONTAINS(Path,'http://localhost/Lists/DocLibrary')
        </QueryText>
     </Context>
    </Query>
</QueryPacket>

Модель объекта клиента CamlQueryпример:

<View Scope="Recursive">
  <Query>
    <Where>
      <Eq>
        <FieldRef Name="Language" />
        <Value Type="Text">English</Value>
      </Eq>
    </Where>
  </Query>
</View>

1 Ответ

0 голосов
/ 20 мая 2011

Я думаю, что самый простой способ - заставить объектную модель клиента вернуть истинное поле "Заголовок".

Я думаю, что ваша проблема связана с тем, что столбцы в SharePoint имеют много имен. Некоторые из них используются в пользовательском интерфейсе (отображаемые имена), некоторые являются внутренними (внутреннее имя). Когда вы делаете SPQuery, вы должны использовать внутреннее имя столбца, если вы хотите быть уверенным, чтобы получить правильное (внутренние имена уникальны, отображаемые имена - нет). Веб-сервис search.asmx будет использовать одно значение, а SPQuery будет использовать другое.

Столбец «Заголовок», где «Заголовок» - это, как вы обнаружили, внутреннее имя столбца «Заголовок» в списке SharePoint. Если вы хотите получить другое поле, вам нужно найти его внутреннее имя.

Я рекомендую вам загрузить и использовать SharePoint Manager . Это визуальное представление объектной модели клиента. В этом случае вы можете перейти к своей библиотеке документов, указать поле, которое вы хотели бы получить в своем SPQuery, и посмотреть на его значение «Внутреннее имя». Сделайте ваш SPQuery с этим значением, если ваш FieldRef, и я уверен, что вы получите ожидаемые результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...